순전파와 역전파

현주·2024년 12월 10일
0
post-thumbnail

딥러닝 모델 학습과 가중치 업데이트 과정

딥러닝 모델은 입력값을 받아 순전파를 통해 예측값을 계산하고 예측값과 실제값의 차이를 손실 함수를 통해 구한다. 그 후 이 손실을 기반으로 역전파를 통해 각 가중치가 얼마나 잘못되었는지를 계산하여 가중치를 수정한다. 이 글에서는 순전파(Forward Propagation)와 역전파(Back Propagation)의 과정을 알아본다.


1. 순전파(Forward Propagation)

1.1 순전파란?

딥러닝의 순전파는 입력층에서 출력층까지의 계산을 순차적으로 수행하며 중간 연산 결과를 저장하는 과정을 말한다. 이 과정에서 각 층의 가중치(WW)와 편향(bb)으로 연산을 진행한다. 이 글에서는 편향(bb)를 고려하지 않고 계산한다.

1.2 예제 네트워크 구조

직접 계산해보기 편하게 아주 간단하게 구성했다.

1.3 순전파 계산 과정

활성화 함수는 시그모이드 함수를 사용한다. 활성화 함수 공부글 보러가기
z1=w1x1=0.3×0.1z_1 = w_1 \cdot x_1 = 0.3 \times 0.1
h1=Sigmoid(z1)h_1 = \operatorname{Sigmoid}\, (z_1)
z2=w2h1=0.45×0.57=0.25z_2 = w_2 \cdot h_1 = 0.45 \times 0.57 = 0.25
o1=Sigmoid(z2)=0.56o_1 = \operatorname{Sigmoid}\, (z_2)= 0.56
E=MSE=(yo1)2=(0.40.56)2=0.0256E = MSE = (y - o_1)^2 = (0.4-0.56)^2 = 0.0256
yy = 실제값


2. 역전파(Back Propagation)

2.1 역전파란?

역전파는 순전파의 과정을 역행한다. 순전파에서 계산된 오차(loss)를 기반으로 손실 함수의 기울기(gradient)를 계산하여 손실 함수의 값이 최소화되도록 가중치를 업데이트하는 역할을 한다.

2.2 역전파 계산과정

2.3 w2w_2 가중치 업데이트

경사하강법 (w2=w2lrEw2w_2 = w_2-lr\cdot\frac{\partial E}{\partial w_2}) 을 사용하려면 Ew2\frac{\partial E}{\partial w_2} 값을 알아야한다.
Ew2\frac{\partial E}{\partial w_2}는 체인 룰(미분의 연쇄 법칙)에 따라 다음과 같이 풀어쓸 수 있다. 이제 각 항의 값을 계산하여 곱한다.

Ew2=Eo1o1z2z2w2\frac{\partial E}{\partial w_2} = \frac{\partial E}{\partial o_1} \cdot \frac{\partial o_1}{\partial z_2} \cdot \frac{\partial z_2}{\partial w_2}

Eo1=2(yo1)21×1+0=2×0.16=0.32\frac{\partial E}{\partial o_1} = 2(y-o_1)^{2-1}\times-1+0 = 2\times-0.16=-0.32

o1o_1는 시그모이드 함수의 출력값이다. 시그모이드 함수의 미분은 f(x)=f(x)(1f(x))f(x)=f(x)\cdot(1-f(x))이다.

o1z2=o1(1o1)=0.56×0.44=0.24\frac{\partial o_1}{\partial z_2} = o_1\cdot(1-o_1)=0.56\times0.44=0.24

z2w2=h1=0.57\frac{\partial z_2}{\partial w_2} = h_1 =0.57

Ew2=0.32×0.24×0.57=0.043776\frac{\partial E}{\partial w_2} = -0.32\times0.24\times0.57=-0.043776

이제 경사하강법을 통해 가중치 w2w_2를 업데이트 할 수 있다.

w2=w2lrEw2=0.450.5×0.043776=0.471888w_2 = w_2 -lr\cdot\frac{\partial E}{\partial w_2} = 0.45- 0.5\times-0.043776 = 0.471888

2.4 w1w_1 가중치 업데이트

w1w_1역시 경사하강법 (w1=w1lrEw1w_1 = w_1-lr\cdot\frac{\partial E}{\partial w_1}) 을 사용하려면 Ew1\frac{\partial E}{\partial w_1} 값을 알아야한다.
Ew1\frac{\partial E}{\partial w_1}는 체인 룰(미분의 연쇄 법칙)에 따라 다음과 같이 풀어쓸 수 있다.

Ew1=Eh1h1z1z1w1\frac{\partial E}{\partial w_1} = \frac{\partial E}{\partial h_1} \cdot \frac{\partial h_1}{\partial z_1} \cdot \frac{\partial z_1}{\partial w_1}

이제 다시 각 항의 값을 계산한다.

Eh1\frac{\partial E}{\partial h_1}는 체인 룰에 따라 다음과 같이 풀어쓸 수 있다.

Eh1=Ez2z2h1\frac{\partial E}{\partial h_1} = \frac{\partial E}{\partial z_2} \cdot \frac{\partial z_2}{\partial h_1}

Ez2\frac{\partial E}{\partial z_2}는 체인 룰에 따라 다시 다음과 같이 풀어쓸 수 있다.

Ez2=Eo1o1z2\frac{\partial E}{\partial z_2} = \frac{\partial E}{\partial o_1}\cdot\frac{\partial o_1}{\partial z_2}

결론적으로 Eh1\frac{\partial E}{\partial h_1}는 다음과 같다.

Ez2=Eo1o1z2z2h1\frac{\partial E}{\partial z_2} = \frac{\partial E}{\partial o_1}\cdot\frac{\partial o_1}{\partial z_2}\cdot\frac{\partial z_2}{\partial h_1}

이때 z2h1\frac{\partial z_2}{\partial h_1}w2w_2이다. 마지막으로 계산해보면 다음과 같다.

Ez2=0.32×0.24×0.42=0.03456\frac{\partial E}{\partial z_2} = -0.32\times0.24\times0.42=-0.03456

다음으로 h1z1\frac{\partial h_1}{\partial z_1}의 값을 계산한다.

h1z1=h1(1h1)=0.57×0.43=0.2451\frac{\partial h_1}{\partial z_1} = h_1\cdot(1-h_1)=0.57\times0.43=0.2451

z1w1\frac{\partial z_1}{\partial w_1}x1x_1이다.

z1w1=0.1\frac{\partial z_1}{\partial w_1} = 0.1

Ew1=0.3456×0.2451×0.1=0.008470656\frac{\partial E}{\partial w_1} = -0.3456\times0.2451\times0.1=-0.008470656

이제 경사하강법을 통해 가중치 w1w_1을 업데이트 할 수 있다.

w1=w1lrEw1=0.30.5×0.008470656=0.3004235w_1 = w_1 -lr\cdot\frac{\partial E}{\partial w_1} = 0.3 - 0.5\times-0.008470656 = 0.3004235

3. 결과 확인

3.1 업데이트 된 가중치 확인

업데이트 한 가중치를 적용하여 계산해서 오차(loss)가 줄었는지 확인한다.
w1w_1 : 0.3 👉 0.304235328
w2w_2 : 0.45 👉 0.471888

3.2 순전파 다시 진행

z1=w1x1=0.304235328×0.1=0.0304235328z_1 = w_1 \cdot x_1 = 0.304235328 \times 0.1=0.0304235328
h1=Sigmoid(z1)=0.507605h_1 = \operatorname{Sigmoid}\, (z_1)=0.507605
z2=w2h1=0.471888×0.507605=0.23953270824z_2 = w_2 \cdot h_1 = 0.471888 \times 0.507605 = 0.23953270824
o1=Sigmoid(z2)=0.559598o_1 = \operatorname{Sigmoid}\, (z_2)= 0.559598
E=MSE=(yo1)2=(0.40.559598)2=0.025471521604E = MSE = (y - o_1)^2 = (0.4-0.559598)^2 = 0.025471521604
yy = 실제값

3.3 결과

업데이트 전 오차는 0.02560.0256 이었는데 가중치 업데이트 후 오차는 0.02540.0254 이다. 미세하지만 줄은 것을 확인했다.


4. 마무리

이번 글에서는 딥러닝 모델의 학습 과정 순전파와 역전파의 원리를 직접 계산해보며 자세히 알아보았다. 미세한 변화가 반복되면서 결국 모델의 성능은 향상된다. 나도 작은 변화를 통해 더 나은 사람이 되어야겠다.


5. 레퍼런스

profile
공부하는 블로그😎

0개의 댓글