오늘 끝나면
RNN — 순차 데이터와 기억
- ✓RNN — 순차 데이터와 기억의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 RNN이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
Vanilla RNN과 vanishing gradient의 벽 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 7 / 지도학습 · 생성 DL
순서가 있는
데이터
이미지는 한 장을 통째로 봄.
문장은 순서가 있음. "나는 밥을" 다음 단어를 맞히려면 앞 단어를 기억해야 됨.
그래서 신경망에 기억을 심음. 그게 RNN임.
MLP는 순서를 모른다
지난 6일 신경망은 전부 입력 크기가 고정이었음.
28×28 픽셀, 784개 숫자. 근데 문장은 다름.
"좋다"는 단어 하나, "오늘 회의는 정말 길었다"는 다섯 개.
입력 길이가 매번 바뀜.
순서도 뜻을 바꿈. 개가 사람을 물었다와 사람이 개를 물었다는 같은 단어, 다른 뜻임.
MLP에 단어를 한 줄로 이어 붙이면?
길이 바뀌면 입력층 크기 안 맞음.
순서 바꿔도 같은 입력으로 봄.
구조 자체가 시퀀스에 안 맞음. 그래서 새 발상이 필요했음.
기억을 가진 루프
RNN 아이디어는 단순함. 단어를 하나씩 차례로 먹임.
매번 지금까지의 요약을 기억(hidden state)에 담아 다음 스텝으로 넘김.
핵심 수식은 한 줄임.
h_t = tanh(W_hh·h_(t-1) + W_xh·x_t + b)
새 입력 x_t와 직전 기억 h_(t-1)을 섞어 새 기억 h_t를 만듦. 그게 전부임.
여기 마법이 있음. 모든 타임스텝이 같은 가중치를 씀.
입력이 3단어든 30단어든 셀은 하나뿐임.
길이 상관없이 돌고, 파라미터는 안 늘어남.
펼쳐 놓으면 깊은 신경망 같지만, 실은 한 칸을 시간 축으로 복사한 것뿐임.
시간을 거슬러 학습한다
그럼 이 셀을 어떻게 학습시킴?
펼친 RNN은 결국 깊은 네트워크임.
그래서 역전파를 시간 축으로 흘려보내면 됨. 이걸 BPTT(Backpropagation Through Time)라고 함.
마지막 출력의 오차가 첫 단어까지 거슬러 올라감.
근데 여기서 RNN 운명을 가르는 문제가 터짐.
그래디언트가 타임스텝마다 W_hh와 tanh 미분과 반복해서 곱해짐.
왜 문제임? tanh 미분은 최대 1, 보통 0.1~0.25임.
이 작은 수를 20번 곱하면 0.25²⁰ ≈ 9×10⁻¹³ — 사실상 0임.
먼 과거의 학습 신호가 사라짐. 이게 Vanishing Gradient 문제임.
RNN은 5~10 스텝 너머를 잘 기억 못 함.
Q. 반대로 W_hh가 크면 어떻게 됨?
곱이 지수적으로 폭발함(Exploding Gradient). 손실이 NaN으로 터짐.실무에선 gradient clipping(예: norm을 5로 자르기)으로 막음. Vanishing보다 다루기 쉬운 편임.
셰익스피어를 한 글자씩
RNN이 진짜 기억을 갖는지, 가장 극적인 실험은 한 글자씩 글을 쓰게 하는 것임.
입력은 현재 글자, 목표는 다음 글자. 그것만 반복함.
처음엔 의미 없는 잡음을 뱉음.
근데 학습이 진행되면 신기한 일이 벌어짐.
따옴표 열면 닫을 줄 알고, 줄바꿈 리듬을 익히고, 영어 단어처럼 보이는 철자를 만들어냄.
누가 문법을 가르친 적 없는데도.
이게 Karpathy가 2015년 "The Unreasonable Effectiveness of RNN"에서 보여준 장면임.
RNN은 다음 글자만 맞히려다, 어느새 언어 구조를 hidden state에 압축해 버림.
오른쪽 코드가 그 생성 루프의 핵심임.
파이썬 코드 보기
# char-level 생성 루프 (PyTorch)
h = None
out = seed # 시작 글자
for _ in range(200):
logits, h = model(x, h) # 기억 h 를 계속 넘긴다
p = softmax(logits[-1] / temp)
nxt = sample(p) # 확률로 다음 글자 뽑기
out += itos[nxt]
x = nxt # 방금 글자가 다음 입력
print(out)기억은 어디에 쓰이나
RNN은 한 시대를 열었음.
음성 인식, 기계 번역, 챗봇 — 2014년부터 몇 년간 NLP의 중추였음.
비즈니스 핵심은 "순서가 의미인 데이터"가 어디에나 있다는 점임.
- 공장 센서의 진동·온도 시계열에서 이상 징후 미리 잡기
- 고객 로그를 순서대로 읽어 이탈/구매 예측하기
- 주가·수요 같은 시계열 예측, 음성을 한 프레임씩 받는 실시간 처리
근데 오늘 본 약점이 분명함. 먼 과거를 기억 못 함.
문장 길어지면 앞 내용을 잊음.
다음 시간엔 이 한계를 정면으로 푼 구조 — LSTM과 GRU를 만남. 핵심은 한 단어, 게이트(gate)임.
Q. RNN이 MLP보다 나은 결정적 한 가지는?
가변 길이 + 순서를 같은 파라미터로 처리한다는 점임.매 스텝 같은 셀을 재사용해 기억을 넘김. 그래서 입력이 3단어든 300단어든 모델 하나로 다룸.