본문 바로가기

PROJECT

[딥러닝 + TensorFlow] XOR문제 딥러닝으로 풀기

▶XOR 문제 딥러닝으로 풀기

 

참고 유튜브 : https://youtu.be/GYecDQQwTdI

 

하나의 unit으로는 xor문제를 풀기 어려우니 unit여러개를 합쳐야한다. 각각의 weight과 bias는 그렇다면 어떻게 학습시켜야할까? 

 

 

 

 

위에 보이는 세개의 unit으로 xor문제를 풀어보려고한다. 한개의 unit은 2개의 입력과 1개의 출력을 가지고 있다. 처음에는 보라색과 초록색 unit에 0과 0을 넣어보자. 보라색에서는 (0*5 + 0*5) - 8을 해준다. 그러면 -8이 된다.  그렇다면 시그모이드 함수를 보자.

https://m.blog.naver.com/2feelus/220363930362

위에 보이는 그림처럼 -3은 0에 가까워져 출력은 0으로 나온다. 이런식으로 초록색도 풀어보면 표가 차례로 채워진다.

표를 보면 xor값과 출력값이 같음으로 위에 unit3개로 xor문제를 해결할 수 있다고 본다.

 

이것을 하나로 뭉쳐서 그려보면

아래와 같은 그림을 얻을 수 있다. 아래와 같은 것이 바로 하나의 뉴럴 네트워크로 볼 수 있는것이다.

 

 

 

 

 

만약 왼쪽이 원래 그래프라면 초록색과 보라색을 하나로 합칠수는 없을까? weight과 bias를 위에 보이는 것과 같이 2차원배열로 바꿔주거나 원소를 늘려주면 된다. 그렇다면 식은

k(x) = sigmoid(xw1 +B1)

마지막 출력값 Y = H(x) = sigmoid(K(x)W2 + b2)로 구해주면된다.

그렇다면 텐서플로우 코드는

 

 

 

 

▶딥 네트워크 학습시키기 (backpropagation)

참고 동영상 : https://youtu.be/573EZkzfnZ0

 

그렇다면 위에처럼 unit에 값을 주지 않고 어떻게 자동적으로 학습시킬 수 있을까? cost의 최소값을 찾으려면 미분을 시켜야했다. 하지만 unit이 많아지면서 각각의 입력이 y에 미치는 영향, 즉 미분값을 알아야 각 unit의 weight을 조절할 수가 있는데 수학적으로 그것을 너무 복잡하다고 한다. 

 

위에 그림처럼 식이 있고 아래 그래프처럼 뉴럴 네트워크로 바꿔주자. 여기서 w와 x와 가 f에 미치는 영향을 구하려면 각각의 미분값을 구해주면된다. 방법은 1.forward 2.backward 두가지고 나눠서 실행된다.

g =wx를 미분한다면 Δg/Δw = x이고 Δg/Δx =w일것이다.

g =g+b를 미분한다면 Δf/Δg = 1이고 Δf/Δb =1일것이다.

w = -2이고 x =5라고 해보자. 그러고 Δf/Δw = Δf/Δg* Δg/Δw=1*w=1*5=5가나온다.

Δf/Δw =  Δf/Δg* Δg/Δx=1*x=1*(-2)=-2가 된다.

 

여기서 미분의 의미를 알 수있는데 b는 f에 미치는 영향이 1:1이라고 볼 수 있다. w는 5배 바뀐다는 뜻이다. 이 관계를 이용하면 조정이 가능하다. 

 

 

그렇다면 사이에 많은 노드들이 들어가있는 복잡한 네트워크를 보자면 back propagation이니만 마지막 노드만 보면 a가 f에 미치는 영향은 미분을 이용해서 구할 수 있는것이다. 이런식으로 뒤로 이어서 가면서 계산하면 된다.여기서 궁긍적으로 구하고 싶은 것은 x가 f에 미치는 영향이다. 우리는 여기서 x가 미치는 영향이 g에 미치는 영향은 안다.  여기서 x의 바로 전 노드의 미분값 즉, Δg/Δx를 x의 local값이라 하면 Δf/Δx= Δf/Δg * Δg/Δx로구해주면된다.

 

▶backpropagation - TensorFlow

 

텐서플로우는 각각을 모두 그래프로 가지고 있고 이것을 이용해 자동으로 구현해준다.

더 중요한 cost함수도 마찬가지다.