스킬캠퍼스
Day 7 · RNN — 순차 데이터와 기억
강의

오늘 끝나면

RNN — 순차 데이터와 기억

  • RNN — 순차 데이터와 기억의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 RNN이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

Vanilla RNN과 vanishing gradient의 벽 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

AI · Day 7 / 지도학습 · 생성 DL

순서가 있는
데이터

이미지는 한 장을 통째로 봄.
문장은 순서가 있음. "나는 밥을" 다음 단어를 맞히려면 앞 단어를 기억해야 됨.
그래서 신경망에 기억을 심음. 그게 RNN임.

P.01AI · Day 7

MLP는 순서를 모른다

지난 6일 신경망은 전부 입력 크기가 고정이었음.
28×28 픽셀, 784개 숫자. 근데 문장은 다름.

"좋다"는 단어 하나, "오늘 회의는 정말 길었다"는 다섯 개.
입력 길이가 매번 바뀜.
순서도 뜻을 바꿈. 개가 사람을 물었다 사람이 개를 물었다는 같은 단어, 다른 뜻임.

MLP에 단어를 한 줄로 이어 붙이면?
길이 바뀌면 입력층 크기 안 맞음.
순서 바꿔도 같은 입력으로 봄.
구조 자체가 시퀀스에 안 맞음. 그래서 새 발상이 필요했음.

고정 입력 vs 가변 시퀀스
FIXED · MLP길이 = 4 로 고정SEQUENCE · RNN오늘회의었다길이 가변 · 순서가 의미개가 사람을 물었다 ≠ 사람이 개를물었다 — 같은 단어, 다른 뜻
P.02AI · Day 7

기억을 가진 루프

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 · 기억을 한 칸씩 흘려보낸다
h_t = tanh(W_hh·h_(t-1) + W_xh·x_t)··············파란 셀 진하기 = 기억 세기 · 화살표 = 기억의 전달
t = 0 / 8
지금 기억 h_t
0.000
첫 토큰 기억
0.762
끝까지 남은 비율
32%
토큰을 끝까지 먹여 마지막 기억을 확인하세요.
P.03AI · Day 7

시간을 거슬러 학습한다

그럼 이 셀을 어떻게 학습시킴?
펼친 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보다 다루기 쉬운 편임.
BPTT — 시간 축으로 펼친 역전파
BPTT — GRADIENT FLOWS BACKLossh1h2h3h4신호가 거의 사라짐강한 신호0.25²⁰ ≈ 9×10⁻¹³ → VANISHING먼 과거일수록 기울기가 0 에 수렴
P.04AI · Day 7

셰익스피어를 한 글자씩

RNN이 진짜 기억을 갖는지, 가장 극적인 실험은 한 글자씩 글을 쓰게 하는 것임.
입력은 현재 글자, 목표는 다음 글자. 그것만 반복함.

처음엔 의미 없는 잡음을 뱉음.
근데 학습이 진행되면 신기한 일이 벌어짐.
따옴표 열면 닫을 줄 알고, 줄바꿈 리듬을 익히고, 영어 단어처럼 보이는 철자를 만들어냄.
누가 문법을 가르친 적 없는데도.

이게 Karpathy가 2015년 "The Unreasonable Effectiveness of RNN"에서 보여준 장면임.
RNN은 다음 글자만 맞히려다, 어느새 언어 구조를 hidden state에 압축해 버림.
오른쪽 코드가 그 생성 루프의 핵심임.

char-level RNN — 다음 글자 예측
INPUT "h" → PREDICT "e"heellllo다음 글자만 맞히다 보면 단어·문법이 떠오른다
파이썬 코드 보기
# 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)
P.05AI · Day 7

기억은 어디에 쓰이나

RNN은 한 시대를 열었음.
음성 인식, 기계 번역, 챗봇 — 2014년부터 몇 년간 NLP의 중추였음.
비즈니스 핵심은 "순서가 의미인 데이터"가 어디에나 있다는 점임.

  • 공장 센서의 진동·온도 시계열에서 이상 징후 미리 잡기
  • 고객 로그를 순서대로 읽어 이탈/구매 예측하기
  • 주가·수요 같은 시계열 예측, 음성을 한 프레임씩 받는 실시간 처리

근데 오늘 본 약점이 분명함. 먼 과거를 기억 못 함.
문장 길어지면 앞 내용을 잊음.
다음 시간엔 이 한계를 정면으로 푼 구조 — LSTM과 GRU를 만남. 핵심은 한 단어, 게이트(gate)임.

Q. RNN이 MLP보다 나은 결정적 한 가지는?가변 길이 + 순서를 같은 파라미터로 처리한다는 점임.
매 스텝 같은 셀을 재사용해 기억을 넘김. 그래서 입력이 3단어든 300단어든 모델 하나로 다룸.
다음 강의로 — 한계가 곧 길이 된다
LONG-RANGE DEPENDENCY?첫 단어가 마지막 답을 결정하는데RNN은 그 사이에 기억을 잃는다NEXT · Day 8 — GATE 로 기억을 지킨다

3줄 요약

  1. 1Vanilla RNN과 vanishing gradient의 벽
  2. 2RNN — 순차 데이터와 기억은 준비운동 → 지도학습 → 시퀀스 → 생성모델 → 실무 적용 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

RNN

Vanilla RNN과 vanishing gradient의 벽

모델

입력을 받아 예측이나 출력을 만드는 계산 규칙

손실

예측이 정답에서 얼마나 빗나갔는지 재는 숫자