RNN(Recurrent Neural Network)은 시퀀스 데이터(텍스트, 음성, 시계열) 처리에 특화된 신경망이다. 이전 타임스텝의 출력을 현재 입력과 함께 사용해 시간적 의존성을 학습한다.
구조
일반 신경망: 입력 → 출력 (독립적)
RNN:
x₁ → [RNN] → h₁ → y₁
x₂ → [RNN] → h₂ → y₂ (h₁ 참조)
x₃ → [RNN] → h₃ → y₃ (h₂ 참조)
각 타임스텝에서: h_t = tanh(W*h_{t-1} + U*x_t + b)
장기 의존성 문제
"서울에서 태어나 자란 나는 한국어를 잘 한다"
↑ ↑
멀리 떨어진 두 정보가 연관됨
기울기 소실(Vanishing Gradient): 긴 시퀀스에서 초기 정보 손실
LSTM (Long Short-Term Memory)
기울기 소실 문제를 게이트로 해결:
- Forget Gate: 이전 상태 중 버릴 정보
- Input Gate: 새로운 정보를 저장할 양
- Output Gate: 출력할 정보
python
import torch.nn as nn
lstm = nn.LSTM(input_size=100, hidden_size=256,
num_layers=2, batch_first=True, dropout=0.2)
# 시퀀스 처리
output, (h_n, c_n) = lstm(x) # x: (batch, seq_len, input_size)
관련 개념
참고문헌
- •Hochreiter & Schmidhuber (1997). Long Short-Term Memory