티스토리 뷰

반응형

딥러닝 기초학습 7: LSTM과 GRU — RNN의 기억력 문제를 해결한 ‘게이트 설계’의 정수


RNN을 쓰다 보면 꼭 이런 순간이 옵니다.

“분명 앞에서 중요한 정보가 있었는데… 왜 모델이 기억을 못 하지?”

이 질문에 대한 답이 바로
LSTM(Long Short-Term Memory)GRU(Gated Recurrent Unit) 입니다.

이 둘은 RNN의 실패를 인정하고,
“그럼 기억을 제대로 관리하자”라는 발상에서 출발했습니다.

이번 글에서는

  • RNN이 왜 기억을 못 했는지
  • LSTM이 어떻게 기억을 유지했는지
  • GRU는 왜 더 단순해졌는지
    를 구조 중심으로 차근차근 풀어봅니다.

1. RNN은 왜 ‘장기 기억’을 못 했을까?

문제의 핵심은 하나입니다.

모든 정보를 같은 방식으로 계속 덮어쓴다

기본 RNN은 매 시점마다 이렇게 계산합니다.

h_t = f(Wx_t + Uh_{t-1})

이 구조에서는

  • 중요한 정보
  • 덜 중요한 정보
  • 이미 필요 없는 정보

모든 것이 동일한 h_t 하나에 섞여 들어갑니다.

그리고 시간이 길어질수록

  • 중요한 정보는 희석되고
  • gradient는 사라집니다 (vanishing gradient)

그래서 “긴 문장”, “장기 패턴”을 기억하지 못했습니다.


2. LSTM의 핵심 아이디어: 기억을 따로 관리하자

반응형

LSTM의 혁신은 단순하지만 강력합니다.

“은닉 상태 말고,
진짜 기억 전용 공간을 하나 더 만들자

그래서 LSTM에는 두 개의 상태가 있습니다.

  • h_t : 현재 출력(단기 기억)
  • c_t : 셀 상태(Cell State, 장기 기억)

c_t가 LSTM의 본질입니다.


3. LSTM의 3가지 게이트 (Gate)

게이트는 “열지 / 닫을지”를 결정하는 장치입니다.
모두 sigmoid(0~1) 로 동작합니다.

① Forget Gate — 무엇을 잊을 것인가

f_t = σ(W_f · [h_{t-1}, x_t])
  • 0 → 완전히 잊음
  • 1 → 완전히 유지

👉 이 게이트가 LSTM의 혁신 포인트입니다.
RNN에는 “잊는 기능” 자체가 없었습니다.


② Input Gate — 무엇을 새로 기억할 것인가

i_t = σ(W_i · [h_{t-1}, x_t])
ĉ_t = tanh(W_c · [h_{t-1}, x_t])
  • i_t : 얼마나 쓸지
  • ĉ_t : 어떤 내용을 쓸지

③ Cell State 업데이트 — 기억의 핵심

c_t = f_t * c_{t-1} + i_t * ĉ_t

이 식이 왜 중요한지 보세요.

  • 곱셈 + 덧셈 구조
  • 미분 시 gradient가 잘 유지됨
  • 정보가 “그대로 흐를 수 있는 길”이 생김

👉 이것이 기울기 소실 문제를 해결한 구조적 이유입니다.


④ Output Gate — 무엇을 밖으로 보여줄 것인가

o_t = σ(W_o · [h_{t-1}, x_t])
h_t = o_t * tanh(c_t)
  • 기억(c_t) 중에서
  • 지금 시점에 필요한 정보만 출력

4. LSTM을 한 문장으로 요약하면

“기억(c)은 따로 보존하고,
입력·출력·삭제를 게이트로 조절한다.”

그래서 LSTM은:

  • 긴 문장 이해 가능
  • 장기 의존성 학습 가능
  • 번역, 음성 인식, 시계열에서 성공

5. 그런데… LSTM은 너무 복잡했다

LSTM의 단점도 분명했습니다.

  • 파라미터 많음
  • 연산 느림
  • 구조 복잡 → 튜닝 어려움

그래서 나온 질문:

“이거… 조금만 단순하게 못 하나?”

그 답이 GRU 입니다.


6. GRU — LSTM을 ‘현실화’한 구조

GRU는 LSTM을 이렇게 정리합니다.

LSTMGRU

Cell state(c) 없음
3개 게이트 2개 게이트
복잡 단순
안정적 빠름

GRU는 c_t와 h_t를 하나로 합칩니다.


7. GRU의 두 가지 게이트

① Update Gate (z)

z_t = σ(W_z · [h_{t-1}, x_t])
  • 과거를 얼마나 유지할지 결정
  • LSTM의 forget + input 역할을 동시에 수행

② Reset Gate (r)

r_t = σ(W_r · [h_{t-1}, x_t])
  • 과거 정보를 얼마나 무시할지 결정
  • 문맥을 “리셋”하는 역할

③ GRU 상태 업데이트

h̃_t = tanh(W · [r_t * h_{t-1}, x_t])
h_t = (1 - z_t) * h_{t-1} + z_t * h̃_t

👉 구조는 단순하지만
👉 기억 유지 능력은 LSTM에 매우 근접


8. LSTM vs GRU, 실무에서는?

정답은 없습니다. 다만 경향은 있습니다.

상황추천

데이터 많고 복잡 LSTM
속도 중요, 구조 단순 GRU
모바일 / 경량 모델 GRU
연구/기준 모델 LSTM

요즘은 둘 다
Transformer 이전 세대의 핵심 모델로 자리 잡았습니다.


9. PyTorch로 LSTM / GRU 사용 예제

실제로 가장 많이 쓰는 형태입니다.

LSTM

import torch
import torch.nn as nn

lstm = nn.LSTM(
    input_size=10,
    hidden_size=20,
    batch_first=True
)

X = torch.randn(5, 7, 10)
out, (h_n, c_n) = lstm(X)

print(out.shape)  # (5, 7, 20)

GRU

gru = nn.GRU(
    input_size=10,
    hidden_size=20,
    batch_first=True
)

out, h_n = gru(X)
print(out.shape)  # (5, 7, 20)

✔ 실무에서 그대로 쓰는 코드
✔ 오류 없이 실행됩니다


10. 그런데… 왜 결국 Transformer로 갔을까?

LSTM/GRU도 결국 한계를 가졌습니다.

  • 여전히 순차 계산 → 느림
  • 긴 문장에서는 메모리 병목
  • 병렬화 어려움

그래서 나온 질문:

“굳이 순서대로 계산해야 할까?”
“모든 단어를 한 번에 보게 하면 안 될까?”

이 질문의 답이 바로 Attention,
그리고 Transformer 입니다.


11. 요약 정리

개념한 줄 요약

RNN 기억이 약한 순환 구조
LSTM 기억을 따로 관리하는 게이트 모델
GRU LSTM을 단순화한 실용 모델
핵심 해결 기울기 소실 + 장기 기억
한계 순차 계산

 



딥러닝,LSTM,GRU,RNN,게이트구조,시계열,NLP,장기기억,딥러닝기초,PyTorch

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형