6-2. RNN 문제점: Vanishing Gradient, Exploding Gradient

1. RNN의 문제점: Vanishing Gradient와 Exploding Gradient

순환 신경망(Recurrent Neural Network, RNN)은 시퀀스 데이터를 처리하는 데 특화된 딥러닝 모델입니다. 자연어 처리, 음성 인식, 시계열 예측 등 다양한 분야에서 활용되지만, RNN은 학습 과정에서 두 가지 심각한 문제점에 직면할 수 있습니다. 바로 Vanishing Gradient(기울기 소실)Exploding Gradient(기울기 폭발)입니다. 이 두 문제는 RNN의 장기 의존성(Long-Term Dependency) 학습 능력을 저해하여 모델의 성능을 크게 떨어뜨립니다.

1) RNN의 기본 구조 복습

RNN은 이전 시점의 hidden state를 현재 시점의 입력과 함께 받아 새로운 hidden state를 생성합니다. 이러한 순환 구조를 통해 시퀀스 데이터의 시간적 관계를 학습할 수 있습니다.

image

위 그림에서 각 t는 시퀀스의 한 시점을 나타냅니다. Xt는 t 시점의 입력, ht는 t 시점의 hidden state, yt는 t 시점의 출력을 의미합니다. W, U는 학습 가능한 가중치 행렬입니다. RNN의 핵심 연산은 다음과 같습니다.

$$ h_t = f(W \cdot h_{t-1} + U \cdot x_t + b) $$

여기서 f는 활성 함수(예: tanh, ReLU)이고, b는 편향(bias)입니다.

2) 기울기 전파와 역전파

RNN은 손실 함수(loss function)를 최소화하기 위해 경사 하강법(gradient descent)을 사용합니다. 경사 하강법은 모델의 파라미터(가중치와 편향)를 업데이트하기 위해 기울기(gradient)를 계산합니다. 이 기울기는 손실 함수를 파라미터에 대해 미분하여 얻어집니다. RNN의 경우, 각 시점의 hidden state는 이전 시점의 hidden state에 의존하므로, 손실 함수의 기울기를 계산하기 위해 시간 역방향으로 기울기를 전파하는 역전파(Backpropagation Through Time, BPTT) 알고리즘을 사용합니다.

3) Vanishing Gradient (기울기 소실)

Vanishing Gradient는 역전파 과정에서 기울기가 기하급수적으로 작아져, 앞선 시점의 hidden state에 대한 기울기가 거의 0에 가까워지는 현상을 말합니다. 이는 모델이 장기 의존성을 제대로 학습하지 못하게 하는 주요 원인입니다. 즉, 먼 과거의 정보가 현재의 예측에 거의 영향을 미치지 못하게 됩니다.

a. 원인

Vanishing Gradient의 주요 원인은 활성 함수의 선택과 가중치의 곱셈입니다.

  • 활성 함수의 문제: 시그모이드(sigmoid)나 하이퍼볼릭 탄젠트(tanh)와 같은 활성 함수는 입력 값이 커지거나 작아질 때 기울기가 0에 가까워지는 경향이 있습니다. 역전파 과정에서 여러 개의 활성 함수를 통과하면서 기울기가 계속 곱해지면, 기울기 값이 0에 수렴하게 됩니다.
  • 가중치 곱셈의 문제: RNN은 각 시점에서 동일한 가중치(W, U)를 사용합니다. 역전파 과정에서 이러한 가중치가 여러 번 곱해지면서 기울기가 증폭되거나 소멸될 수 있습니다. 만약 가중치의 절대값이 1보다 작으면, 기울기는 기하급수적으로 작아져 Vanishing Gradient가 발생합니다.
b. 예시

간단한 예를 통해 Vanishing Gradient 현상을 살펴보겠습니다. 다음과 같은 간단한 RNN을 가정합니다.

$$ h_t = tanh(W \cdot h_{t-1}) $$

여기서 W는 0.5이고, 활성 함수는 tanh입니다. 만약 t=0에서 h_0 = 1이라면, t=10에서 h_10은 매우 작은 값에 수렴하게 됩니다. 이 경우, h_0에 대한 손실 함수의 기울기는 매우 작아져 h_0이 학습에 거의 기여하지 못하게 됩니다.

4) Exploding Gradient (기울기 폭발)

Exploding Gradient는 역전파 과정에서 기울기가 기하급수적으로 커져, 모델의 파라미터가 불안정하게 업데이트되는 현상을 말합니다. 이는 모델의 학습을 불안정하게 만들고, NaN(Not a Number) 값으로 이어져 학습을 중단시킬 수 있습니다.

a. 원인

Exploding Gradient의 주요 원인은 가중치의 곱셈입니다.

  • 가중치 곱셈의 문제: RNN은 각 시점에서 동일한 가중치(W, U)를 사용합니다. 만약 가중치의 절대값이 1보다 크면, 역전파 과정에서 기울기가 기하급수적으로 커져 Exploding Gradient가 발생합니다.
b. 예시

Exploding Gradient는 실제로 발생하면 모델의 학습이 완전히 망가지는 경우가 많으므로, 수치적으로 표현하기 어렵습니다. 하지만 간단한 예시를 통해 그 위험성을 짐작할 수 있습니다. 위와 동일한 RNN 예시에서 W=2라고 가정하면, hidden state 값이 무한대로 발산하게 됩니다.

5) 해결 방법

Vanishing Gradient와 Exploding Gradient를 해결하기 위해 다양한 기술이 개발되었습니다.

a. 기울기 클리핑 (Gradient Clipping)

기울기 클리핑은 Exploding Gradient를 해결하는 가장 기본적인 방법입니다. 역전파 과정에서 계산된 기울기의 크기가 임계값을 초과하면, 기울기를 임계값으로 잘라냅니다. 이렇게 하면 기울기가 너무 커지는 것을 방지하여 학습의 안정성을 높일 수 있습니다.

import torch

# 기울기 클리핑 예시
def gradient_clipping(model, clip_value):
    for param in model.parameters():
        if param.grad is not None:
            torch.nn.utils.clip_grad_norm_(param, clip_value)
b. 활성 함수 변경

Vanishing Gradient 문제를 완화하기 위해 ReLU(Rectified Linear Unit)와 같은 활성 함수를 사용합니다. ReLU는 입력 값이 양수일 때 기울기가 1이므로, 기울기 소실 문제를 어느 정도 해결할 수 있습니다.

c. 가중치 초기화

가중치 초기화는 학습 초기 단계에서 기울기의 크기를 적절하게 유지하는 데 도움을 줍니다. Xavier 초기화, He 초기화와 같은 방법은 가중치의 분산을 적절하게 조정하여 기울기 소실/폭발 문제를 완화할 수 있습니다.

d. LSTM (Long Short-Term Memory) & GRU (Gated Recurrent Unit)

LSTM과 GRU는 RNN의 변형 모델로, Vanishing Gradient 문제를 해결하기 위해 설계되었습니다. 이들은 =게이트(gate)=라는 메커니즘을 사용하여 정보를 선택적으로 기억하고 잊어버립니다. LSTM은 세 개의 게이트(입력 게이트, 망각 게이트, 출력 게이트)를 사용하고, GRU는 두 개의 게이트(업데이트 게이트, 리셋 게이트)를 사용합니다. 이러한 게이트를 통해 장기 의존성을 효과적으로 학습할 수 있습니다.

image

LSTM과 GRU는 RNN보다 복잡한 구조를 가지고 있지만, Vanishing Gradient 문제를 완화하고 장기 의존성 학습 능력을 향상시켰습니다.

e. Residual Connections (잔차 연결)

Residual Connections는 네트워크의 각 레이어에 이전 레이어의 출력을 더하는 방법입니다. 이는 기울기가 네트워크를 통해 더 쉽게 흐르도록 하여 Vanishing Gradient 문제를 완화하는 데 도움이 됩니다. ResNet(Residual Network)과 같은 딥러닝 모델에서 널리 사용됩니다.

f. Batch Normalization (배치 정규화)

배치 정규화는 각 레이어의 입력 값을 정규화하여 학습 속도를 높이고, 기울기 소실/폭발 문제를 완화하는 데 도움을 줍니다. 하지만 RNN에서는 BPTT 과정에서 배치 통계가 불안정해질 수 있어, 일반적으로 사용하기 어렵습니다.

6) 결론

Vanishing Gradient와 Exploding Gradient는 RNN의 학습을 어렵게 만드는 주요 문제입니다. 하지만 기울기 클리핑, 활성 함수 변경, LSTM/GRU과 같은 다양한 기술을 통해 이러한 문제를 해결할 수 있습니다. 어떤 방법을 사용할지는 문제의 특성과 데이터에 따라 다르므로, 다양한 방법을 시도해보고 최적의 해결책을 찾는 것이 중요합니다.

비슷한 글 추천

Comments (0)

No comments yet. Be the first to comment!