← all posts
AI 2026.05.03 · 12 min read Advanced

RNN은 왜 sequence를 기억하는가

N-gram의 sparsity 한계부터 RNN의 parameter sharing과 hidden state 병목, teacher forcing의 exposure bias까지 — sequence 학습의 설계 결정을 관통하는 하나의 논리를 추적한다.


Sequence 학습의 역사는 하나의 질문을 중심으로 전개된다 — “얼마나 먼 과거를 봐야 하는가”. N-gram은 창문 크기를 고정하고, Neural LM은 embedding으로 sparsity를 완화하고, RNN은 창문을 아예 없앤다. 각 선택에는 구체적인 수학적 이유가 있고, 각 해결책은 다음 한계를 만들어낸다. 이 연쇄가 어디서 시작해 어디로 향하는가?

시작: N-gram의 두 가지 저주

N-gram LM의 기본 가정은 단순하다. 직전 n1n-1개의 단어만 보면 다음 단어를 예측할 수 있다.

p(wtw1,,wt1)p(wtwtn+1,,wt1)p(w_t \mid w_1, \ldots, w_{t-1}) \approx p(w_t \mid w_{t-n+1}, \ldots, w_{t-1})

Maximum likelihood estimate은 p^MLE(wtctx)=c(ctx,wt)/c(ctx)\hat p_{\text{MLE}}(w_t \mid \text{ctx}) = c(\text{ctx}, w_t) / c(\text{ctx}). 문제는 두 곳에서 동시에 터진다.

첫째, sparsity. Vocab V=104|V| = 10^4이면 가능한 trigram 수는 101210^{12}. 실제로 corpus에서 관찰되는 건 10710^7 수준 — 0.001%다. c(ctx,wt)=0c(\text{ctx}, w_t) = 0이면 p=0p = 0이 되고 전체 sentence의 log-likelihood는 -\infty로 내려간다.

둘째, 표현력 한계. “The cat which Mary saw yesterday at the park was hungry”에서 “cat”과 “was”의 수 일치는 9단어 거리에 있다. Trigram은 “park was hungry”만 본다. 이 의존성은 nn을 아무리 늘려도 표현 비용이 O(Vn)O(|V|^n)으로 폭증하므로 현실적으로 해결되지 않는다.

Kneser-Ney smoothing은 단순 count 대신 continuation count — 단어가 등장한 distinct context의 수 — 를 backoff 확률로 쓴다. “Francisco”는 count는 높지만 거의 “San” 뒤에만 나타난다. Continuation count는 그 협소함을 인코딩한다. 이 통찰은 word embedding의 distributional hypothesis와 같은 뿌리다.

Bengio 2003: embedding이 sparsity를 우회하는 방식

Bengio 2003의 Neural Probabilistic Language Model은 sparsity를 smoothing이 아니라 표현 공간의 변환으로 해결한다.

x=[C[wtn+1];;C[wt1]],h=tanh(Hx+bh),p(wtctx)=softmax(Uh+Wx+b)x = [C[w_{t-n+1}];\ldots;C[w_{t-1}]], \quad h = \tanh(Hx + b_h), \quad p(w_t \mid \text{ctx}) = \text{softmax}(Uh + Wx + b)

CRV×dC \in \mathbb{R}^{|V| \times d}는 embedding 행렬. One-hot의 V|V|차원 직교 공간 대신, 각 단어가 Rd\mathbb{R}^d의 dense vector로 표현된다. 핵심은 unseen n-gram에 대한 일반화다.

명제 1 · Curse of Dimensionality 완화

N-gram의 parameter 수는 O(Vn)O(|V|^n). NLM의 parameter 수는 O(Vd+ndH+VH)O(|V|d + ndH + |V|H) — vocab size와 context length가 분리된다.

▷ 증명

NLM은 Vn|V|^n개의 가능한 context마다 별도 분포를 저장하지 않는다. Embedding의 합성 함수 H,UH, U가 분포를 근사한다. 학습된 함수는 unseen n-gram에도 embedding 유사도를 통해 일반화된다. V=104|V| = 10^4, n=4n = 4, d=100d = 100, H=200H = 200 기준: N-gram 101610^{16} entries vs NLM 3×106\approx 3 \times 10^6 parameters. \square

그러나 NLM도 창문을 고정한다. n=5n = 5면 4개 이전까지만 본다. “cat … was” 같은 장거리 의존성은 여전히 모델링 불가능하다.

RNN: 창문을 없애는 대신 state를 만든다

RNN의 recurrent 구조는 fixed window를 state machine으로 대체한다.

ht=tanh(Whhht1+Wxhxt+bh),yt=Whyht+byh_t = \tanh(W_{hh}\, h_{t-1} + W_{xh}\, x_t + b_h), \quad y_t = W_{hy}\, h_t + b_y

두 가지 이점이 동시에 생긴다.

첫째, parameter sharing. WhhW_{hh}WxhW_{xh}는 모든 time step에서 공유된다. Parameter 수는 H2+HD+HO+H+OH^2 + HD + HO + H + O — sequence length TT와 무관하다. 길이 50으로 학습한 모델을 길이 500에 그대로 적용할 수 있다.

둘째, 이론적 무한 lookback. hth_tx1,,xtx_1, \ldots, x_t 전체의 압축이다. Elman (1990)의 hidden state connection이 Jordan (1986)의 output connection보다 표준이 된 이유는 hidden dimension이 output dimension에 제약받지 않아 더 풍부한 표현이 가능하기 때문이다.

그런데 “이론적 무한”에는 대가가 있다.

보조정리 2 · Hidden State Bottleneck

hth_tx1:tx_{1:t}의 정보를 lossless하게 보존하려면 Htlog2XH \ge t \log_2 |\mathcal{X}|가 필요하다 — 시간에 따라 선형 증가.

▷ 증명

Distinct sequence 수 Xt|\mathcal{X}|^t를 구별하려면 log2Xt\log_2 |\mathcal{X}|^t bits가 필요하다. htRHh_t \in \mathbb{R}^H의 finite precision에서 표현 가능한 sequence 수는 2H2^H에 비례한다. 따라서 lossless 보존에 Htlog2XH \ge t \log_2 |\mathcal{X}|. \square

고정된 HH는 결국 lossy compression이다. 학습이 task에 중요한 정보를 우선 보존하도록 유도할 뿐이다. 그리고 이 한계보다 실용적으로 더 치명적인 문제가 있다 — vanishing gradient. 이것이 LSTM의 동기가 되지만 그건 다음 이야기다.

손실 함수의 설계 결정들

sequence 학습의 task별 설계 결정을 관통하는 하나의 수식이 있다.

L=n,tmt(n)logpθ(yt(n)x1:t(n))n,tmt(n)\mathcal{L} = -\frac{\sum_{n,t} m^{(n)}_t \log p_\theta(y^{(n)}_t \mid x^{(n)}_{1:t})}{\sum_{n,t} m^{(n)}_t}

mt(n){0,1}m^{(n)}_t \in \{0, 1\}은 mask — padding 위치를 제외한다. 분모가 실제 token 수이므로 짧은 sequence의 loss가 padding으로 희석되는 편향이 사라진다.

Many-to-one (감정 분석)은 hTh_T 하나만 분류기에 넣는다. Many-to-many synced (POS tagging)는 매 step hth_t를 분류한다. Seq2seq (번역)는 decoder의 autoregressive factorization을 따른다.

pθ(y1:Sx1:T)=s=1Spθ(ysy<s,x1:T)p_\theta(y_{1:S} \mid x_{1:T}) = \prod_{s=1}^{S} p_\theta(y_s \mid y_{<s}, x_{1:T})

이 factorization은 chain rule에서 직접 나온다 — 임의의 joint distribution에 적용되는 항등식이다. Autoregressive 모델은 이것을 학습하고, non-autoregressive 모델은 여기에 conditional independence 가정을 추가로 도입한다.

Teacher Forcing의 Exposure Bias

Training에서는 ground truth prefix y<struey^{\text{true}}_{<s}를 쓰고, inference에서는 모델 예측 y^<s\hat{y}_{<s}를 쓴다. 오류가 누적되면 prefix가 점점 training distribution에서 멀어지고, 모델이 본 적 없는 영역에서 generalization이 무너진다. Scheduled sampling (Bengio 2015)은 학습 중 ground truth 비율을 1에서 0으로 점진적으로 낮춰 이를 완화한다.

트레이드오프

이 장을 통틀어 나타나는 trade-off는 표현력 vs 학습성이다.

RNN의 universality — Siegelmann & Sontag (1991)의 Turing-completeness — 는 “표현 가능성”의 상한이지 “학습 가능성”의 보장이 아니다. Vanishing gradient가 long-range dependency의 학습을 차단하고, fixed precision이 information bottleneck을 실질적으로 만든다. MLP의 universal approximation theorem, Transformer의 universality도 같은 구조다: 표현력은 upper bound, 학습성은 별개의 문제다.

정리

  • N-gram의 sparsity는 Kneser-Ney smoothing으로 완화되지만 표현력 한계 (O(Vn)O(|V|^n) 비용)는 해결되지 않는다.
  • Bengio 2003 NLM은 embedding으로 parameter 수를 O(Vd+ndH)O(|V|d + ndH)로 줄이고 unseen n-gram 일반화를 얻지만 fixed window는 유지된다.
  • RNN은 parameter sharing으로 가변 길이를 처리하고 이론상 무한 lookback을 갖지만, hidden state는 lossy compression이고 vanishing gradient가 실질적 학습 범위를 제한한다.
  • Autoregressive factorization sp(ysy<s,x)\prod_s p(y_s \mid y_{<s}, x)는 chain rule의 항등식이다. Teacher forcing은 이를 효율적으로 학습하지만 inference와의 distribution mismatch — exposure bias — 를 만든다.

다음 글에서는 BPTT (Backpropagation Through Time)가 어떻게 RNN의 gradient를 계산하는지, 그리고 그 계산 그래프에서 vanishing이 어떻게 발생하는지 수학적으로 추적한다.

REF
Bengio et al. · 2003 · A Neural Probabilistic Language Model · JMLR