AI & BigData/모두를 위한 딥러닝(정리)

딥러닝(DeepLearning) #2_ XOR using Neural Nets(NN)

Tigercow.Door 2018. 4. 12. 21:40



안녕하세요. 문범우입니다.

이번 포스팅에서는 XOR문제에 대한 이야기를 해보도록 하겠습니다.


* 해당 포스트의 모든 내용은 김성훈 교수님의 '모두를 위한 딥러닝'을 바탕으로 제작되었습니다.

관련한 상세 내용은 아래 링크를 참고해주세요.

https://hunkim.github.io/ml/



1. XOR 문제의 개요


지난 포스팅에서 딥러닝에 대한 개념과 그 동안의 역사에 대해서 알아보며, XOR문제가 매우 까다로운 문제로 다가왔음을 알아보았습니다.


그럼 그 골치덩이 문제를 어떻게 풀 수 있을까요?


먼저, 그때에 그 문제에 부딪혔던 이유 중 하나는, XOR문제가 단순히 하나의 모델로는 풀이가 불가능하다라는 증명 및 사실들 때문이었습니다.


그렇다면, 하나의 모델이 아닌 2개, 3개, 다수의 모델을 이용하면 어떨까요?


이러한 경우에는 XOR문제에 대해 풀이가 가능하다고 했습니다.


하지만, 또 한번의 문제가 발생했습니다.


여러개의 모델을 사용하는 경우에, 각각의 모델에 대한 학습은 어떻게 할 것이냐가 문제였습니다.

문제가 복잡해지고 어려워질수록 다수의 모델을 사용해야 하는데, 이 때 그러한 모델들을 학습하기 위한 W와 b를 구할 수 있는 해결방안이 없었습니다.



2. XOR using NN


그럼 먼저, Neural Network로 XOR문제를 해결해보도록 하겠습니다.

XOR은 위와 같은 속성을 가지고 있습니다.

x1 과 x2가 서로 다를 때만 그 결과가 1이고 나머지 경우에는 0의 결과값을 가집니다.

그리고 위의 그래프와 같이, 이를 그래프로 표현했을때 결과값 1과 0에 대해서 하나의 직선으로 정확히 나눌 수가 없습니다.


이러한 문제를 우리가 3개의 모델을 가지고 풀어보도록 하겠습니다.


위의 그림과 같은 3개의 모델을 이용합니다.

Model1 과 Model2에는 각각 x1과 x2의 데이터가 입력되고, 이에 대한 결과 값 y1과 y2를 Model3의 입력값으로 하여 최종 y값을 얻습니다.

이때 그림에서 동그라미 S가 있는 것은 sigmoid 함수를 나타낸 것입니다.


sigmoid는 과거에 살펴보았는데 아래와 같은 형태를 띄는 함수 입니다.



그럼 3개의 모델을 이용하는 것을 표로 정리해보면 다음과 같습니다.


X1

X2

Y1

Y2

Y

XOR

0

0




0

0

1




1

1

0




1

1

1




0


이제 이를 토대로 하여 실제 계산을 해보겠습니다.

다만 각 모델에 대한 W값과 b 값이 필요한데, 이를 구하는 방법은 다음 포스팅에서 다루도록 하고 일단은 임의의 값을 대입하여 풀이해보도록 해보겠습니다.



위와 같이 각 모델에 대한 W 와 b 값을 정하여 계산을 진행합니다.



위와 같이 각각의 X1, X2에 따라서 계산해보았습니다.

시그모이드에 관해서는 입력값이 양수이면 1, 음수이면 0으로 단순하게 계산하였습니다.

계산을 통해 얻은 값들을 표에 정리하면 다음과 같습니다.


X1

X2

Y1

Y2

Y

XOR

0

0

0

1

0

0

0

1

0

0

1

1

1

0

0

0

1

1

1

1

1

0

0

0

위의 표와 같이, 3개의 모델을 이용했을 때 최종적인 결과 값인 Y와 XOR의 결과 값이 일치함을 볼 수 있습니다.



즉, 위와 같이 3개의 모델을 이용해서 Neural Network를 구성하면 XOR 문제를 해결할 수 있습니다.

그런데 우리가 임의로 설정했던 W와 b값과 같은 형태말고도 다른 형태의 값들이 존재할까요?

한번 스스로 생각해보고 고민해보시길 바랍니다.


또한, 위와 같은 모델은 우리가 과거에 보았던 Multinomial 을 이용해 아래와 같이 표현할 수도 있습니다.



Model 1과 Model 2를 합친 것인데, 이때 W와 b를 알맞게 수정해줘야 합니다.

그리고 위에서 Model 1+2의 W를 W1, b를 b1이라고 하고 Model3의 W를 W2, b를 b2라고 한다면


K = sigmoid(X*W1 + b1)

Y = sigmoid(K*W2 + b2)


가 될 것이며, 이를 tensorflow 를 이용해 아래와 같이 표현할 수도 있습니다.


그럼, 이제 최종적으로 위와 같은 모델에서 W1, b1, W2, b2를 어떻게 계산해낼 수 있을까요?

이에 대한 것은 다음 포스팅에서 다뤄보도록 하겠습니다.

728x90