머신러닝

[머신러닝] 오차 역전파 - 오차 역전파 식 유도, 공식

jmkimmessi 2020. 8. 11. 00:00
반응형

오차 역전파(Back Propagation)

 

편미분과 연쇄 법칙(chain rule)을 이용하여 미분을 분리한 후, 수학 공식으로 나타내어 계산하는 방법

 

오차 역전파는 행렬로 표현되는 수학공식을 이용하기 때문에 빠른 계산이 가능하다.

(수치 미분을 쓸 때보다 훨씬 더 시간을 단축할 수 있다.)

 

 

시그모이드(sigmoid) 함수의 미분

 

$ \begin{eqnarray} \frac{\partial \mathrm{sigmoid} (z)}{\partial z} & = & \frac{\partial}{\partial z} \cdot \frac{1}{1+e^{-z}} \\   & = & \frac{\partial}{\partial z} \cdot (1+e^{-z})^{-1} \\  & = & \frac{e^{-z}}{(1+e^{-z})^{2}} \\  & = & \frac{1}{1+e^{-z}}\times \frac{e^{-z}}{(1+e^{-z})} \\ & = & \frac{1}{(1+e^{-z})} \times \frac{(1+e^{-z})-1}{1+e^{-z}} \\  & = & \frac{1}{(1+e^{-z})} \times \biggl(1 - \frac{1}{(1+e^{-z})} \biggr)  \\ & = & \mathrm{sigmoid} (z) \times (1- \mathrm{sigmoid} (z)) \end{eqnarray} $

 

sigmoid함수를 미분하면 sigmoid로 이루어진 식으로 나오는 걸 알 수 있다.

 

 

적용 예시

예시 모델

 

$ \begin{eqnarray} \frac{\partial E_{1}}{\partial w^{(3)}_{11}}  & = & \frac{\partial E_{1}}{\partial a^{(3)}_{1}} \times \frac{\partial a^{(3)}_{1}}{\partial z^{(3)}_{1}} \times \frac{\partial z^{(3)}_{1}}{\partial w^{(3)}_{11}} \\  & = & \frac{\partial E_{1}}{\partial a^{(3)}_{1}} \times \frac{\partial \mathrm{sigmoid} ({z^{(3)}_{1}})}{\partial z^{(3)}_{1}} \times \frac{\partial z^{(3)}_{1}}{\partial w^{(3)}_{11}} \\ & = & \frac{\partial E_{1}}{\partial a^{(3)}_{1}} \times \mathrm{sigmoid} (z^{(3)}_{1}) \times ( 1 - \mathrm{sigmoid} (z^{(3)}_{1}) ) \times \frac{\partial z^{(3)}_{1}}{\partial w^{(3)}_{11}} \\ & = & \frac{\partial E_{1}}{\partial a^{(3)}_{1}} \times a^{(3)}_{1} \times (1-a^{(3)}_{1}) \times \frac{\partial z^{(3)}_{1}}{\partial w^{(3)}_{11}}    \end{eqnarray} $

 

오차 역전파시, sigmoid함수 적용 예시

 

최종 손실 값(E), 가중치(W), 바이어스(b)

 

최종 손실 값(E)

 

$ E = \frac{1}{n} \sum_{i=1}^{n} ( t^{(3)}_{i} - a^{(3)}_{i} )^{2} = E_{1} + \cdots + E_{n} $

 

정답 t와 출력층의 출력 값 a의 차이를 제곱하는 평균 제곱 오차를 이용하여 나타낸다.

 

가중치(W), 바이어스(b)

 

$ W^{(2)} = \begin{pmatrix} w^{(2)}_{11} & w^{(2)}_{21} \\ w^{(2)}_{12} & w^{(2)}_{22} \end{pmatrix}, \; W^{3} = \begin{pmatrix} w^{(3)}_{11} \\ w^{(3)}_{12} \end{pmatrix}$

 

$b^{(2)} = \begin{pmatrix} b^{(2)}_{1} & b^{(2)}_{2} \end{pmatrix} , \; b^{(3)} = \begin{pmatrix} b^{(3)}_{1} \end{pmatrix} $

 

예시 모델에서의 가중치와 바이어스이다.
예시에서는 총 9번의 수치 미분을 통해 가중치와 바이어스를 계속 업데이트시켜줘야 한다. 하지만 위에서도 말했듯이 이런 방식은 시간이 너무 오래 걸리기 때문에 오차 역전파를 통해 그 시간을 획기적으로 단축시킬 수 있다.

 

 

오차 역전파 식 유도

 

$\begin{eqnarray} \frac{\partial E}{\partial w_{11}^{(3)}} & = & \frac{\partial E_{1}}{\partial w_{11}^{(3)}} + \frac{\partial E_{2}}{\partial w_{11}^{(3)}} \\ & = & \frac{\partial E_{1}}{\partial a_{1}^{(3)}} \times \frac{\partial a_{1}^{(3)}}{\partial z_{1}^{(3)}} \times \frac{\partial z^{(3)}_{1}}{\partial w^{(3)}_{11}}  \\ & = & \frac{\partial {\frac{1}{2}(t^{(3)}_{1} - a_{1}^{(3)})^{2} }}{\partial a_{1}^{(3)}} \times \frac{\partial \mathrm{sigmoid} (z^{(3)}_{1})}{\partial z^{(3)}_{1}} \times \frac{\partial (a_{1}^{(2)} w^{(3)}_{11} + a^{(2)}_{2} w^{(3)}_{12} + b^{(3)}_{1})} {\partial w_{11}^{(3)}} \\ & = & (a^{(3)}_{1} - t^{(3)}_{1}) \times \mathrm{sigmoid} (z^{(3)}_{1} \times (1 - \mathrm{sigmoid}(z^{(3)}_{1})) \times a_{1}^{(2)} \\ & = & (a^{(3)}_{1} - t^{(3)}_{1}) \times a^{(3)}_{1} \times (1-a^{(3)}_{1} ) \times a^{(2)}_{1} \end{eqnarray} $

 

$w^{(3)}_{11}$가 바뀔 때 $E_{1}$가 얼마나 바뀌는지 오차 역전파를 통한 식 변형 예시

 

$ \frac{\partial E}{\partial w^{(3)}_{21}} , \frac{\partial E}{\partial w^{(3)}_{12}} , \frac{\partial E}{\partial w^{(3)}_{22}}$도 이와 같은 방식으로 구하면 된다.

 

$\begin{eqnarray} \frac{\partial E}{\partial b_{1}^{(3)}} & = & \frac{\partial E_{1}}{\partial b_{1}^{(3)}} + \frac{\partial E_{2}}{\partial b_{1}^{(3)}} \\ & = & \frac{\partial E_{1}}{\partial a_{1}^{(3)}} \times \frac{\partial a_{1}^{(3)}}{\partial z_{1}^{(3)}} \times \frac{\partial z^{(3)}_{1}}{\partial b^{(3)}_{1}}  \\ & = & \frac{\partial {\frac{1}{2}(t^{(3)}_{1} - a_{1}^{(3)})^{2} }}{\partial a_{1}^{(3)}} \times \frac{\partial \mathrm{sigmoid} (z^{(3)}_{1})}{\partial z^{(3)}_{1}} \times \frac{\partial (a_{1}^{(2)} w^{(3)}_{11} + a^{(2)}_{2} w^{(3)}_{12} + b^{(3)}_{1})} {\partial b_{1}^{(3)}} \\ & = & (a^{(3)}_{1} - t^{(3)}_{1}) \times \mathrm{sigmoid} (z^{(3)}_{1} \times (1 - \mathrm{sigmoid}(z^{(3)}_{1})) \times 1 \\ & = & (a^{(3)}_{1} - t^{(3)}_{1}) \times a^{(3)}_{1} \times (1-a^{(3)}_{1} ) \times 1 \end{eqnarray} $

 

$b^{(3)}_{1}$가 바뀔 때 $E_{1}$가 얼마나 바뀌는지 오차 역전파를 통한 식 변형 예시

 

$ \frac{\partial E}{\partial b^{(3)}_{2}}$ 도 이와 같은 방식으로 구하면 된다.

 

출력층 오차 역전파 공식

 

$ \begin{eqnarray} \mathrm{loss_3} & = & \begin{pmatrix} (a^{(3)}_{1} -  t^{(3)}_{1})a^{(3)}_{1}(1-a^{(3)}_{1}) & (a^{(3)}_{2}-t^{(3)}_{2})a^{(3)}_{2}(1-a^{(3)}_{2}) \end{pmatrix} \end{eqnarray} $

 

$\begin{eqnarray} \frac{\partial E}{\partial w^{(3)}} & = & \begin{pmatrix} \frac{\partial E}{\partial w^{(3)}_{11}} & \frac{\partial E}{\partial w^{(3)}_{21}} \\ \frac{\partial E}{\partial w^{(3)}_{12}} & \frac{\partial E}{\partial w^{(3)}_{22}} \end{pmatrix} \\ & = & \begin{pmatrix} (a^{(3)}_{1} - t^{(3)}_{1})a^{(3)}_{1}(1-a^{(3)}_{1})a^{(2)}_{1} & (a^{(3)}_{2} - t^{(3)}_{2})a^{(3)}_{2}(1-a^{(3)}_{2})a^{(2)}_{1} \\ (a^{(3)}_{1} - t^{(3)}_{1})a^{(3)}_{1}(1-a^{(3)}_{1})a^{(2)}_{2} & (a^{(3)}_{2} - t^{(3)}_{2})a^{(3)}_{2}(1-a^{(3)}_{2})a^{(2)}_{2} \end{pmatrix}  \\ & = & \begin{pmatrix} a^{(2)}_{1} \\ a^{(2)}_{2} \end{pmatrix} \begin{pmatrix} (a^{(3)}_{1} - t^{(3)}_{1}) a^{(3)}_{1} (1 - a^{(3)}_{1}) & (a^{(3)}_{2} - t^{(3)}_{2}) a^{(3)}_{2} (1 - a^{(3)}_{2}) \end{pmatrix} \\ & = & \mathrm{A2^{T}} \cdot \mathrm{loss_3} \end{eqnarray}$

 

$\begin{eqnarray} \frac{\partial E}{\partial b^{(3)}} & = & \begin{pmatrix} \frac{\partial E}{\partial b^{(3)}_{1}} & \frac{\partial E}{\partial b^{(3)}_{2}} \end{pmatrix} \\ & = & \begin{pmatrix} (a^{(3)}_{1} - t^{(3)}_{1})a^{(3)}_{1}(1-a^{(3)}_{1}) & (a^{(3)}_{2} - t^{(3)})a^{(3)}_{2}(1-a^{(3)}_{2}) \end{pmatrix} \\ & = & \mathrm{loss_3} \end{eqnarray} $

 

$\mathrm{A2}$는 출력층 바로 전에 있는 은닉층 출력

$\mathrm{loss_3}$는 출력층 손실

 

은닉층 오차 역전파 공식 

 

$\mathrm{loss_2} = (\mathrm{loss_3} \cdot \mathrm{W3^{T}}) \times (\mathrm{A2} \times (1- \mathrm{A2})) $

 

$\begin{eqnarray} \frac{\partial E}{\partial W^{(2)}} & = & \mathrm{A1^{T}} \cdot \mathrm{loss_2} \end{eqnarray} $

 

$\begin{eqnarray} \frac{\partial E}{\partial b^{(2)}} & = & \mathrm{loss_2} \end{eqnarray} $

 

$\mathrm{A1}$는 은닉층 바로 전에 있는 은닉층 출력

$\mathrm{loss_2}$는 은닉층 손실

 

출력층에서의 오차 역전파와 다른 점은, 출력층에서 가중치나 바이어스에대한 $E$의 변화량을 계산할때 각 노드 $i$에 대응하는 하나의 $E_{i}$만 역전파를 하면 되지만, 은닉층에서는 $E$까지의 과정이 길고, 가중치나 바이어스가 여러 노드에 영향을 주기 때문에, 그 노드에 대한 계산을 더 해주어야한다. 하지만, 계산하는 논리는 같다.

 

 

반응형