본문 바로가기
Artificial Intelligence/Deep Leaning

Backpropagation Through Time(BPTT): 역전파 알고리즘

by YUNZEE 2024. 3. 25.
728x90
Recall: Backpropagation in Feed Forward Models

역전파 알고리즘을 사용하여 RNN을 학습하는 방법을 설명하고, 텍스트 분류 문제에서의 예시를 설명하겠습니다.

 

RNN학습 과정(복습... :) )

1. 데이터 준비: 시퀀스 데이터를 입력 데이터와 출력 데이터로 준비한다.

2. 모델 정의: RNN모델의 구조와 가중치를 정의한다.

3. 순전파: 입력 데이터는 단어 벡터로 변환되고 RNN을 통과한다.  RNN은 각 단어를 처리하면서 숨겨진 상태를 업데이트한다. 예) "나는 피자를 좋아한다."

4. 출력 계층: 텍스트 분류 문제의 경우 출력 계층은 입력 문장이 특정 클래스에 속할 확률을 계산한다. 예) "음식" 카테고리에 속할 확률

5. 오류 계산: 네트워크의 예측값과 실제 값 간의 차이를 오류로 계산한다. 예) 실제 클래스는 "음식"이고 네트워크가 "여행" 클래스에 높은 확률을 부여하는 경우

6. 역전파: 오류 신호를  RNN을 거꾸로 전파하여 각 단계에서의 가중치 업데이트를 계산한다. 이 과정은 RNN은 미래의 단어를 예측하는 데 필요한 장기적인 의존성을 학습한다.

7. 가중치 업데이트: 계산된 업데이트 값을 사용하여 RNN의 가중치를 조정한다.

8. 3~7의 단계 반복: 반복하여 모델을 학습한다.

 

1. 손실에 대한 각 피라미터의 기울기 계산

손실(loss):뉴럴 네트워크의 예측과 실제 값 간의 차이를 나타내는 지표이다. 낮은 손실 값은 네트워크가 정확한 예측을 수행하고 있다는 것을 의미한다.

기울기(gradient): 손실 값이 파라미터 값의 변화에 따라 어떻게 변하는지를 나타내는 값이다. 기울기는 벡터이며, 각 성분은 특정 파라미터에 대한 손실의 민감도를 나타낸다.

 

2. 손실 최소화를 위한 파라미터 조정

- 계산된 기울기값을 사용하여 네트워크의 파라미터를 업데이트한다. 일반적으로 기울기값의 반대 방향으로 작은 값만큼 파라미터를 조정한다. 

- 이 과정을 통해 손실 값을 줄이려고 한다. 즉, 네트워크의 예측값과 실제 값의 차이를 줄인다.

 

*간단히 말해서*

역전파 알고리즘은 마치 가파른 언덕을 올라가는 것과 같다. 우리는 정상(손실이 최소화된 지점)에 도달하기 위해 기울기가 가장 낮은 경로를 찾아야 한다. 기울기 계산은 우리가 어느 방향으로 가야 하는지 알려주고, 기울기값을 이용한 피라미터 조정은 실제로 한 걸음 내딛는 과정이다. 이 과정을 반복하면서 점차 손실 값을 줄이고 네트워크의 성능을 향상시킬 수 있다.

RNNs: Backpropagation Through Time

 RNN을 위한 역전파 알고리즘(Backpropagation Through Time)에 실행 모습이다.

 

역전파 알고리즘(Backpropagation Through Time): BPTT

역전파 알고리즘은 순환 신경망을 학습하는 데 사용되는 알고리즘이다.  RNN은 시퀸스 데이터를 처리하는 데 특화된 신경망 모델이다.

 

역전파 알고리즘은 두 단계로 구성된다.

1. 순전파(Forward Propagation): 입력 데이터를 신경망에 입력하고 출력값을 계산한다.

2. 역전파(Backpropagation): 출력 값과 실제 값의 차이(오류)를 계산하고 이 오류를 역방향으로 전파하여 각 가중치의 기울기를 계산한다.

 

BPTT의 특징

일반적인 역전파 알고리즘과 달리 BPTT는 시퀸스 데이터를 처리하기 위해 시간 순서를 고려하여 오류를 역전 파한다.

BPTT는 RNN의 가중치를 업데이트하여 오류를 줄이는 데 사용된다.

 

BPTT의 장단점

장점: RNN학습을 가능하게 함으로써 시퀀스 데이터 처리에 대한 강력한 모델을 제공한다. 또한 다양한 시퀸스 데이터 문제에 적용될 수 있다.

단점: 계산량이 많아 대규모 시퀸스 데이터 학습에 어려움을 겪을 수 있다. 그리고 장기 의존성 문제에 취약할 수 있다.

Standard RNN Gradient Flow: Vanishing Gradients

표준 RNN 기울기 흐름

표준 RNN 기울기 흐름은 RNN학습 과정에서 기울기가 역전 파 되는 방식을 의미한다. RNN은 텍스트나 시계열 데이터와 같은 순차 데이터 처리에 능숙한 신경망 유형이다.

 

사라지는 기울기는 RNN 학습 과정에서 발생할 수 있는 문제이다. 이는 역전파 과정에서 가중치 행렬의 반복적인 곱셈으로 인해 발생한다. 가중치 행렬이 작으면 역전파 과정에서 기울기가 극도로 작아질 수 있다. 이는 RNN이 데이터의 장기적인 의존성을 학습하는 것을 어렵게 만들 수 있다.

 

사라지는 기울기 완화 방법

활성화 함수: ReLU와 같은 사라지는 기울기에 덜 취약한 활성화 함수를 선택한다.

가중치 초기화: Xavier초기화 또는 He 초기화와 같은 사라지는 기울기를 방지하는 방식으로 

네트워크 아키텍처: LSTM(Long Short-Term Memory) 네트워크 또는 GRU와 같이 사라지는 기울기를 해결하도록 특별히 설계된 RNN아키텍처를 사용한다.

The Problem of Long-Term Dependencies

그래서 앞서 설명했 던 "왜 사라지는 그래디언트가 순환 신경망의 진짜 문제가 될 수 있는지"에 대해 좀 더 직관적으로 알려드리고자 한다. 

 

순환 신경망(RNN)에서 사라지는 기울기가 문제가 되는 이유는 장기 의존성 때문이다. RNN은 순차데이터의 의존성을 모델링하도록 설계되었지만, 사라지는 기울기 RNN이 먼 거리에 있는 요소 간의 의존성, 즉 장기 의존성을 학습하는 것을 어렵게 만든다.

 

예시가 있는 이미지 설명을 하자면, 

사라지는 기울기가 문제가 되는 이유는 그림 오른쪽 부분에서 "The clouds are in the ___"라는 예문으로 문제를 설명하자면, 생략 부호는 누락된 단어를 나타낸다. 다음 단어를 예측하기 위해, RNN은 문장 앞부분의 " clouds "에 대한 정보를 기억해야 한다. 이것이 장기 의존성이다. 하지만 사라지는 기울기는 RNN이 다음 단어를 예측할 때 "clouds"의 영향을 정확하게 고려하는 데 필요한 가중치를 학습하는 것을 어렵게 만들 수 있다.

 

더 먼 과거의 시간 단계는 더 작고 작은 기울기를 가진다. 이것은 사라지는 기울기의 핵심 문제를 말한다. RNN이 더 먼 과거 정보를 처리할수록 기울기는 점점 작아진다. 이는 RNN이 과거 요소가 현재 예측에 미치는 영향을 가중하는 방법을 학습하는 것을 더 어렵게 만든다.

 

단기 의존성을 포착하기 위한 편향 매개변수는 이 섹션은 잠재적인 해결책을 제시한다. (물론, 일반적으로 사라지는 기울기에 사용되지는 않는다.) RNN에 단기 의존성을 더 효과적으로 학습하도록 돕는 편향 매개변수를 추가하는 것을 말한다. 그러나 이것이 반드시 사라지는 기울기로 인해 RNN이 장기 의존성에 어려움을 겪는 핵심 문제를 해결하지는 못할 것이다.

 

vanishing gradient 문제 완화 방법

RNN을 학습할 때 발생하는 Vanishing gradient문제를 완화하는 세 가지 방법에 대해 설명하겠습니다.

 

1. 활성화 함수 변경(ReLU 활성화 함수 사용)

첫 번째 방법은 뉴럴 네트워크 계층의 활성화 함수를 vanishing gradient문제를 완화하는 데 효과적인 함수로 변경하는 것이다. ReLU함수는 입력값이 0보다 크면 그대로 넘겨주고(활성화), 0보다 작으면 0을 출력한다.(비활성화) 그리고 ReLU함수를 사용하면 기울기 값이 1보다 작아지지 않기 때문에 vanishing gradient문제를 완화하는 데 도움이 된다.

 

2. 피라미터 초기화(항등 행렬 사용)

두 번째 방법은 네트워크의 가중치를 초기화하는 방법을 조정하는 것이다. 일반적인 초기화 방법에서는 가중치 값이 작은 수로 초기화되기 때문에 학습 과정에서 빨리 0에 수렴할 수 있다. 그래서 이항 텍스트에서는 항등 행렬(identity matrix)을 사용하여 가중치를 초기화하는 방법을 제안한다. 항등 행렬을 사용하면 초기 가중치 값이 1이 되어 학습 과정에서 가중치 업데이트가 너무 빨리 0으로 수렴하는 것을 방지한다.

 

*3. LSTM(Long Short -Term Memory) 네트워크 사용

세 번째 방법은 LSTM네트워크를 사용하는 것이다. LSTM은 기존 RNN보다 장기 의존성(long-term) 문제를 더 효과적으로 다루도록 설계된 RNN아키텍처이다. LSTM은 게이트(gating) 메커니즘을 사용하여 정보 흐름을 제어한다. 중요한 정보는 유지되고 중요하지 않은 정보는 필터링됨으로써 장기적인 의존성을 더 효과적으로 추적할 수 있다. 

 

LSTM 네트워크의 핵심: 게이트를 통한 정보 흐름 제어

일반 RNN은 학습 과정에서 오랜 과거의 정보를 기억하기 어려운 Vanishing gradient 문제를 가지고 있다. LSTM 네트워크는 이러한 문제를 해결하기 위해 게이트(gate)라는 메커니즘을 사용한다. 게이트는 정보 흐름을 제어하는 역할을 수행한다. 중요한 정보는 유지되고, 중요하지 않은 정보는 필터링된다.

 

LSTM네트워크의 작동 방식

1. 셀 상태(Cell State): LSTM은 표준 RNN과 마찬가지로 셀 상태를 유지한다. 셀 상태는 직접 출력되는 값과는 독립적이며 네트워크를 통해 정보를 저장하는 데 사용된다.

2. 게이트를 통한 셀 상태 업데이트: LSTM은 망각 게이트(forget gate), 입력 게이트(input gate), 출력 게이트(output gate)등 세 가지 게이트를 사용하여 셀 상태를 업데이트한다.

- 망각 게이트: 과거 정보를 유지할지 여부를 결정한다.

- 입력 게이트: 새로운 정보를 셀 상태에 저장할지 여부를 결정한다.

- 출력 게이트: 셀 상태의 어떤 정보를 출력으로 사용할지 결정한다.

3. 출력 생성: 업데이트된 셀 상태를 기반으로 출력을 생성한다.

 

LSTM네트워크의 장점

- 게이트를 통한 정보 흐름 제어를 통해 장기 의존성 문제를 완화한다.

- 일반 RNN에 비해 훨씬 더 긴 시퀀스 데이터를 학습할 수 있다.

728x90