체인 룰이라 불리는 법칙은 사실은 합성 함수 미분의 원리이다.


f(g(x))를 미분하면, f'(g(x)) * g'(x)이 되는데, 이것이 사실은 겉미분*속미분 같은 공식이 아니다. 

g(x)=u 라고 생각하면. 먼저 f(u)를 u로 미분한다음, u를 다시 x로 미분하는 

df/dx = df/du * du/dx

f(u) 의 미분 = f'(u) * u' , u' = g'(x)

이 되서 마치 곱셈나눗셈으로 dO 를 약분하듯이 하게 되어지는 것이다.
(df/dx가 정확히 분수는 아니나, 아래의 합성 함서 미분의 증명을 보면 의미적으로는 약분이 가능한 형태임을 알 수 있다.)



뉴럴 넷을 예로 들면, 에러함수 E(t,y)=f(t,y)를 파라미터 w로 미분을 하게 되면서 체인 룰이 사용된다.

에러함수는 E(t,y)=f(t,y)에서 y는 주어진 데이터의 레이블이고, t는 뉴럴 넷 모델이 예측한 값이다. 즉 t=g(w,h)으로 모델함수 g가 내놓은 결과값이다.( t = g(W^tH) )

즉 이 에러 함수를 w로 미분하려면 사실 먼저 E(t,y) = f( g(w,h) , y ) 의 형태로 t=g(w,h)를 대입해서 w에 대한 합성함수 형태로 바꾼 다음, 이것을 w로 미분하는 것이다.


즉 df/dx = df/du * du/dx 이렇게 체인룰을 쓴다는 것은 사실은 함수 f를 미분하고자 하는 변수 w가 포함된 함수로 풀어서 쓴 다음 걍 합성함수 미분을 하는 것이다.

이때 만약 우리가 미분하고자하는 변수 w가 f에 대한 합성함수 꼴로 풀어써지지 않으면 절대 미분을 할 수가 없다. (즉 함수 f의 input으로 w가 들어있지 않은 경우는 당연히 w로 미분을 할수가 없다는 이야기. 해봤자 f가 상수 취급되어 0이 나온다.)


한가지 첨언을 더하자면, f(t)를 x로 미분하기 위해서는, t가 x에 의한 어떤 함수의 결과로 연관되어 있어야만 하는 것이다. (만약 이 연관성이 없으면 당연히 체인룰을 적용할 수 없고, 이 말은 그냥 함수 f(t)는 x라는 변수가 input이 아닌 함수라는 이야기가 된다.)


결론 : 뉴럴넷의 체인룰은 함수 f(t)에서, t를 파라미터 w가 포함된 합성함수 t=g(w)로 대입시킨다음, w로 그냥 미분한 것이다.(즉 걍 t를 g(w)로 바꾼다음 합성 함수 미분을 한것이다.)

그래서 이를 그냥 아주 심플하게 df/dw = df/dt * dt/dw 이런식으로 간단히 정리가 가능하고, 이것이 가능하려면 당연히 함수 f를 w에 대한 합성함수로 풀어서 쓸 수 있어야한다.

이말은 함수 f(t)를 w로 미분하려면, 함수에서의 t가 사실은 w에 의한 함수( t=g(w) )일 때만 가능하다.


그런데 일반적으로 뉴럴 넷의 모델이 내는 결과는 모든 파라미터들이 input으로 들어간 함수의 최종 결과이기 때문에 모든 파라미터에 대해 체인룰이 가능하다.




http://blog.naver.com/PostView.nhn?blogId=alwaysneoi&logNo=100171733834


by 곽동현 이스텔리앙 2015.10.11 15:49
| 1 2 3 4 5 6 ··· 22 |