GRU(Gated Recurrent Unit)는 2014년 Cho et al.이 제안한 순환 신경망 구조로, LSTM을 단순화한 모델이다. 두 개의 게이트만 사용해 LSTM과 유사한 성능을 내면서도 파라미터가 더 적고 학습이 빠르다.
구조
GRU는 리셋 게이트(Reset Gate)와 업데이트 게이트(Update Gate) 두 가지만 사용한다.
리셋 게이트: r = σ(Wr·[h_{t-1}, x_t])
업데이트 게이트: z = σ(Wz·[h_{t-1}, x_t])
후보 은닉: h̃ = tanh(W·[r⊙h_{t-1}, x_t])
새 은닉 상태: h_t = (1-z)⊙h_{t-1} + z⊙h̃
python
import torch
import torch.nn as nn
class GRUModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.gru = nn.GRU(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
out, h_n = self.gru(x)
return self.fc(out[:, -1, :])
# 시계열 분류 예시
model = GRUModel(input_size=5, hidden_size=32, output_size=3)
x = torch.randn(16, 50, 5)
logits = model(x) # (16, 3)
GRU vs LSTM 비교
| 항목 | GRU | LSTM |
|---|
| 게이트 수 | 2 (리셋, 업데이트) | 3 (망각, 입력, 출력) |
| 셀 상태 | 없음 (은닉 상태만) | 별도 셀 상태 존재 |
| 파라미터 | 더 적음 | 더 많음 |
| 소규모 데이터 | 종종 더 좋음 | 대규모에 유리 |
| 학습 속도 | 빠름 | 느림 |
언제 GRU를 선택하나?
- •데이터셋이 크지 않아 빠른 실험이 필요할 때
- •메모리/계산 자원이 제한적일 때
- •시퀀스가 길지 않은 경우 (수십~수백 스텝)
관련 개념