XOR 문제 딥러닝으로 풀기

해당 게시물은 Edwith에서 제공하는
머신러닝과 딥러닝 BASIC을 듣고 요약 정리한 글입니다.

Neural Network를 사용해 XOR 풀기

X1 X2 XOR
0 0 0
0 1 1
1 0 1
1 1 0

하나의 Unit

아직 안만듬

위의 Unit과 같은 모양이지만 다른 weightbias를 갖는
두개의 Unit에서 나온 결과(Y1, Y2) 다른 Unit에 넣어 값을 예측한다.

아직 안만듬

Sigmoid Function

입력값이 작을수록 0에 수렴
입력값이 클수록 1에 수렴

아직 안만듬

[이미지 참조]

계산 과정

Y1=[00][55]8=8,Sigmoid(Y1)=0 Y1 = \begin{bmatrix} 0 & 0 \\ \end{bmatrix} \begin{bmatrix} 5 \\ 5 \\ \end{bmatrix} -8 = -8, Sigmoid(Y1) = 0 Y2=[00][77]+3=3,Sigmoid(Y2)=1 Y2 = \begin{bmatrix} 0 & 0 \\ \end{bmatrix} \begin{bmatrix} -7 \\ -7 \\ \end{bmatrix} + 3 = 3, Sigmoid(Y2) = 1 Yˉ=[01][1111]+6=11+6=5,Sigmoid(Yˉ)=0 \bar{ Y } = \begin{bmatrix} 0 & 1 \\ \end{bmatrix} \begin{bmatrix} -11 \\ -11 \\ \end{bmatrix} + 6 = -11 + 6 = 5, Sigmoid(\bar{ Y }) = 0

위와 같은 방법으로 아래의 모든 케이스를 진행

결과 확인 표

X1 X2 Y1 S(Y1) Y2 S(Y2) Ȳ S(Ȳ) XOR
0 0 -8 0 3 1 -5 0 0
0 1 -3 0 -4 0 6 1 1
1 0 -3 0 -4 0 6 1 1
1 1 2 1 -11 0 -5 0 0

위의 표를 확인하면 2개의 UnitSigmoid Function
사용한 결과 XOR문제가 해결되었다.

Forward Propagation

아래와 같은 구조를 하나의 Neural Network라고 할 수 있다.

아직 안만듬

다른 weight값과 bias값은 존재 가능
위의 구조는 아래의 Nominal Classification과 비슷하다.

[wA1wA2wA3wB1wB2wB3wC1wC2wC3][x1x2x3]=[wA1x1wA2x2wA3x3wB1x1wB2x2wB3x3wC1x1wC2x2wC3x3]=[yAyByC] \begin{bmatrix} w_{A1} & w_{A2} & w_{A3} \\ w_{B1} & w_{B2} & w_{B3} \\ w_{C1} & w_{C2} & w_{C3} \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} w_{A1}x_1 & w_{A2}x_2 & w_{A3}x_3 \\ w_{B1}x_1 & w_{B2}x_2 & w_{B3}x_3 \\ w_{C1}x_1 & w_{C2}x_2 & w_{C3}x_3 \\ \end{bmatrix} = \begin{bmatrix} \overline{y_A} \\ \overline{y_B} \\ \overline{y_C} \\ \end{bmatrix}

그림으로 위의 그림의 구조를 표현해보자면

아직 안만듬

다음과 같은 구조로 표현이 가능하다.
위의 구조를 수식으로 정리하면 아래와 같다.

뒤쪽 Unit 구조의 수식화

K(X)=Sigmoid(XW1+B1)K(X) = Sigmoid(XW_1 + B_1)

모든 Unit 구조의 수식화

Yˉ=H(X)=Sigmoid(K(X)W2+B2) \bar{ Y } = H(X) = Sigmoid(K(X){W_2} + {B_2})

다음 수식을 코드로 구현하면 아래와 같다.

K = tf.sigmoid(tf.matmul(X,, W1) + b1)
hypothesis = tf.sigmoid(tf.matmul(K, W2) + 2)

Written by@Minsu Kim
Software Engineer at KakaoPay Corp.