순환 신경망(RNN)

src/content/documents/deep-learning/rnn-sequential-data-and-temporal-dependency.json

매일 쌓인 감정으로 오늘 일기를 쓰듯이

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

댓글을 불러오는 중…