Soohyun’s Machine-learning

[math]: 연쇄 법칙 (chain rule) 본문

Machine Learning/Math & Stats

[math]: 연쇄 법칙 (chain rule)

Alex_Rose 2017. 10. 14. 17:10

위키 백과의 정의


chain rule은 두 함수를 합성한 합성 함수의 도함수(derivative)에 관한 공식이다. 



합성 함수 : 두 개 이상의 함수를 하나의 함수로 결합하여 만들어진 함수. 어떤 함수 속에 또 다른 함수가 들어있고, 그 또다른 함수속에 여전히 다른 함수가 들어있다. 



chain rule = 연쇄법칙 = 합성함수의 미분법. 

합성함수의 미분은 합성함수를 구성하는 각 함수의 미분으로 곱으로 나타낼 수 있다. 




함수 y = f(x)와 함수 z = g(y)를 합성한 함수  의 미분법은 다음과 같다.




위의 식에서의 g'(y) = g'(f(x))를 뜻하고, 두 함수 f(x), g(y)가 모두 미분가능한 함수라는 것을 가정한다. 



합성 함수의 미분 공식은 다음과 같이 쓸 수 있다. 




이와 같이 그 공식이 마치 사슬이 이어져 있는 것 같다 해서, 합성함수의 미분 공식을 연쇄법칙이라고도 한다. 


출처 : http://webcache.googleusercontent.com/search?q=cache:8PaqTCKodBgJ:www.math.snu.ac.kr/~hongjong/c4ns/ChainRule.htm+&cd=3&hl=ko&ct=clnk&gl=kr





e.g. (밑바닥 딥러닝 참고)



위와 같은 합성 함수가 있다. 이 식은 아래와 같이 두 개의 식으로 나눌 수 있다.



1) 

2)  




====================우선 아래는 내가 이해한 chain rule이라 틀릴 수 있음.


chain rule은 아래를 말한다.


dL         dL         dz

----  =  -----  *  -------                          dz가 각각 분모와 분자에 있어서 삭제해보면? 왼쪽 부분과 똑같은 모습이 된다. 

dx         dz         dx                             이러한 곱셈의 속성을 이용한 방법이다. 

                                                        dL/dx를 따로 구하지말고, dL/dz와 dz/dx를 구해놓고 그걸 곱하면 dL/dx가 된다는 것. 






L은 최종 출력값, z는 function에서 내보낸 값. 


dz

----  (x에 대해 편미분) = 1            (x에 대한 편미분이라 y는 상수로 취급되어서 값이 0이 되고, x의 지수인 1만 폴짝 뛰어내려서 1이 된다.)

dx 



dz

---  (y에 대해 편미분) = 1              (y에 대한 미분이라 x는 상수로 취급, 값이 0이 되고, y의 지수인 1만 폴짝 뛰어내려서 1이 된다.)

dy 



feedforward를 할 때 수식은 x * W + b이다. ReLU를 제외하고 일단 이 부분만 backprop으로 구현해보면..



   

  

          *     +bz


    



Backprop에서 cs231n의 lecture 4의 정리를 보면..


add gate : gradient distributor 

max gate : gradient router

mul gate : gradient switcher (mul = multiplication)



y 에서 b로 갈때에는 dz/dz (이건 gradient다.) 이므로 1이 된다. 둘 다 값이 같으니까.  (그런데 dL/dz가 되면 다를 수 있다.)


+b에서 * (multiplication node)로 갈 때, add 연산은 그냥 흘려보낸다. 뭘 하든 * 1이기 때문에 그냥 같은 값을 보내면 된다. 


* 에서 x로 갈 때와 W로 갈 때에는 x로 보낼때는 W값 * 흘러들어온 값을, W로 보낼때는 x값 * 흘러들어온 값을 해서 보낸다. 

(위의 mul gate가 gradient switcher라고 불리는 이유)


그래서 x = W * 흘러들어온 값(여기에서는 1) 이 되고, W = x * 흘러들어온 값이 되어서, x로 보내지는 값은 W, W로 보내지는 값은 x가 된다. 





실제 연산 예시


For one-variable functions : multiply derivatives


z = 3y

y = x^2  (x의 제곱)


이면


 dz      dz    dy

----- = ----  -----    = (3)(2x) = 6x 

 dx      dy    dx


<출처 : cs224n>




- 아직까지 exp gate에서는 얘가 어떻게 보내는지 완전히 이해하지 못했다. max는 flip해서 값이 들어온 쪽에 0을 보내고, 들어오지 않은 쪽에는 max값을 보낸다.


- add gate를 제외한.. 일단 multiplication과 exp, max는 값을 연산해주고 흘려보낸다. 


- gradient를 넣고 넣는거라.. 이 backprop을 gradient update 공식이라고 봐도 되나?








Comments