Deep Learning

[NLP] 역전파 (Backpropagation)의 개념을 알아보자

seoraroong 2024. 10. 28. 17:32

역전파 (Backpropagation)은 딥러닝에서 신경망 모델 (Neural Network Model)의 가중치를 학습하는 중요한 알고리즘이다.

역전파는 오차를 최소화하기 위해 가중치를 조정하는 방법으로, 손실함수의 기울기를 계산하고 가중치를 업데이트하는 과정을 말한다. 


역전파의 기본 개념

역전파 (Backpropagation)는 오차 역전파 알고리즘이라고도한다. 

순방향 (Forward Propagation)으로 계산된 출력과 실제 정답 간의 차이를 기반으로 가중치(weight)와 편향(bias)를 업데이트 하며 cost function을 최소화하는 것이 목적이다.

이 과정에서 Chain Rule 개념을 사용해 신경망의 각 parameter가 결과에 미치는 영향을 계산하게 된다.

 

가중치나 편향 값을 편미분, 즉 아주 작게 변화시키면 출력 쪽에서 생기는 변화 역시 매우 작은 변화가 생긴다. 이때, 작은 구간만을 보았을 때는 선형적인 관계가 있음을 알 수 있다.

이 말인 즉슨, 작은 변화의 관점에서는 선형적 관계이기 때문에 출력에서 생긴 오차를 입력 쪽으로 전파시키며 가중치와 편향을 갱신하면 된다.

역방향, 순차적으로 cost function에 대한 편미분을 구하고, 얻은 편미분 값을 이용해 가중치와 편향을 업데이트하면 된다.


순방향 전달 (Forward Propagation)

역전파는 2개의 단계를 거친다.

우선 feed forward 과정을 거치며 입력이 최종 출력까지 전달되고, 최종 출력단에서 loss와 cost function을 계산한다.

이후 backpropagation 단계에서는 최종단에서 구한 기대 출력 값과 실제 출력 값의 차이, 즉 loss를 반대 방향으로 전파시키며 가중치와 편향을 업데이트한다.

 

feed forward 과정이 순방향 전달을 의미한다. 

순방향 전달은 입력 데이터를 신경망에 넣어 출력을 계산하는 과정이며 다음과 같은 과정을 거치게 된다.

입력값 (x) -> 가중치 (w) -> 활성화함수 -> 출력 (y')

 

 

손실 함수 (Loss function)는 출력값 y'와 실제값 y의 차이를 수치적으로 계산하는 함수로, 주로 MSE (Mean Squared Error)와 교차 엔트로피 (Cross Entropy)를 사용한다.


역전파 (Backpropagation)

순방향 전달 이후 역전파 과정이 진행된다.

역전파는 출력에서부터 입력 방향으로 오차를 전파하며 가중치와 편향을 업데이트 해 손실을 최소화하는 과정이다.

 

- Chain Rule

Chain Rule은 복합 함수의 미분을 구하는 방법으로, 신경망에서 손실함수 L이 각 가중치에 어떻게 영향을 미치는지 계산하는 데 사용된다.

 

간단한 신경망을 예로 들어보자면,

 

입력 x -> 은닉층 h -> 출력 y'

 

출력 y'

 

손실 함수 L을 최소화하기 위해 W1과 W2에 대한 기울기를 구해야한다.

-  L/∂y 는 출력과 손실의 관계, y′/ ∂W2 는 출력과 가중치의 관계를 나타낸다.

 

- 기울기 계산

각 층의 가중치에 대해 기울기를 계산한다. 이를 통해 각 가중치가 손실 함수에 얼마나 기여하는지 알아내고 이를 바탕으로 가중치를 업데이트 한다.

출력층에서의 기울기 계산
은닉층에서의 기울기 계산

은닉층의 기울기는 출력층의 기울기를 기반으로 Chain Rule을 적용하며 계산된다. 

 

- 가중치 업데이트

기울기 계산 이후 경사하강법을 이용해 가중치를 업데이트한다.

경사하강법은 기울기를 사용해 손실을 줄이는 방향으로 가중치를 조금씩 업데이트 하는 방법이다. 

이때 학습률(learning rate)가 가중치 업데이트 크기를 결정한다. 

가중치 업데이트 식

η은 학습률, ∂L/ W​는 가중치에 대한 기울기이다. 학습률이 너무 크면 모델이 최적값에 수렴하지 못하고, 너무 작으면 학습 속도가 느려진다는 문제가 있다. 

 

- Big learning rate: 가중치가 크게 조정되어 손실 함수의 최솟값을 찾기 전에 over-shooting 할 수 있다.

- Small learning rate: 가중치가 조금씩 변경되어 학습 속도가 매우 느려진다. 

                                   시간이 많이 걸리거나 지역 최솟값(local minimum)에 빠져 최적해를 찾지 못할 수 있다. 


역전파의 단점

1. 수렴에 실패하거나 Local Minimum에 빠질 수 있다

경사하강법을 기반으로 하는 역전파 알고리즘은 전역 최적값 (Global Minimum)을 찾는 것이 목표이다. 실제 학습 과정에서 최적 값을 찾지 못하고 지역 최솟값 (Local Minimum)에 빠지거나 수렴하지 못하는 문제가 발생할 수 있다.

 

* 지역 최솟값이란?

함수의 특정 구간에서는 가장 작은 값이지만 전체 함수의 최솟값이 아닌 것을 말한다. 경사 하강법은 기울기가 감소하는 방향으로 가중치를 조정하기에, 지역 최솟값에 빠지게 되면 더 이상 기울기가 감소하지 않아 학습이 중단될 수 있다.

 

* 해결 방법

모멘텀(Momentum), Adam 과 같은 최적화 알고리즘 사용

랜덤 초기화나 SGD 기법을 사용해 전역 최솟값에 더 가까운 값을 찾도록 함

 

2. Nonlocality, Synchrony, Long Training Time 등 생물학적 신경망과 차이가 있다

- Nonlocality(비국소성)

인공 신경망에서 가중치 업데이트가 일어날 때, 입력 노드에서 출력 노드까지 멀리 떨어진 가중치들에도 영향을 미친다는 것을 의미한다. 

생물학적 신경망에서는 국소적으로 인접한 뉴런들이 상호작용 하는 반면, 인공 신경망에서는 역전파가 모든 가중치에 동시에 영향을 미친다.

 

- Synchrony(동시성)

인공 신경망은 모든 층에서 동시에 학습이 이루어지며 계산도 병렬적으로 이루어질 수 있다. 그러나 생물학적 신경망에서는 뉴런들이 독립적으로 작동하고 학습 속도 또한 다를 수 있다. 인공 신경망의 동시성은 학습이 전체적으로 통제되지만, 생물학적 신경망은 보다 비동기적이고 분산된 방식으로 학습이 이루어진다는 차이가 있다. 

 

- Long Training Time (긴 학습 시간)

인공 신경망의 역전파 알고리즘은 학습에 많은 시간이 소요된다. 이에 비해 생물학적 신경망은 학습 과정이 상대적으로 빠르며 적은 에너지를 사용해 학습할 수 있다.

 

* 해결 방법

생물학적 신경망의 동작 방식과 가깝게 만들기 위해 스파이킹 뉴런 모델 (Spoking Neural Networks, SNN) 같은 연구들이 진행되고 있다.

 

3. 초기값에 따라 진동하거나 Chaotic Wandering이 발생할 수 있다

신경망 학습에서 초기값 설정은 매우 중요한 과정이다. 초기 가중치가 잘못 설정되면, 역전파 과정에서 모델이 진동하거나 혼란스러운 상태(Chaotic Wandering)에 빠질 수 있다.

 

* 진동 (Oscillation)

학습 중 가중치가 수렴하지 않고 앞뒤로 계속해서 흔들리며 최적의 값으로 접근하지 못하는 현상이다. 주로 학습률이 너무 클 때 발생하며, 기울기 값이 지나치게 큰 변동을 일으켜 가중치가 수렴하지 않고 계속해서 진동하게 된다.

 

* 혼란스러운 상태 (Chaotic Wandering)

초기 가중치 설정이 불안정할 때 발생한다. 학습 과정에서 가중치들이 불규칙하게 움직이고 최적화가 이루어지지 않으며 모델이 혼란스러운 경로를 따르게 된다. 초기 가중치가 너무 크거나 너무 작을 경우에 이런 현상이 발생할 수 있다.

 

* 해결 방법

Xavier 초기화 또는 He 초기화와 같은 가중치 초기화 방법을 사용한다.

 

4. Gradient Vanishing, Gradient Explosion 문제가 발생한다

* 기울기 소실 (Gradient Vanishing)

역전파 과정에서 층이 깊어질 수록 기울기가 점점 작아져서 0에 가까워지는 현상이다.

기울기 소실이 야기하는 문제의 예로, 시퀀스 데이터에서 초기 시점의 정보가 뒤쪽 시점에 제대로 전달되지 않아 모델이 긴 시퀀스에 대한 학습이 어려워지게 된다.

 

* 기울기 폭발 (Gradient Explosion)

기울기가 지수적으로 커져 가중치가 매우 큰 값으로 업데이트 되며 학습 과정이 불안정해지는 현상이다.

 

* 해결 방법

기울기 소실 문제를 해결하기 위해 활성화 함수로 ReLU를 사용한다.

LSTM, GRU와 같은 순환 신경망을 사용한다.

기울기 클리핑 (Gradient Clipping) 기법을 사용해 기울기 폭발 문제를 방지한다.