C.W.K.
Stream
Lesson 03 of 10 · published

긴 의존성과 vanishing gradient

~18 min · long-range, vanishing-gradient, rnn

Level 0Token
0 XP0/94 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

LSTM 게이트가 있어도, 시퀀스 앞쪽 정보는 수백 번의 순차 변환을 거치면서 흐려져. 이게 긴 의존성 문제야. 2010년대 내내 RNN의 실전 컨텍스트가 수백 토큰 수준에 머문 진짜 이유지.

두 가지 실패 모드가 같이 작용해. 첫째는 forward: 정보가 거치는 모든 위치마다 고정 크기 hidden state로 lossy 압축이 들어가. 200번째 위치에 도달할 때면 1번째 위치 신호는 199겹의 섞임 밑에 깔려 있어. 둘째는 backward: 학습 중 gradient가 그 모든 단계를 거꾸로 통과해야 하는데, 자코비안 곱셈이 반복되면서 지수적으로 줄어들어. 그 유명한 vanishing gradient야.

attention이 질적으로 다른 이유

self-attention은 모든 두 위치 사이를 한 hop으로 만들어 — 어떤 두 토큰이든 하나의 가중치 행렬이 직접 비교해. 따라갈 사슬 자체가 없으니까, forward 정보 손실도 backward gradient 감쇠도 거리에 따라 누적되지 않아. 비용은 O(n²) 연산량으로 나타나지, gradient 병리로 나타나지 않는 거지.

"긴 컨텍스트가 attention 이후에야 실용화됐다"는 가장 깔끔한 한 줄 설명이 이거야. 요즘 트랜스포머는 128K, 1M, 심지어 10M 토큰(LLaMA 4 Scout)까지 가 — RNN이 좋아진 게 아니라, attention이 거리를 lossy하게 만들던 메커니즘 자체를 제거한 거야.

Code

Path length: O(n) vs O(1)·python
# RNN: position 1 reaches position n through n hops
def reach_rnn(x, n):
    h = encode(x[0])
    for t in range(1, n):
        h = step(h, x[t])    # information passes through every step
    return h                  # signal from x[0] now buried n layers deep

# Attention: position 1 reaches position n in one matmul
def reach_attention(X):
    # X is (n, d). Q, K, V derived once.
    Q, K, V = project(X), project(X), project(X)
    return softmax(Q @ K.T / sqrt(d)) @ V
    # Every (i, j) pair has a direct weight. No depth in i.

External links

Exercise

synthetic 'needle in a haystack' 만들어 봐 — 6자리 unique 숫자를 distractor 문장 더미 안에 숨기고, 거리 100 / 1k / 4k / 16k 토큰에서 회상률 측정. 가지고 있는 open-weight 모델로 돌리고, 거리 vs. 회상률 그래프 그려서 어디서 떨어지는지 찾아.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.