매일 쌓인 감정으로 오늘 일기를 쓰듯이
CNN이 이미지의 공간적 지역성을 구조에 반영했다면, RNN(Recurrent Neural Network)은 음성·텍스트·시계열처럼 순서가 중요한(시퀀스) 데이터를 위한 귀납적 편향을 반영한다. 매일 밤 일기를 쓸 때 어제까지 쌓인 감정이 오늘 글에 영향을 주듯, RNN도 이전 시점의 정보를 내부에 저장해두고 현재 입력과 함께 처리한다.
가변 길이 처리 — 문장이 짧든 길든 같은 규칙(같은 가중치)으로 처리한다.
순서 보존 — 먼저 온 입력을 반영해, 사건이 일어난 순서대로 정보를 쌓는다.
과거 맥락 기억 — 이전까지의 내용을 요약한 상태를 현재 입력과 합쳐 다음을 예측한다.
Hidden State: 지금까지 읽은 것을 요약한 값
RNN 내부의 계산 단위를 Cell(메모리 셀)이라 부르고, 각 시점(t)에서 Cell이 만들어내는 요약값을 Hidden State(h_t)라고 한다. 현재 시점의 Hidden State는 이전 시점의 Hidden State와 현재 입력을 합쳐 계산한다.
h_t = tanh(W_hh · h_(t-1) + W_xh · X_t + b)
Y_t = W_hy · h_t + b_y
같은 층 안의 모든 시점은 W_hh, W_xh 가중치를 공유한다. 시점마다 새 가중치를 만들지 않기 때문에 학습해야 할 파라미터 수가 줄고, 문장 길이가 달라져도 같은 구조를 그대로 쓸 수 있다.
숫자로 Hidden State 계산해보기
W_hh = 0.3, W_xh = 0.01, b = 0.1로 고정하고, 세 가지 입력 시퀀스에서 Hidden State가 어떻게 바뀌는지 본다.
import math
W_hh, W_xh, b = 0.3, 0.01, 0.1
def run_rnn(xs):
h = 0.0
hidden_states = []
for x in xs:
h = math.tanh(W_hh * h + W_xh * x + b)
hidden_states.append(round(h, 4))
return hidden_states
print("Case1 (200, 300, 400):", run_rnn([200, 300, 400]))
print("Case2 (200, 50, 130): ", run_rnn([200, 50, 130]))
print("Case3 (200, -130, 50):", run_rnn([200, -130, 50]))
Case1 (200, 300, 400): [0.9705, 0.9977, 0.9997]
Case2 (200, 50, 130): [0.9705, 0.712, 0.9237]
Case3 (200, -130, 50): [0.9705, -0.7206, 0.366]
Case1처럼 큰 양수 입력이 계속 들어오면 Hidden State가 1에 가깝게 포화(saturate)된다. Case3처럼 중간에 음수(-130)가 들어오면 Hidden State가 순간적으로 음수로 뒤집히며 값이 크게 흔들린다. tanh는 -1~1 사이로만 출력되기 때문에, 이렇게 값이 1이나 -1 근처에 포화되면 그 지점의 기울기가 0에 가까워져 역전파 시 앞쪽 시점까지 신호가 잘 전달되지 않는다 — RNN이 기울기 소실에 취약한 이유 중 하나다.
입력·출력 길이에 따른 RNN 구조
구조 | 설명 | 예시 |
|---|---|---|
One-to-One | Hidden Layer가 1개인 가장 단순한 구조 | 일반 신경망과 유사 |
One-to-Many | 하나의 입력으로 여러 출력을 만든다 | 이미지 한 장 → 설명 문장 생성 |
Many-to-One | 여러 입력을 받아 하나의 출력을 만든다 | 문장 전체 → 감정 분류(긍정/부정) |
Many-to-Many | 여러 입력을 받아 여러 출력을 만든다 | 문장 번역, 품사 태깅 |
예측 대상에 따라 출력층도 달라진다. 시계열처럼 연속된 숫자를 예측할 때는 Softmax 없이 예측값을 그대로 쓰고, 텍스트처럼 정해진 N개 단어 중 하나를 고르는 문제라면 Softmax로 확률 분포를 만들어 분류(Classification)한다. 학습은 시간 축을 따라 펼친 뒤 역전파하는 BPTT(Backpropagation Through Time)로 진행한다.
정리
RNN은 Hidden State에 과거 정보를 요약해 저장하고, 이를 현재 입력과 결합해 다음을 예측하는 구조다. 가중치를 시점마다 공유해 가변 길이 시퀀스를 같은 규칙으로 처리할 수 있지만, tanh 기반 Hidden State가 포화되기 쉬워 긴 시퀀스에서는 기울기 소실 문제를 겪는다. 이 한계를 보완하려는 구조가 다음 글에서 다룰 LSTM이다.
참고 자료
Recurrent Neural Networks — d2l.ai (Dive into Deep Learning) — RNN 구조와 다양한 입출력 구성에 대한 공식 교재 (2026-08-07 확인)
댓글 0
댓글을 불러오는 중…