-
1. 퍼셉트론(perceptron)잡다한 것들 2020. 11. 6. 23:17반응형
퍼셉트론(perceptron)
- 인공신경망의 한 종류
- 1957년에 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트 (Frank Rosenblatt)에 의해 고안되었다.
- 각 노드의 '입력값'과 '가중값'의 곱을 모두 합한 값이 '임계값'보다 크면 결과값으로 1을 출력한다. 그렇지 않으면 결과값으로 0 (또는 -1)을 출력한다.
- 입력값을 x1, x2라 하고, 가중값을 w1, w2라 하고, 임계값을 theta라 하면 다음과 같은 함수를 만들수 있다.
def perceptron(x1, x2): w1, w2, theta = .4, .4, .7 return 0 if x1 * w1 + x2 * w2 <= theta else 1 print(perceptron(0, 0), perceptron(0, 1), perceptron(1, 0), perceptron(1, 1))
퍼셉트론은 1차 방정식
- x1을 x, x2를 y로 두면 나머지는 상수항들.
- 중학교 때 배운 1차 방정식으로 표현하면 y = ax + b의 형태로 바꿀 수 있다.
- 그래프를 그리자. (그래프는 생략.)
- 이 그래프의 위는 1, 이 그래프의 아래는 0이 되는 선형 분류기가 퍼셉트론의 정체인 것을 알 수 있다.
퍼셉트론으로 논리연산자 만들기
AND
x1 x2 y 0 0 0 0 1 0 1 0 0 1 1 1 def AND(x1, x2): w1, w2, theta = .4, .4, .7 return 0 if x1 * w1 + x2 * w2 <= theta else 1 print(AND(0, 0), AND(0, 1), AND(1, 0), AND(1, 1)) # 0 0 0 1
OR
def OR(x1, x2): w1, w2, theta = .4, .4, .3 return 0 if x1 * w1 + x2 * w2 <= theta else 1 print(OR(0, 0), OR(0, 1), OR(1, 0), OR(1, 1))
NAND
def NAND(x1, x2): w1, w2, theta = -.4, -.4, -.6 return 0 if x1 * w1 + x2 * w2 <= theta else 1 print(NAND(0, 0), NAND(0, 1), NAND(1, 0), NAND(1, 1))
XOR
- XOR은 단층 퍼셉트론으론 풀 수 없다.
- 퍼셉트론은 선형분류기
- XOR은 비선형 문제.
- 하지만 다층으로 비선형 문제도 풀 수 있다.
def XOR(x1, x2): return AND(NAND(x1, x2), OR(x1, x2)) print(XOR(0, 0), XOR(0, 1), XOR(1, 0), XOR(1, 1))
def XOR(x1, x2): h1 = NAND(x1, x2) return NAND(NAND(x1, h1), NAND(h1, x2)) print(XOR(0, 0), XOR(0, 1), XOR(1, 0), XOR(1, 1))
NAND 만으로도 XOR 회로를 만들 수 있다.
반응형