오차역전파 계산법 -2
6. 은닉층의 오차 수정하기
오차 업데이트 식을 구했으니 과정을 보도록 하겠습니다.
가중치에 기울기를 뺀 값을 구해야 하므로
$$ w_{11}(t+1) = w_{11}t - \frac{\partial Er Y_{out}}{\partial w_{11}} $$
으로 계산해야 합니다.
$y_{h1}$이 아니라 $Y_{out}$인 이유는 $y_{h1}$이 은닉층에 있기 때문입니다.
기울기를 구하면
$$ \frac{\partial Er Y_{out}}{\partial w_{11}} = \frac{\partial Er Y_{out}}{\partial y_{h1}} \cdot \frac{\partial y_{h1}}{\partial ws_1} \cdot \frac{\partial ws_1}{\partial w_{11}} $$
이고
$$ \frac{\partial y_{h1}}{\partial ws_1} \cdot \frac{\partial ws_1}{\partial w_{11}} = y_{h1}(1-y_{h1}) \cdot x_1 $$
로 될 수 있습니다.
7. 은닉층의 오차 계산법
위의 식에서 $\frac{\partial Er Y_{out}}{\partial y_{h1}}$의 계산은 은닉층에선 다릅니다.
$$ \frac{\partial Er Y_{out}}{\partial y_{h1}} = \frac{\partial (Er y_{o1} + Er y_{o2}}{\partial y_{h1}}) = \frac{\partial Er y_{o1}}{\partial y_{h1}} + \frac{\partial Er y_{o2}}{\partial y_{h1}} $$
- $\frac{\partial Er y_{o1}}{\partial y_{h1}}$
$$ \frac{\partial Er y_{o1}}{\partial y_{h1}} = \frac{\partial Er y_{o1}}{\partial ws_3} \cdot \frac{\partial ws_3}{\partial y_{h1}}$$
이 되고
$$\frac{\partial Er y_{o1}}{\partial ws_3} = \frac{\partial Er y_{o1}}{\partial y_{o1}} \cdot \frac{\partial y_{o1}}{\partial ws_3}$$
$\frac{\partial ws_3}{\partial y_{h1}} = w_{31} $
로 됩니다.
정리하면
$$ \frac{\partial Er y_{o1}}{\partial y_{h1}} = (y_{o1}-y_{t1}) \cdot y_{o1}(1-y_{o1}) \cdot w_{31} $$
으로 계산됩니다.
$ (y_{o1}-y_{t1}) \cdot y_{o1}(1-y_{o1})$ 이 다시 보이는데 앞 글에서 이 식은 델타식이라고 했습니다.
그러므로
$$\frac{\partial Er y_{o1}}{\partial y_{h1}} = \delta y_{o1} \cdot w_{31} $$
로 간단히 정리할 수 있습니다.
- $ \frac{\partial Er y_{o2}}{\partial y_{h1}} $
$$ \frac{\partial Er y_{o2}}{\partial y_{h1}} = \frac{\partial Er y_{o2}}{\partial ws_4} \cdot w_{41} = \frac{\partial Er y_{o2}}{\partial y_{o2}} \cdot \frac{\partial y_{o2}}{\partial ws_4} $$
이므로
$$ \frac{\partial Er y_{o2}}{\partial y_{h1}} = (y_{o2}-y_{t2}) \cdot (1-y_{o2}) \cdot w_41 = \delta y_{o1} \cdot w_{41} $$
이 되죠.
마지막으로 식을 완성하면
$$ \frac{\partial Er y_{out}}{\partial w_{11}} = \frac{\partial Er y_{out}}{\partial y_{h1}} \cdot \frac{\partial y_{h1}}{\partial ws_1} \cdot \frac{\partial ws_1}{\partial w_{11}} = (\delta y_{o1} \cdot w_{31} + \delta y_{o2} \cdot w_41)y_h1(1-y_{h1}) \cdot x_1 $$
입니다.
8. 델타식
출력층과 은닉층의 업데이트를 위해서 도출된 식을 비교해보겠습니다.
* 출력층 오차 업데이트 = $(y_{o1}-y_{t1}) \cdot y_{o1}(1-y_{o1}) \cdot y_{h1} $
* 은닉층 오차 업데이트 = $(\delta y_{o1} \cdot w_{31} + \delta y_{o2} \cdot w_{41}) y_{h1}(1-y_{h1}) \cdot x_1
뒤의 $y_{h1} $ 와 $x_1$을 제외한 앞의 식은 형태가 비슷하다는 것을 볼 수 있습니다. 모두 오차를 나타내기 때문에
오차 $\cdot out(1-out) $' , 즉 델타식의 형태로 단순화할 수 있습니다.
델타식은 한 층을 거슬러 올라갈 때마다 같은 형태가 계속 나타나기 때문에 중요합니다. 따라서 델타식을 파악안 후 코딩으로 설계하는 것이 어렵지 않다고 합니다. 은닉층의 델타식을 $\delta h $라 하면
$$ w_{11}(t+1) = w_{11}t - \delta h \cdot x_1 $$
로 표현됩니다.
이렇게 오차역전법에서 모든 출력층과 은닉층의 가중치가 각각 업데이트되는 과정을 수식으로 살펴보았습니다.
깊게 수식을 보면서 어렵긴 했는데 자세히 알 수 있어서 좋았습니다.
참고: [모두의 딥러닝]