티스토리 뷰

AI/딥러닝(sung kim)

XOR 문제 딥러닝으로 풀기

취뽀가자!! 2018. 7. 23. 06:02

Neural Network


위 그림을 보면 각각은 logistic regression으로 두 개 중에서 하나만 선택할 수 있다. logistic regression 한 개만 사용해서는 xor 문제를 해결할 수 없지만, 그림처럼 3개를 연결해서 사용한다면 가능하다. 기존의 방식을 연결하여 사용하는 것이 NN의 핵심일 수 있다.


XOR using NN


두 개의 feature x1과 x2가 있고, 이들은 0 도는 1의 값을 갖는 boolean 데이터이다. 이때 XOR 연산은 두 개의 값이 같은 경우에는 False, 다른 경우에는 True가 된다는 것을 보여준다. 그래프를 통해서도 볼 수 있다.


위 그림은 과연 XOR을 풀 수 있을지 실제로 계산해 본 그림이다.


그림을 설명해 보면 3개의 logistic regression을 그렸다. 마지막에는 S로 표현되는 sigmoid가 자리하고 있다. 이 말은 hypothesis의 결과가 항상 0과 1 사이의 값으로 조정된다는 것을 뜻한다. 이 그림에서 중요한 것은 앞에 나온 2개의 결과가 마지막 logistic regression의 입력이 되는 부분이다. 앞에 나온 2개의 결과는 y1과 y2이고, 마지막의 입력은 y1과 y2이다.


그림 왼쪽은 x1과 x2가 갖는 값에 대해서 차례대로 계산한 결과다. 여기서는 마지막 계산인 x1과 x2가 모두 1인 경우에 대해서만 캡쳐를 했다. 최종적으로 y hat열에 보면 올바른 값이 계산되는 것을 볼 수 있다


x1과 x2는 (0, 0), (0, 1), (1, 0), (1, 1)

W = (5, 5),   b = -8
(0*5 + 0*5) + -8 =   0 - 8 = -8   ==>   sigmoid(-8) = 0
(0*5 + 1*5) + -8 =   5 - 8 = -3   ==>   sigmoid(-3) = 0
(1*5 + 0*5) + -8 =   5 - 8 = -3   ==>   sigmoid(-3) = 0
(1*5 + 1*5) + -8 = 10 - 8 =   2   ==>   sigmoid(  2) = 1

W = (-7, -7),   b = 3
(0*-7 + 0*-7) + 3 =     0 + 3 =     3   ==>   sigmoid(3) = 1
(0*-7 + 1*-7) + 3 =   -7 + 3 =   -4   ==>   sigmoid(3) = 0
(1*-7 + 0*-7) + 3 =   -7 + 3 =   -4   ==>   sigmoid(3) = 0
(1*-7 + 1*-7) + 3 = -14 + 3 = -11   ==>   sigmoid(3) = 0


마지막 logistic regression에 전달될 x1과 x2는 이전 결과의 조합이므로 (0, 1), (0, 0), (0, 0), (1, 0)

W = (-11, -11),   b = 6
(0*-11 + 1*-11) + 6 = -11 + 6 = -5   ==>   sigmoid(-5) = 0
(0*-11 + 0*-11) + 6 =     0 + 6 =   6   ==>   sigmoid(  6) = 1
(0*-11 + 0*-11) + 6 =     0 + 6 =   6   ==>   sigmoid(  6) = 1
(1*-11 + 0*-11) + 6 = -11 + 6 = -5   ==>   sigmoid(-5) = 0


Forward propagation

지금 까지 설명한 것들을 위 그림처럼 하나로 연결해 정리 할 수 있다. 최초의 x1과 x2는 두 개의 logistic regression에 전달되고, 이들의 계산 결과를 마지막 logistic regression의 입력으로 전달한다.


NN

그림 왼쪽을 오른쪽처럼 처리할 수 있다. logistic regression을 multinomial classification으로 변환할 때, 행렬을 사용해 처리했었다. 오른쪽은 왼쪽 그림에 있는 첫 번째 logistic regression들을 하나로 결합할 수 있다는 것을 보여준다. 여러 개의 logistic regression들을 묶어서 layer라고 부른다.


Neural Network는 여러 개의 logistic regression을 순차적으로 연결하는 구조이기 때문에 코드에서도 동일한 방식으로 나타난다. 그림 오른쪽 아래에 있는 텐서플로우 코드에서 K는 첫 번째 logistic regression들의 결과이고 이것을 행렬 곱셈(matmul)에 다시 전달하고 있다.



-----------------------------------

이 글은 모두를 위한 딥러닝을 듣고 정리한 글입니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함