본문 바로가기
프로그래밍/인공지능

오차 역전파의 계산법 -1

by austag 2023. 8. 11.

 

 

앞 글에서 오차 역전파에 대해 간단히 알아보았었습니다. 이번에는 오차 역전파를 계산하는 방법을 더 자세히 공부해 보도록 하겠습니다. 한 번에 담으면 글이 너무 길어지니 끊어서 가보도록 하겠습니다.

https://austag.tistory.com/18

 

오차 역전파와 활성화 함수

이번글에서는 은닉층에 대해 좀 더 알아보려합니다. 이전 글들에 은닉층을 넣어서 딥러닝 모델을 만들고 그 은닉층안에서는 가중치가 부여되고 수정되는 과정, 즉, 가중치의 업데이트가 일어나

austag.tistory.com


1. 출력층의 오차 업데이트

딥러닝 안에서 오차 역전파는 이러한 과정이 일어납니다. 각 노드 네부에서는 입력값을 이용해 가중합을 만드는 단계와 이 가중합을 활성화 함수를 적용해 출력하는 단계로 구분됩니다.

 

오차 역전파는 $Y_{out}$ 값에서 거꾸로 거슬러 올라가며 가중치 $W^{(2)}$와 $W^{(1)}$이 더이상 업데이트되지 않을 때까지 반복해 계산하는 것입니다.

 

$w_{31}$의 업데이트 예를 들어보겠습니다.

$$ w_{31}(t+1) = w_{31}t - \frac{\partial Er Y_{out}}{\partial w_{31}} $$

(Er : 오차)

이 식에서의 $t$, $t+1$은 각각 한 단계 앞, 현재 단계의 계산을 의미합니다. $ w_{31}t $은 이미 앞에서 구해진 값으로 실제로 구해야 하는 값은 $ \frac{\partial오차Y_{out}}{\partial w_{31}} $ 입니다.

 

2. 오차 공식

그림을 보면 오차 $Y_{out}$에 $y_{o1}$,$y_{o2}$이 있습니다. $Y_{out} = y_{o1} + y_{o2}$ 인 것이죠.

$y_{o1}$,$y_{o2}$는 평균 제곱 오차로 구해주어야 합니다.

$$ y_{o1} = \frac{1}{2}(y_{t1}-y_{o1})^2 $$

$$ y_{o2} = \frac{1}{2}(y_{t2}-y_{o2})^2 $$

$Y_target$ 안의 $y_{t1}$, $y_{t2}$에서의 t는 target으로 목표를 의미합니다. 이것들은 실제값이고 데이터를 통해 알 수 있는 상수입니다. 

맨 위의 식에 넣어보면

$$ Er Y_{out} = \frac{1}{2}(y_{t1}-y_{o1})^2 + \frac{1}{2}(y_{t2}-y_{o2})^2 $$

로 구해지는 것을 알 수 있습니다.

 

3. 체인 룰

이 값을 $w_{31}$로 편미분해야 합니다. 이는 체인룰에 의해 계산됩니다.

체인 룰(연쇄 법칙)은 합성 함수를 미분할 때의 계산 공식입니다.

$$ {f(g(x))}^{'} = f^{'}(g(x))g^{'}(x) $$

이 함수의 미분은

$$ \frac{df}{dx} = \frac{df}{dg} \cdot \frac{dg}{dx} $$

이렇게 표현됩니다.

 

구해야 하는

$$ Er Y_{out} = \frac{1}{2}(y_{t1}-y_{o1})^2 + \frac{1}{2}(y_{t2}-y_{o2})^2 $$

$$ \frac {\partial Er Y_{out}}{\partial w_{31}} = \frac {\partial Er Y_{out}}{\partial y_{o1}} \cdot \frac {\partial y_{o1}}{\partial ws_{3}} \cdot \frac {\partial ws_{3}}{\partial w_{31}} $$

( ws : 가중합,  Er : 오차)

$$ \frac{df}{dx} = \frac{df}{dg} \cdot \frac{dg}{dh} \cdot \frac{dh}{dx} $$

이 됩니다.

 

4. 체인 룰 계산

$$ \frac {\partial Er Y_{out}}{\partial w_{31}} = \frac {\partial Er Y_{out}}{\partial y_{o1}} \cdot\frac {\partial y_{o1}}{\partial ws_{3}} \cdot \frac {\partial ws_{3}}{\partial w_{31}} $$

식의 의미를 알아보면서 계산해 보겠습니다.

 

- $ \frac {\partial Er Y_{out}}{\partial y_{o1}} $

$ Er Y_{out} = \frac{1}{2}(y_{t1}-y_{o1})^2 + \frac{1}{2}(y_{t2}-y_{o2})^2 $ 이었으니 $y_{o1}에 대해 편미분하면

$ \frac {\partial Er Y_{out}}{\partial y_{o1}} = y_{o1} - y_{t1} $

입니다.

 

- $\frac {\partial y_{o1}}{\partial ws_{3}}$

$y_{o1}$은 $ws_3$이 $(activation function)_3$ 을 통해 나오는 값입니다. $y_{o1}$을 $ws_3$에 대해 미분하는 것은 $(activation function)_3$을 미분하라는 것입니다.

여기서는 시그모이드 함수를 사용했으므로 이 함수를 미분하겠습니다.

$\sigma(x) = \frac{1}{1+e^{-x}}$ 이라 하면

$$ \frac{d\sigma(x)}{dx} = \sigma(x) \cdot (1-\sigma(x)) $$

이 나옵니다. $(activation function)_3$의 값은$ y_{o1}$ 으로 정리하면

$$\frac {\partial y_{o1}}{\partial ws_{3}} = y_{o1} \cdot (1-y_{o1})$$

입니다.

 

- $ \frac {\partial ws_{3}}{\partial w_{31}} $

$ ws_3 = w_{31}y_{h1} + w_{31}y_{h2} + 1(bias) $ 로 나옵니다. 여기서 bias를 1로 설정해 두었는데, 그 이유는 바이어스는 그래프를 좌표에서 좌우로 움직이는 역할을 하는데, 시그모이드 함수가 가장 안정된 예측을 하는 바이어스 값이 1이기 때문입니다. 따라서 정리하면 다음과 같습니다.

$$ \frac{\partial ws_3}{\partial w_{31}} = y_{h1} $$

 

위에서 구한 식들로 정리를 해보면 

$$ \frac{ \partial Er Y_{out} }{\partial w_{31}} = \frac{\partial Er Y_{out}}{\partial y_{o1}} \cdot \frac{\partial y_{o1}}{\partial ws_3} \cdot \frac{ \partial ws_3 }{\partial w_{31}}= (y_{o1} - y_{t1}) \cdot y_{o1}(1-y_{o1}) \cdot y_{o1} $$

이렇게 되는 것이죠.

 

5. 가중치 수정

앞서 구한 값을 $w_{31}$에서 빼면 새로운 $w_{31}$ 값을 구할 수 있습니다. 가중치를 업데이트하는 방법은

$$ w_{31}(t+1) = w_{31}t - (y_{o1}-y_{t1}) \cdot y_{o1}(1-y_{o1}) \cdot y_{h1} $$

입니다.

$(y_{o1}-y_{t1}) \cdot y_{o1}(1-y_{o1})$의 형태는 반복해서 나타나는데 이처럼 한 번 식을 구해 놓으면 이후는 그대로 사용해서 오차를 구하는 것이 델타(delta)식 이라고 합니다. 델타식을 $\delta y$라 하면

$$ w_{31}(t+1) = w_{31}t - \delta y \cdot y_{h1} $$

이 됩니다.

'프로그래밍 > 인공지능' 카테고리의 다른 글

k - 최근접 이웃 회귀  (1) 2024.02.01
오차역전파 계산법 -2  (0) 2023.08.11
전이 학습 - 2  (0) 2023.08.06
전이 학습(transfer learning) - 1  (0) 2023.08.05
오토인코더(Auto-Encoder)  (0) 2023.08.04