스킬캠퍼스

오늘 끝나면

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)라고 한다.

마지막 출력의 오차가 첫 단어까지 거슬러 올라간다.
이때 그래디언트가 타임스텝마다 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의 벽

모델

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

손실

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