NLP Tutorial (4) - 순전파와 역전파

이로운·2025년 6월 12일

NLP_tutorial

목록 보기
4/8

순전파와 역전파


순전파와 역전파라는 단어는 학습을 공부하다보면 굉장히 많이 언급되는 단어이다. (역설적으로 역전파가 더 많이 들린다) 순전파는 입력이 주어지면 신경망을 따라 입력층부터 출력층까지 차례대로 변수를 계산하고 추론한 결과를 전달한다.

반대로, 역전파는 순전파의 반대 방향으로 연산이 진행되는데, 학습 과정에서의 네트워크 가중치와 편향은 예측된 출력값과 실제 출력값 사이의 오류를 최소화하기 위해 조정된다. 다시 말해, 순전파 과정을 통해 출력된 오차를 활용하여 다시 각 계층으로 들어가 가중치와 편향을 최적화한다.

순전파와 역전파는 모델의 성능을 반복적으로 향상시킬 수 있게하는 매우 중요한 프로세스이다. 오늘은 별도의 코드 실습 없이 순전파와 역전파가 이뤄지고 가중치가 갱신되는 과정을 수식적으로 알아보자.

순전파

첫 번째 레이어의 가중합(Weighted Sum)을 계산해보자. 계산하려는 값을 z1z_1, z2z_2라 하고, 입력값 (xx)과 가중치(WW)의 곱을 모두 더한 값에 편향(bb)를 더할 것이다. 정리하자면,

z1=W1x1+W2x2+b1z_1 = W_1x_1 + W_2x_2 + b_1
z2=W3x1+W4x2+b2z_2 = W_3x_1 + W_4x_2 + b_2

이런 식으로 구성된다고 하자. 그리고 가중치 W1W_1을 0.4352, W2W_2를 0.3545, W3W_3는 0.1951, W4W_4는 0.4835라 하고, b1b_1b2b_2는 각각 -0.1419, -0.0439라 하자. 그러면 가중합은 각각 0.6478, 0.7225 값이 나올 것이다. 이제 활성화 함수를 적용해보자. 예를 들어, 시그모이드 함수라면, 활성화 함수가 적용된 가중합은 다음과 같이 계산될 것이다.

σ1=11+ez1=0.6565\sigma_1 = \frac{1}{1+e^{-z_1}} = 0.6565
σ2=11+ez2=0.6732\sigma_2 = \frac{1}{1+e^{-z_2}} = 0.6732

이렇게 출력될 것이고, 다시 이것을 입력값으로 사용하여 동일한 방식으로 두 번째 계층에 대한 연산이 진행될 것이다. 일단, 두 번째 계층의 가중합과 가중합 활성화 값은 각 -0.3415 / 0.4154라 하고 넘어가자.

오차 계산

손실 함수는 이진 교차 엔트로피라 하자. 실제값(y=0y=0)과 예측값(y^=0.4154\hat{y}=0.4154)으로 오차를 계산해보자.

L=(ylog(y^)+(1y)log(1y^)\mathcal{L} = -(y\log(\hat{y}) + (1-y)\log(1-\hat{y})
=log(0.5846)=0.5368= -\log(0.5846) = 0.5368

이 수식을 파이토치 코드화한다면, loss = criterion(output, x) 이다. 이제 오차를 계산했으니, 역전파로 진행하자.

역전파 계산

역전파에선 레이어를 역으로 순회하며 가중치와 편향을 계산한다. 모델의 학습은 오차가 작아지는 방향으로 진행되어야 해서, 미분값이 0에 가까워져야 하고, 이는 다시 갱신되는 가중치와 편향의 기울기 또한 오차가 0이 되는 방향으로 계산되어야 하며, 결론적으로 계산된 기울기가 변화가 없을 때까지 반복한다. 이를 수식으로 표현하면,

Wn(t+1)=Wn(t)αLWn(t)W_n(t+1) = W_n(t) - \alpha \frac{\partial\mathcal{L}}{\partial W_n(t)}

여기서, tt는 가중치 갱신 회수를 의미하며, α\alpha는 학습률을 의미한다. 이 과정은 LWn(t)\frac{\partial \mathcal{L}}{\partial W_n(t)}가 0에 근사할 때까지 학습을 진행한다.

예를 들어, 앞서 계산한 순전파와 오차 계산을 바탕으로 역전파 과정을 살펴보자. 역순으로 진행하므로, W4W_4의 가중치을 갱신해보자.

W4(2)=W4(1)αLWn(t)=0.4385αLWn(t)W_4(2) = W_4(1) - \alpha\frac{\partial\mathcal{L}}{\partial W_n(t)} = -0.4385 - \alpha\frac{\partial\mathcal{L}}{\partial W_n(t)}

결국 W4(2)W_4(2)를 계산하기 위해서는 오차를 가중치로 편미분한 값을 계산해야 한다. 연쇄 법칙을 기반으로 풀어나가보자.

LW4(1)=Lσ2×σ2z2×z2W4(1)\frac{\partial \mathcal{L}}{\partial W_4(1)} = \frac{\partial \mathcal{L}}{\partial \sigma_2} \times \frac{\partial \sigma_2}{\partial z_2} \times \frac{\partial z_2}{\partial W_4(1)}

이 값들은 순전파 풀이를 통해 식과 값을 알고 있으므로 편미분을 진행하면 갱신된 값을 알 수 있다. 결과를 말하자면, 0.4732로 갱신되고, 편향도 동일한 과정을 거치면 업데이트 된다. 정상적인 상황이라며느 학습이 진행될수록 오차는 점차 감소하게된다.

참고로, 이 예제를 통해 왜 시그모이드 함수를 깊은 모델의 은닉층에선 활용하지 않는 이유도 나타나는데, 지금 학습률을 1이라 가정하고 풀었음에도 변화량이 크지 않음을 알 수 있다. 시그모이드는 0~1 사이로 출력값 범위를 제한하여, 역전파 과정에서 0에 가까운 기울기가 곱해지고 수렴에서 문제가 발생할 수 있다. (+항상 양수여서 가중치 갱신 방향의 편향도 생길 수 있음.) 만일 시그모이드 함수 원형을 그대로 사용한다면, 간단한 이진 분류 문제에서만 사용하는걸 권장한다.

profile
Robotics Engineer / https://www.linkedin.com/in/roun-lee-5503382b6/

0개의 댓글