딥러닝 기초 (14) - LSTM과 GRU: 게이트로 장기 의존성
RNN의 기울기 소실을 구조로 푸는 LSTM의 셀 상태와 세 게이트(망각·입력·출력)가 장기 기억을 어떻게 흐르게 하는지, 이를 단순화한 GRU, 그리고 여전히 남는 순차 처리의 한계를 정리한 딥러닝 기초 (14)편입니다.
딥러닝 기초 시리즈의 14편입니다. 전체 목차는 0편에 있습니다. 13편 RNN의 기울기 소실을, 이 편은 게이트라는 구조로 풉니다.
문제를 다시 짚기
13편의 결론은 이랬습니다. RNN은 W_h가 반복 곱해지면서 먼 과거의 기울기가 소실돼 긴 의존성을 학습하지 못한다. 매 시점 상태가 통째로 다시 쓰이는 구조라, 오래 유지해야 할 정보가 몇 스텝 만에 덮여 사라집니다.
LSTM(Long Short-Term Memory)의 발상은 “상태를 매번 통째로 갈아엎지 말고, 무엇을 지우고 무엇을 더할지 골라서 조금씩 고치자”입니다.
LSTM: 셀 상태와 세 게이트
LSTM은 은닉 상태 h_t 외에 셀 상태 C_t를 하나 더 둡니다. C_t는 시퀀스를 따라 흐르는 장기 기억 통로입니다. 여기에 정보를 얼마나 지우고 실을지를 게이트가 조절합니다. 게이트는 0~1을 내는 시그모이드로, 원소별 곱(⊙)을 통해 “얼마나 통과시킬지”를 정하는 밸브입니다.
1
2
3
4
5
6
7
8
f_t = σ(W_f · [h_{t−1}, x_t]) # 망각 게이트: 이전 기억을 얼마나 지울까
i_t = σ(W_i · [h_{t−1}, x_t]) # 입력 게이트: 새 정보를 얼마나 실을까
C̃_t = tanh(W_C · [h_{t−1}, x_t]) # 후보: 새로 실을 정보의 내용
C_t = f_t ⊙ C_{t−1} + i_t ⊙ C̃_t # 셀 상태 갱신: 지우고, 더한다
o_t = σ(W_o · [h_{t−1}, x_t]) # 출력 게이트
h_t = o_t ⊙ tanh(C_t) # 은닉 상태 = 셀 상태의 조절된 노출
망각 게이트는 이전 셀 상태를 얼마나 유지할지, 입력 게이트와 후보는 무엇을 새로 기록할지, 출력 게이트는 그중 얼마를 지금 내보낼지를 정합니다.
왜 소실이 완화되는가
핵심은 셀 상태 갱신식 C_t = f_t ⊙ C_{t−1} + i_t ⊙ C̃_t가 덧셈 기반이라는 데 있습니다. RNN은 상태를 매번 W_h로 곱해 변형했지만, LSTM의 셀 상태는 이전 값에 새 정보를 더해 이어갑니다. 망각 게이트가 1에 가까우면 C_{t−1}이 거의 그대로 전달되고, 역전파 때도 기울기가 이 경로를 따라 큰 감쇠 없이 흐릅니다. 10편 ResNet의 스킵 커넥션이 기울기에 지름길을 낸 것과 같은 원리입니다.
GRU: 더 단순한 대안
GRU(Gated Recurrent Unit)는 LSTM을 간소화합니다. 셀 상태를 따로 두지 않고 은닉 상태 하나로 통합하고, 게이트를 업데이트·리셋 두 개로 줄입니다. 업데이트 게이트 하나가 “과거를 유지할지, 새 정보로 갈아탈지”를 한꺼번에 조절합니다. 파라미터가 적어 가볍고 학습이 빠르며, 성능은 대체로 비슷합니다.
| 상태 | 게이트 | 특징 | |
|---|---|---|---|
| RNN | h | 없음 | 단순하지만 장기 의존성에 취약 |
| LSTM | h, C | 3개 | 장기 기억에 강함, 파라미터 많음 |
| GRU | h | 2개 | LSTM보다 가볍고 비슷한 성능 |
남는 한계: 여전히 순차적이다
게이트는 13편의 두 한계 중 기울기 소실을 풀었습니다. 하지만 순차 처리는 그대로입니다. LSTM도 GRU도 h_t를 구하려면 h_{t−1}이 있어야 하므로, 시퀀스를 순서대로만 처리할 수 있고 병렬화가 안 됩니다. “순서대로 읽는다”는 전제 자체를 버리면 어떻게 될까요. 그 물음이 어텐션과 Transformer로 이어집니다.
정리
| 개념 | 한 줄 요약 |
|---|---|
셀 상태 C_t | 시퀀스를 따라 흐르는 장기 기억 통로 |
| 게이트 | 지울 것·실을 것·내보낼 것을 0~1로 조절 |
| 소실 완화 원리 | 덧셈 기반 갱신 → 기울기가 감쇠 없이 흐름 |
| GRU | 게이트 2개로 간소화. 가볍고 비슷한 성능 |
| 남는 한계 | 여전히 순차 처리, 병렬화 불가 |
다음 편은 순차 처리의 벽을 넘기 시작하는 출발점 — seq2seq의 병목과 그것을 푸는 어텐션입니다.