본문 바로가기
머신러닝

머신러닝 실습 with Tensorflow 7장 - Neural Network for XOR problem -

by ChocoPeanut 2017. 6. 11.

머신러닝 실습 with Tensorflow 7

- Neural Network for XOR problem -

 

XOR 문제Neural Network를 시작시킨 문제라고 생각해도 과언이 아니다. 이전의 문제들은 Wb의 하나의 값만을 이용하여 Linear regression을 통해 해결이 가능하였다. 하지만 XOR의 문제는 하나의 Wb의 값으로 예측하는 것이 불가능하였다. 그래서 나온 방법이 Neural Network이다. 또 다른 layer를 만들어서 1차 결과 값을 새로운 layer의 입력 값으로 넣는 과정을 통해 최종 결과 값을 도출하는 것이다. 따라서 Neural Network에 대한 tensorflow 구현의 첫 번째로 XOR 문제를 풀어볼 것이다.



우선 x_datay_data는 정해져 있다. 입력 값은 4개로 한정되어 있다. x1x2가 모두 0이거나 1이면 결과 값 y0x1x2의 값이 01로 다른 경우 y 값으로 1을 가지게 된다. 따라서 다음과 같은 형태로 data set을 정의할 수 있게 된다.



Neural Networkmultiple logistic regression이라고 생각할 수 있다. 따라서 logistic regression을 여러 개 만든 형태로 코드를 구현할 수 있다. 그렇게 생각을 하면 Wb에 대한 변수가 하나가 아니라 두 개로 만들어야 한다. input에서 첫 번째 hidden layer까지 사용하는 W1b1, 첫 번째 hidden layer에서 output까지 사용하는 W2b2 이렇게 각각 두 개씩 필요하게 된다. 또한 그 과정에서 필요한 layer 계산 결과도 따로 필요하게 된다. 이 때 중요한 것은 Wb 값에 대한 shape가 맞아야한다는 것이다. 우리의 예시에서 W12개의 input을 받아서 2개의 output을 낸다. 이 말은 hidden layer에 해당하는 요소가 2개라는 것을 의미한다. 그러면 W2는 이러한 결과 값 2개를 input으로 받아 최종 결과 값인 하나의 output을 낸다. 그러므로 shape[2, 1]이 된다. layer의 수에 대해서는 임의로 지정해줄 수 있다. 그래서 layer의 수를 늘리거나 줄이는 방법으로 더 정확하게 학습할 수 있는 모델을 찾으면 된다.



cost functiontrain에 대한 것은 마지막 최종 hypothesis를 사용하여 정의하게 된다. 최종 hypothesishidden layer에서 계산한 결과가 들어가 있기 때문이다. predicted accuracy에 대한 계산은 앞의 과정과 똑같다. 그래서 Neural Network의 예시는 layer를 더 만들어주어 wb에 대한 수를 늘리는 것이지 그 이외의 과정에는 차이가 발생하지 않는다는 것을 알 수 있다.



위의 과정을 통해 만들어진 모델을 sess.run()을 통해 학습시키고 predictedaccuracy를 알아보게 되면 잘 동작하는 것을 알 수 있게 된다.