순환 신경망(RNN)과 LSTM 직관
RNN 갱신식 · 기울기 소실 · LSTM 게이트를 손계산으로 익히는 기초 수업
먼저 알아야 할 것
다루는 내용
글을 한 토큰씩 읽으며 은닉 상태에 요약하는 순환 신경망을 다룹니다. 갱신식과 파라미터 공유를 작은 숫자로 두 걸음 계산하고, 시간 역전파에서 기울기가 사라지거나 폭발하는 이유를 확인합니다. LSTM의 세 게이트와 메모리 셀을 한 걸음 손계산하고, RNN의 한계가 어텐션 · 트랜스포머로 이어지는 흐름을 정리합니다.
해설
순환 신경망(RNN)과 LSTM 직관
순환 신경망(Recurrent Neural Network, RNN) 은 글을 한 토큰씩 읽으며 지금까지 읽은 내용을 은닉 상태(hidden state) 라는 벡터 하나에 계속 덮어써 요약하는 모델입니다. 이 수업에서는 RNN의 갱신식을 손으로 두 걸음 계산하고, 왜 긴 문장에서 기울기가 사라지는지, LSTM의 '게이트'가 그 문제를 어떻게 줄이는지 숫자로 확인합니다. 트랜스포머가 무엇을 해결했는지 이해하려면 꼭 거쳐야 하는 단계입니다.
| 항목 | 내용 |
|---|---|
| 참고 출처 | Dive into Deep Learning 9.4절 「Recurrent Neural Networks」 · 10.1절 「Long Short-Term Memory (LSTM)」 (rnn, lstm) |
| 트랙 · 수준 | NLP·트랜스포머 · 기초 |
| 이 수업이 다루는 범위 | 은닉 상태 갱신식, 시간 축 펼치기와 파라미터 공유, 문자 단위 언어 모델 예, 시간 역전파(BPTT)와 기울기 소실 · 폭발, LSTM 게이트, GRU 개요 |
들어가기 전에
- 언어 모델의 기본: 다음 토큰 예측 · 퍼플렉서티 · 샘플링 — RNN은 그 '다음 토큰 확률'을 계산하는 한 가지 방법입니다.
- 오차 역전파로 표현 학습하기 — 연쇄 법칙으로 기울기를 뒤로 전하는 계산. 오늘은 그것을 '시간 축'으로 펼칩니다.
한눈에 보기
- RNN의 갱신식 의 각 기호를 설명할 수 있습니다.
- 같은 가중치를 모든 시점에 다시 쓰기 때문에 길이가 늘어도 파라미터 수가 같다는 것을 압니다.
- 작은 숫자로 은닉 상태를 두 걸음 계산해 봅니다.
- 긴 문장에서 기울기가 0.5를 수십 번 곱한 것처럼 작아지는(또는 커지는) 이유를 압니다.
- LSTM의 세 게이트와 메모리 셀이 무엇을 하는지, 한 걸음을 손으로 계산합니다.
1. RNN의 갱신식
직관(해설용 비유). 책을 읽으며 공책 한 쪽에 "지금까지의 줄거리"를 계속 고쳐 쓰는 사람입니다. 새 문장(입력)과 지난 메모(이전 은닉 상태)를 보고 메모를 새로 씁니다. 공책 크기는 정해져 있어서 오래된 내용은 점점 흐려집니다.
단계.
- 처음 은닉 상태 를 0으로 둡니다.
- 시점 마다 입력 (토큰 임베딩)와 이전 상태 을 각각 가중치와 곱해 더합니다.
- 활성화 함수(보통 tanh)를 씌워 새 상태 를 만듭니다.
- 로 그 시점의 출력(다음 토큰 로짓)을 계산합니다.
D2L의 식(미니배치 표기)은 다음과 같습니다.
| 기호 | 크기 | 뜻 |
|---|---|---|
| 시점 의 입력(: 배치 크기, : 입력 차원) | ||
| 시점 의 은닉 상태(: 은닉 차원) | ||
| 입력 → 은닉 가중치 | ||
| 은닉 → 은닉 가중치(순환 연결) | ||
| 편향 | ||
| 은닉 → 출력 가중치 | ||
| 출력(분류라면 소프트맥스를 씌워 확률로) | ||
| — | 활성화 함수(흔히 tanh) |
파라미터 공유. D2L이 강조하듯 는 모든 시점에서 같은 것 을 다시 씁니다. 그래서 문장이 10토큰이든 1,000토큰이든 파라미터 수가 같습니다.
숫자로 해 보기(해설용, 모든 값을 스칼라로). , , , , 입력 , , 이라 합시다.
- : →
- : →
에는 뿐 아니라 을 통해 의 정보도 섞여 있습니다. 이것이 '기억'입니다.
문자 단위 언어 모델 예(D2L). 입력 "machin", 목표 "achine" 으로 학습하면, 시점 3의 은닉 상태는 'm · a · c' 를 본 상태이고 그 출력은 다음 글자 'h' 를 맞히도록 교차 엔트로피로 학습됩니다. 모든 시점의 손실을 더해 한꺼번에 학습합니다.
flowchart LR
H0[h0 = 0] --> C1((RNN 셀))
X1[x1 토큰] --> C1
C1 --> H1[h1]
H1 --> C2((같은 RNN 셀))
X2[x2 토큰] --> C2
C2 --> H2[h2]
H2 --> C3((같은 RNN 셀))
X3[x3 토큰] --> C3
C3 --> H3[h3]
H1 --> O1[다음 토큰 예측 1]
H2 --> O2[다음 토큰 예측 2]
H3 --> O3[다음 토큰 예측 3]2. 시간 역전파와 기울기 소실 · 폭발
직관. RNN을 시간 축으로 펼치면 "같은 층을 문장 길이만큼 깊게 쌓은 신경망"과 같습니다. 학습은 이 펼친 그래프에 역전파를 하는 것이고, 이를 시간 역전파(Backpropagation Through Time, BPTT) 라고 합니다.
단계. 시점 의 손실이 시점 1의 입력에 대해 갖는 기울기를 구하려면, 연쇄 법칙으로 을 번 곱해야 합니다.
| 기호 | 뜻 |
|---|---|
| tanh에 들어가기 전 값 | |
| , 항상 0~1 |
숫자로 해 보기(해설용). 곱해지는 한 항이 늘 0.5 정도라면
- 10걸음 뒤:
- 20걸음 뒤:
로 사실상 0이 됩니다(기울기 소실, vanishing gradient). 반대로 한 항이 1.1이면 로 커지고, 더 길면 폭발합니다(기울기 폭발, exploding gradient).
결과. 기울기가 사라지면 멀리 떨어진 토큰 사이의 관계(예: 문장 앞의 주어와 끝의 동사 일치)를 배우지 못합니다. 폭발은 보통 기울기의 크기를 일정 값 이하로 자르는 기울기 클리핑(gradient clipping) 으로 막지만, 소실은 구조를 바꿔야 합니다. 그 해답이 LSTM입니다.
3. LSTM: 게이트로 기억을 지키기
직관(해설용 비유). 공책 옆에 따로 보관하는 장부(메모리 셀) 를 두고, 세 명의 문지기가 지킵니다. '잊기 문지기'는 장부에서 무엇을 지울지, '입력 문지기'는 새로 무엇을 적을지, '출력 문지기'는 장부 중 무엇을 지금 꺼내 보여 줄지 정합니다. 장부는 곱하기 대신 더하기 로 고쳐지기 때문에 정보와 기울기가 먼 시점까지 잘 살아남습니다.
D2L 10.1절의 식(: 시그모이드, : 원소별 곱)입니다. LSTM은 Hochreiter와 Schmidhuber가 1997년에 발표했습니다.
| 기호 | 범위 | 뜻 |
|---|---|---|
| 0~1 | 얼마나 쓰고 · 남기고 · 내보낼지의 비율 | |
| −1~1 | 이번에 새로 적을 후보 내용 | |
| — | 메모리 셀(장부) | |
| −1~1 | 바깥으로 내보내는 은닉 상태 |
숫자로 해 보기(해설용, 스칼라 한 걸음). 이전 셀 이고, 게이트에 들어가는 값이 망각 2.0, 입력 0.0, 출력 1.0, 후보 0.5 였다고 합시다.
- , , ,
망각 게이트가 0.881이라 예전 내용의 대부분이 남았고, 새 내용이 절반 비율로 더해졌습니다.
왜 기울기가 덜 사라지나. 셀 경로에서 입니다. 망각 게이트가 1에 가까우면 이 경로의 곱이 거의 1로 유지되어, tanh 미분과 가중치를 매번 곱하던 RNN보다 기울기가 훨씬 멀리 갑니다. 모델이 "이 정보는 오래 기억해야 한다"를 스스로 배워 를 1 가까이 둘 수 있습니다.
대가. 게이트 네 묶음의 가중치가 필요해 파라미터와 계산이 RNN의 약 4배입니다. D2L도 LSTM 같은 순환 모델의 학습 비용이 크다고 정리합니다.
GRU 한 줄. 게이트 순환 유닛(Gated Recurrent Unit, GRU)은 LSTM을 단순화해 메모리 셀을 따로 두지 않고 '리셋 · 업데이트' 두 게이트만 쓰는 구조입니다. 파라미터가 적고 성능은 비슷한 경우가 많습니다(D2L 10.2절).
4. RNN의 한계와 그다음
- 순차 계산: 를 구하려면 이 먼저 있어야 해서 시점끼리 병렬 처리가 안 됩니다. GPU를 충분히 쓰기 어렵습니다.
- 병목: 긴 문장 전체를 고정 크기 벡터 하나에 담아야 합니다. 번역처럼 입력이 길면 앞부분이 흐려집니다.
이 두 문제가 seq2seq → 어텐션의 시작 → 트랜스포머 로 이어지는 흐름의 출발점입니다. D2L의 비교표에 따르면 길이 에서 RNN은 순차 연산이 , 셀프 어텐션은 입니다.
연습 문제
- 입력 차원 , 은닉 , 출력 인 RNN의 파라미터 수는?
- 풀이: 12 + 16 + 4 + 20 + 5 = 57 개입니다.
- 같은 에서 LSTM의 게이트 · 후보 부분 파라미터 수는?
- 풀이: 한 묶음이 , 네 묶음이므로 128 개입니다(출력층 제외).
- 본문 RNN 예에서 이면 은?
- 풀이: → 입니다. 입력이 없어도 기억이 조금씩 줄며 남습니다.
- LSTM에서 , 이면 셀은 어떻게 되나요?
- 풀이: — 내용을 그대로 보존합니다.
스스로 점검
- RNN이 문장 길이와 상관없이 파라미터 수가 같은 이유는?
- 답: 모든 시점에서 같은 가중치를 다시 쓰기(파라미터 공유) 때문입니다.
- 기울기 소실은 왜 생기나요?
- 답: 시간 역전파에서 1보다 작은 값(tanh 미분 × 가중치)을 시점 수만큼 곱하기 때문입니다.
- LSTM 셀 갱신이 '더하기'인 것이 왜 중요한가요?
- 답: 셀 경로의 기울기가 망각 게이트 값으로만 곱해져, 게이트가 1에 가까우면 먼 시점까지 기울기와 정보가 유지됩니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 순환 신경망(RNN) | 이전 상태를 다음 계산에 다시 넣는 신경망 |
| 은닉 상태(hidden state) | 지금까지 읽은 내용을 요약한 벡터 |
| 파라미터 공유 | 모든 시점에서 같은 가중치를 쓰는 것 |
| 시간 역전파(BPTT) | 시간 축으로 펼친 RNN에 하는 역전파 |
| 기울기 소실 / 폭발 | 기울기가 곱해지며 0에 가까워지거나 너무 커지는 현상 |
| 기울기 클리핑 | 기울기 크기를 상한으로 잘라 폭발을 막는 방법 |
| LSTM | 메모리 셀과 세 게이트를 둔 순환 구조 |
| 게이트(gate) | 0~1 값을 곱해 정보 흐름을 조절하는 장치 |
| 메모리 셀(memory cell) | LSTM이 정보를 오래 보관하는 내부 상태 |
| GRU | 게이트 두 개로 단순화한 순환 구조 |
더 깊이 보려면
- 신경망으로 시퀀스를 시퀀스로 학습하기 (seq2seq) — LSTM 두 개로 만든 번역 모델
- Mamba: 선택적 상태 공간 모델로 선형 시간 시퀀스 모델링 — 순환 구조의 장점(선형 시간)을 되살린 최근 모델
- D2L 9장(순환 신경망) · 10장(현대 순환 신경망)
다음에 볼 것
- 신경망으로 시퀀스를 시퀀스로 학습하기 (seq2seq) — 오늘 배운 LSTM으로 문장을 다른 문장으로 바꾸는 법, 그리고 '고정 벡터 병목'이 실제로 어떻게 드러나는지
라이선스
본문은 KAITABASE 자체 해설입니다. 참고 자료 Dive into Deep Learning은 CC BY-SA 4.0으로 공개되어 있습니다. 가중치 · 입력 숫자는 이 수업을 위해 만든 해설용 예입니다.
출처
- Dive into Deep Learning 9.4 Recurrent Neural Networks: d2l.ai/chapter_recurrent-neural-networks/…
- Dive into Deep Learning 10.1 Long Short-Term Memory (LSTM): d2l.ai/chapter_recurrent-modern/lstm.html
AI 원리부터 이해하기 · NLP·트랜스포머 모듈
NLP·트랜스포머 모듈 학습
이 글은 NLP·트랜스포머 모듈의 학습 자료입니다. 전체 23개 자료 중 5번째입니다.
출처·원문
원문 보기요약만