← AI 놀이터 홈으로

🔁 RNN과 LSTM (Recurrent Neural Network)

순서를 기억하는 신경망 — 기억이 어떻게 유지되고, 잊히고, 폭주하는지 수식을 직접 굴려 봐요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. 순서가 중요한 데이터

문장, 주가, 음악처럼 순서가 뜻을 바꾸는 데이터가 있어요. “개가 사람을 물었다”와 “사람이 개를 물었다”는 같은 단어인데 순서만 다르죠. RNN(순환 신경망)은 이런 데이터를 한 칸씩 읽으면서 기억을 이어가는 모델이에요. 화면 읽는 법: 위쪽 사각형 14개가 입력 시퀀스(클릭해서 0↔1 토글), 파란 선이 RNN의 기억 h, 보라 선이 LSTM의 셀 상태 c, 연한 파란 띠는 신호(1)가 들어온 순간이에요.

🖱️ 아래 사각형 14개가 입력 시퀀스예요. 클릭하면 0↔1이 바뀌어요 (1 = 신호 들어옴).

1234567891011121314

📖 읽는 법: 가로축은 시간 순서 t(1~14), 세로축은 기억의 세기(−1~1, 가운데 실선이 0)예요. 파란 선은 RNN의 기억 h_t, 보라 선은 단순화한 LSTM 셀 상태 c_t, 연한 파란 세로 띠는 신호(1)가 들어온 순간이에요. 신호가 들어온 뒤 선이 얼마나 오래 0 위에 머무는지— 즉 기억이 얼마나 오래가는지를 보면 돼요.

🎛️ 기억 조절하기

📊 지금 상태

마지막 RNN 기억 h_14
0.009
기억 반감기 (RNN)
약 2스텝
마지막 셀 상태 c_14
0.028
w_h × 12번 곱하면
0.014

기억 반감기는 마지막 신호의 기억이 절반으로 줄어드는 데 걸리는 스텝 수예요. w_h를 12번 곱한 값이 0에 가까우면 기울기 소실, 계속 커지면 기울기 폭발과 이어져요.

🧮 수식과 파이썬

h_t = tanh(w_x·x_t + w_h·h_{t−1})
지금 입력과 어제의 기억을 섞어 오늘의 기억을 만들어요

LSTM의 셀 상태는 (단순화하면) c_t = f·c_{t-1} + (1−f)·x_t — 잊음 게이트 f가 옛 기억과 새 입력의 비율을 조절하는 기억의 수도꼭지예요.

🐍 파이썬 코드로 보면? (펼치기)
import torch
import torch.nn as nn

# 14 타임스텝짜리 시퀀스 하나 (t=2에만 신호 1)
x = torch.zeros(1, 14, 1)          # (배치, 시간, 특성)
x[0, 1, 0] = 1.0

# 기본 RNN: h_t = tanh(W_x x_t + W_h h_{t-1})
rnn = nn.RNN(input_size=1, hidden_size=8, batch_first=True)
out, h_n = rnn(x)                  # out: 매 스텝의 기억 h_t
print(out.shape)                   # torch.Size([1, 14, 8])

# LSTM: 게이트로 셀 상태 c(장기 기억)를 따로 관리
lstm = nn.LSTM(input_size=1, hidden_size=8, batch_first=True)
out, (h_n, c_n) = lstm(x)          # c_n이 오래가는 기억

# 마지막 기억에 선형층을 붙이면 분류/예측 모델 완성
head = nn.Linear(8, 1)
y_pred = head(h_n[-1])             # 시퀀스 전체를 요약한 예측