프로그래밍/인공지능

오차역전파 계산법 -2

austag 2023. 8. 11. 20:05

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 $$

로 표현됩니다.

 


이렇게 오차역전법에서 모든 출력층과 은닉층의 가중치가 각각 업데이트되는 과정을 수식으로 살펴보았습니다.

깊게 수식을 보면서 어렵긴 했는데 자세히 알 수 있어서 좋았습니다.

 

참고: [모두의 딥러닝]