backpropagation 손으로 따라가 보기

2016. 11. 17. 14:39machine learning

들을 때면 '아하~' 하고 이해하지만 자고 일어나면 항상 '왜 저렇게 되지??' 의 대명사가 되었던 backpropagation..


그래서 직접 손으로 따라가 보기로 했다.


target이 되는 방정식은 y = wx의 가장 간단한 1차 방정식..


원래는 y =3x의 방정식인데, 이를 찾아가는 과정을 backpropagation을 써서 따라가 보기로 했다.


우선 w의 처음 초기 값은 1로 설정한다.


그리고 cost function은 (target - 예측값)의 제곱을 구하는 MSE를 쓰기로 한다.


그럼 이제부터가 관건인데..


우리가 실제 알고 싶어하는 것은 w 값이 변했을 때 cost function의 변화량이 얼마나 바뀌는가 이다. 


왜냐하면 cost function의 변화량이 크다는 것은 아직 정답 값과 예측 값 사이의 차이가 크다는 이야기이고 결국에는 w 값을 업데이트 해 줘야 한다는 이야기이기 때문이다.


다르게 말해서 cost function의 변화량이 거의 없다는 이야기는 정답 값과 예측 값 사이의 차이가 거의 없다는 이야기가 되는 것이고, 그 시점의 w 값이 결국에는 우리가 찾는 원하는 값이 된다.


그럼 이제 w가 변화 했을 때 cost 함수의 변화량을 찾아보자.




chain rule에 의해 W의 변화량에 대한 cost의 변화량은 위의 식처럼 설명할 수 있다.

Y를 W로 미분하면 X가 남게 되고, cost 함수인 ( target - Y)의 제곱을 Y로 미분하게 되면 -2(target - Y) 가 된다.

결국에 W의 변화량에 대한 cost의 변화량은 -2X(target- Y)가 되는 셈이다.


그럼 이제 실제로 값을 구해 보자.


X에 1이란 값이 들어가면 W의 초기 값은 1이었으므로 예측값 Y는 1이된다. 실제의 W값은 3이기 때문에 정답 값은 3이 나타난다.


이에 대한 변화량을 살펴보면 -2 * 1 * ( 3 - 1) = -4 란 값이 나타난다.


-4란 변화량이 나타났고 이것을 이제 W 값에 반영을 해야 한다. 반영할때는 해당 변화량을 그대로 적용하지 않고 learning rate라고 해서 어느 정도의 학습 속도 조절을 해주는 파라미터를 둬서 반영을 한다. learning rate를 0.5로 뒀다고 가정하자.


그럼 W 값은 아래와 같이 나타날 수 있다.



위의 식을 적용해 보면 갱신된 w 값은 1 - ( 0.5 * -4) = 3이 된다.


X에 2 값을 넣고 다시 실행해보자. w 값은 3이 되고 예측값 Y는 6이 된다. 실제 정답 값도 6이 나타난다.


변화량을 살펴보면 -2 * 2 * ( 6 - 6 ) = 0 이 된다.


변화량이 0이기 때문에 w에 대한 갱신할 값도 없을 것이고, 결국에는 3이 w의 최종 값이 되는 것이다.


여기서는 반복 계산량을 줄이기 위해 learning rate를 0.5로 뒀는데 0.1로 둔다면 3을 찾아가는 과정이 좀 더 길어질 것이다.


아주 복잡한 모델의 backpropagation도 결국에는 이와 같은 원리를 기반으로 동작한다는 것을 이해한다면 딥러닝도 그렇게 어렵지만은 않을 것 같다.