MY MEMO

[Deep LEARNING - Sung Kim] 이론 - 1 본문

MACHINE LEARNING/Sung Kim - 이론

[Deep LEARNING - Sung Kim] 이론 - 1

l_j_yeon 2017. 4. 5. 18:47

Lecture 9-1 : Neural Nets(NN) for XOR


XOR연산은 초반에 많은 연구자들에게 절망감을 주었다.

하지만 여러가지 logic을 합치면 XOR을 풀수 있다.


위의 그림을 보자 3개의 식이 있고 2개의 식으로부터 나온 값으로 XOR을 구할 수 있다.


x1 = 0 , x2 = 0인 값을 확인해보면


첫번째 식에서 -8이라는 값이 나온다.

S(-8) 즉 sigmoid graph에서 -8의 값은 0이된다. 

(위의 값은 0,1의 결과값이 나오기 때문에 binary classification이고 sigmoid함수를 사용하는 것이 좋다.)


두번째 식에서 3이라는 값에서는

S(3) = 1의 값이 나온다.


두 식에서 나온 값을 y1, y2라고 정의하면 

세번재 식에서 -5라는 값이 나온다.

S(-5) = 0이므로 즉 0이 나오게 된다.

이 값은 정답의 값과 같다.


이 과정을 반복하면 결국 XOR을 한 값과 같다는 것을 알 수 있다.


XOR을 구하는 식은 위와 같다.

위의 식은 multinomial classification의 식과 유사하다.





위의 값을 함수로 나타내면 위과 같다.

그리고 함수를 tensorflow로 구현하면 명령어는 위와 같다.


Lecture 9-2 : back propagation (딥네트웍학습시키기)



f = wx +b라고 정의하고 g = wx로 정의한다면

아래와 같이 그릴수있다.

우리는 f에 각 변수가 영향을 얼마나 미치는 지 알고 싶고

그것을 위하여, 각각의 변수값을 편미분해야한다. 

(우리는 f에 얼마나 영향을 미치는 지 알고 싶기 때문에 f를 변수로 편미분한다.)



복잡한 chain의 값을 구하기 위해서는 어떤 식으로 계산해야할까?

먼저 f 즉 정답값부터 시작한다.

그리고 우리가 최종적으로 구하고 싶은 값의 편미분을 적는다.

구하고 싶은 x의 로컬 편미분값이 위와 같이 존재한다.

우리는 최종적으로 구하고 싶은 편미분값을 위와 같이 변화시킬 수 있다.



예를 들어 위와같이 sigmoid함수를 미분한다고 하자.

우리는 sigmoid함수 중 z변수를 아래와 같이 나타낼 수 있다.

오른쪽부터 1/x값을 곱한 결과값은 L1

그리고 +1더한 값을 L2

exp을 계산한 값을 L3로하여 마지막에 -1을 곱할때는

결국 L1*L2*L3이다.


그래서 tensorflow에서는 모든 계산은 그래프이다.



만약 오른쪽 명령어가 tensorflow에 입력되면 tensorflow내에서는

왼쪽과 같은 그래프를 그리고 순서대로 행한다.


이런 방법으로 복잡한 식도 간단하게 기계적으로 계산할 수 있다.

(예전에는 불가능하다고 생각했던 방법이 back propagation으로 간단히 해결될 수 있게 되었다.)











Comments