한양과학기술고등학교

에듀테크 프로젝트 대시보드

LSTM & GRU

LSTM & GRU

일반 순환 신경망(RNN)은 같은 가중치를 계속 곱하다 보니 tanh 미분값(1보다 작음)이 여러 번 곱해져 기울기가 점점 0에 가까워진다 — 기울기 소실. 그래서 문장이 조금만 길어져도 "먼 과거"를 잊어버린다. LSTM(Long Short-Term Memory)은 은닉 상태와는 별도로 셀 상태(cell state) c라는 "컨베이어 벨트"를 하나 더 두고, 게이트(gate) 세 개로 그 벨트에 무엇을 올리고 내릴지 조절한다. GRU(Gated Recurrent Unit)는 게이트를 2개로 줄여 더 가볍게 만든 변형이다.

1. 셀 상태 = 정보가 그대로 흘러가는 벨트

RNN

은닉 상태 h 하나만 있고, 매 스텝 tanh(...) 전체를 다시 계산 → 이전 정보가 매번 "덧칠"되어 오래된 정보일수록 흐려진다.

LSTM

셀 상태 c는 게이트가 허락한 만큼만 곱하고 더할 뿐, 통째로 다시 계산하지 않는다. 필요한 정보는 거의 그대로 먼 미래까지 전달될 수 있다.

GRU

셀 상태를 따로 두지 않고 은닉 상태 h 자체를 업데이트 게이트로 "얼마나 새로 쓸지"만 조절 — 계산량이 LSTM보다 적다.

2. 게이트 3인방 (LSTM)

게이트는 모두 sigmoid를 써서 0~1 사이의 "밸브 개폐량"을 만든다. 0이면 완전히 잠금, 1이면 완전히 개방이다.

게이트수식역할
Forget (f)f = σ(Wf·x + Uf·h + bf)이전 셀 상태 중 얼마나 지울지
Input (i)i = σ(Wi·x + Ui·h + bi)새 후보 정보를 얼마나 받아들일지
후보 (c̃)c̃ = tanh(Wc·x + Uc·h + bc)지금 들어온 정보로 만든 새 후보값
Output (o)o = σ(Wo·x + Uo·h + bo)셀 상태 중 얼마나 밖으로 내보낼지
# 셀 상태 갱신 — 핵심 한 줄 c_t = f * c_prev + i * c̃ # 지우기(f) + 새로 쓰기(i) h_t = o * tanh(c_t) # 셀 상태 중 내보낼 만큼만 은닉 상태로
왜 기울기 소실이 줄어드나: c_t로 가는 경로에 f를 통한 덧셈이 있다. 곱셈만 반복되던 RNN과 달리, f가 1에 가까우면 오래된 정보가 거의 그대로(가산적으로) 다음 스텝까지 전달된다.

3. 직접 시퀀스를 넣어 게이트 움직임 보기

아래 문자열을 한 글자씩 넣으면서 각 게이트 값과 셀 상태가 어떻게 바뀌는지 확인해보자 (가중치는 이해를 돕기 위한 고정값이며 실제 학습된 값은 아니다). LSTM ↔ GRU 버튼으로 두 구조를 비교할 수 있다.

step 0 / 입력 문자: —

파란 선 = 셀 상태(또는 GRU 은닉 상태) 값의 변화. 값이 크게 출렁이지 않고 계단식으로 유지·갱신되는 모습이 RNN의 매끈하지만 빨리 사라지는 곡선과 다르다.

4. GRU — 게이트 2개로 단순화

GRU는 forget/input 게이트를 업데이트 게이트(z) 하나로 합치고, "과거를 얼마나 참고할지"를 정하는 리셋 게이트(r)를 추가로 둔다. 셀 상태 없이 은닉 상태 하나로만 동작한다.

게이트수식역할
Update (z)z = σ(Wz·x + Uz·h)새 값으로 얼마나 갈아탈지
Reset (r)r = σ(Wr·x + Ur·h)과거 h를 얼마나 무시하고 새 후보를 만들지
후보 (h̃)h̃ = tanh(W·x + U·(r⊙h))리셋된 과거 + 현재 입력으로 만든 후보
갱신h = (1−z)·h + z·h̃기존 값과 후보를 보간
LSTM(게이트 4개, 파라미터 多) vs GRU(게이트 2개, 파라미터 少) — 성능은 과제에 따라 비슷하거나 엇갈리지만, GRU는 계산이 가볍고 데이터가 적을 때 종종 유리하다.

5. 핵심 정리

셀 상태 = 벨트

게이트를 통과한 정보가 곱셈+덧셈으로만 이동해 먼 과거도 비교적 온전히 전달된다.

게이트 = 밸브

forget·input·output(LSTM) 또는 update·reset(GRU) 모두 sigmoid로 0~1 개폐량을 만든다.

LSTM vs GRU

게이트 4개 vs 2개. GRU가 더 가볍고 단순하지만 표현력은 과제에 따라 다르다.

그 다음은?

그래도 시퀀스를 순서대로 처리해야 하는 한계는 남아있다 — 이를 병렬화한 것이 셀프 어텐션이다.