-
6. 퍼셉트론(Perceptron)AI/딥러닝 2019. 7. 12. 02:56
퍼셉트론, 최초의 인공신경망입니다. 유서 깊네요.
선형 분류할 때 사용됩니다.
계속 사용했던 성적 데이터입니다. 이런 식으로 선형 분류해주는 게 Perceptron입니다. 방식은 이전에 봐온 것과 매우 유사합니다.
w1*x1 + w2*x2 + w3*x3+....+wn*xn을 계산합니다. 이때 나온 결괏값이 특정 threshold를 넘으면 1, 아니면 0으로 체크합니다.
X = (x1, x2, x3,... xn) (Input vector), W = (w1, w2, w3,..., wn) (Weight vector), t = threshold(임계점)라고 하겠습니다.
우리가 원하는 것은 X·W > t 이면 1, 아니면 0으로 만드는 것입니다. 편의를 위해 t를 왼쪽으로 넘기면 다음과 같은 수식을 얻을 수 있습니다.
X·W - t·1 > 0.
이때, -t를 n+1번째 Weight, 1을 n+1번째 Input으로 생각한다면, X = (x1, x2,..., xn, 1), W = (w1, w2,..., wn, -t)로 둘 다 n+1차원의 벡터로 바꿀 수 있습니다. 다시 식을 고치면 X·W > 0 가 됩니다.
이런 식으로 분류를 해주는 셈입니다. 다만, 선형적으로 나눌 수 있을 때만 가능했습니다. XOR문제로 AI Winter가 다가왔습니다.
Multi-Layer Perceptron
그림 1. 퍼셉트론 하나만으론 어떻게 해도 선형 분류가 되지 않음. 그림2.퍼셉트론 두개로 분류 성공 XOR은 두 항이 모두 0이거나, 1로 같을 때만 1, 다르면 0인 논리 연산자입니다.
좌표상에서 이처럼 표시되기 때문에(빨간색 : 1, 파란색 : 0) 더 이상 단일 퍼셉트론으론 선형 분류를 할 수 없었습니다.
해결방법은 퍼셉트론을 여러 개 쌓는 것이었습니다.
XOR Input, Output을 표로 정리하면 다음과 같습니다.
y x1 x2 1 0 0 0 0 1 0 1 0 1 1 1 이제 인공신경망을 그려봅니다.
Multi-Layer Perceptron의 신경망 구조를 그림으로 그려봤습니다. 여기서 화살표에 쓰인 숫자는 가중치 weight를 의미합니다. 그리고 1이 추가돼 3개의 input인데, 1은 바로 위에서 threshold를 넘겼을 때 발생한 1입니다. 그리고 각 층에선 활성 함수로 sigmoid를 사용할 겁니다.
Layer 1 : Input shape = [1, 3] Weight shape = [3, 2] Output shape = [1, 2]
Layer 2 : Input shape = [1, 3] Weight shape = [3, 1] Output shape = [1, 1]
이제 위 Table의 Input을 차례로 넣어보겠습니다.
Layer 1
g1 weight = (2, -2, 0) g2 weight = (1, 3, -1) g1 = x1*w11 + x2*w12 + x3*w13 g2 = x1*w21 + x2*w22 + x3*w23
Layer 2
f weight = (3, -2, -1) f = g1*w1 + g2*w2 + g3*w3
x1 x2 g1 g2 f y 0 0 (2*0) + (-2*0) +(0*1) = 0 sigmoid(0) = 0.5 (1*0) + (3*0) + (-1*1) = -1 sigmoid(-1) = 0.269 (3*0.5) + (-2*0.269) + (-1*1) = -0.038 sigmoid(-0.038) = 0.491 1 0 1 (2*0) + (-2*1) + (0*1) = -2 sigmoid(-2) = 0.119 (1*0) + (3*1) + (-1*1) = 2 sigmoid(2) = 0.881 (3*0.119) + (-2*0.881) + (-1*1) = -2.405 sigmoid(-2.405) = 0.083 0 1 0 (2*1) + (-2*0) + (0*1) = 2 sigmoid(2) = 0.881 (1*1) + (3*0) + (-1*1) = 0 sigmoid(0) = 0.5 (3*0.881) + (-2*0.5) + (-1*1) = 0.643 sigmoid(0.643) = 0.655 0 1 1 (2*1) + (-2*1) + (0*1) = 0 sigmoid(0) = 0.5 (1*1) + (3*1) + (-1*1) = 3 sigmoid(3) = 0.953 (3*0.5) + (-2*0.953) + (-1*1) = -1.406 sigmoid(-1.406) = 0.197 1 이것을 정리하는 이유는, 다음에 할 것이 역전파(Backpropagation)이기 때문입니다. 힘들다 (틀린 점이 있다면 지적해주세요,,)
반응형'AI > 딥러닝' 카테고리의 다른 글
8. 경사 하강법 종류 (0) 2019.07.14 7. 역전파(Back propagation) (0) 2019.07.14 5. Sotfmax, Cross Entropy (0) 2019.07.11 4. 로지스틱 회귀(Logistic Regression) (0) 2019.07.11 3. 다변량 선형 회귀(Multivariate Linear Regression) (0) 2019.07.11