Seq2Seq에서 Attention까지, 무엇이 달라졌나
고정 벡터 병목부터 Bahdanau의 soft alignment, Luong의 효율화, Coverage와 Pointer Network까지 — RNN 기반 attention 계보의 설계 결정을 추적한다.
- 01 RNN은 왜 sequence를 이해할 수 있는가
- 02 RNN 학습은 왜 이렇게 설계되었는가
- 03 RNN의 Vanishing Gradient는 왜 피할 수 없는가
- 04 LSTM은 어떻게 기억하는가 — CEC에서 GRU까지
- 05 RNN의 네 가지 진화 — BiRNN, Stacked, NTM, ESN
- 06 Seq2Seq에서 Attention까지, 무엇이 달라졌나
- 07 RNN에서 Mamba까지: 시퀀스 모델 진화의 단일 원리
Sutskever 2014의 Seq2Seq는 번역·요약·대화를 하나의 틀로 묶었다. Encoder가 입력 전체를 하나의 벡터로 압축하고, Decoder가 그 벡터에서 출력을 뽑아낸다. 단순하고 우아하다. 그런데 문장이 30단어를 넘어서는 순간 BLEU가 무너지기 시작한다. 왜 이 구조는 긴 문장 앞에서 취약한가, 그리고 Attention은 이 문제를 어떻게 다르게 접근했는가?
고정 벡터의 병목
Encoder의 마지막 hidden state 하나가 입력 전체의 정보를 담아야 한다. 이론적으로는 가능하다 — float32 기준 이면 약 32,768비트, 50단어 문장의 정보량( 비트)을 충분히 수용한다.
문제는 용량이 아니라 최적화다. BPTT가 에서 까지 스텝을 거슬러야 하는 탓에, 첫 번째 토큰의 정보가 까지 도달하는 경로가 너무 길다. Cho 2014b는 이를 실증으로 보여줬다.
WMT’14 En→Fr에서 문장 길이가 30단어를 넘는 순간 BLEU가 급감한다. 길이 10 근방에서 BLEU 30이던 것이 길이 60에서 10 아래로 떨어진다. 이론적 용량이 아니라 학습 dynamics가 병목이다.
Decoder의 구조적 한계도 더해진다. 매 출력 스텝 가 같은 만 참조하므로, “번역의 첫 단어는 입력의 첫 단어 정보가 필요하다”는 단서를 활용할 수 없다. 용량은 충분하나 접근이 균등하다.
Sutskever가 제안한 **역순 입력(reverse input trick)**은 이 문제의 일부를 해결한다. 입력을 순서로 넣으면 가 원래 에 가장 가까이 위치하게 되어, 번역의 첫 단어와 입력의 첫 단어 사이 경로가 단축된다. Sutskever 2014의 실험에서 +4.7 BLEU가 여기서 나왔다. 그러나 이것은 해결이 아니라 workaround다.
Bahdanau Attention — 병목을 우회하다
Bahdanau 2015는 구조를 바꾼다. Encoder의 마지막 hidden만 쓰는 대신, 모든 encoder hidden state 를 보존하고, Decoder가 매 스텝마다 필요한 위치에 집중한다.
핵심은 capacity의 변화다. Vanilla Seq2Seq의 용량은 로 고정이지만, Attention의 유효 용량은 다 — 문장이 길어질수록 함께 늘어난다.
Bahdanau attention에서 Decoder의 각 스텝은 모든 encoder state 에 접근 가능하다. 유효 용량은 로 입력 길이에 선형 비례한다.
Decoder step 의 context vector 는 의 값에 따라 임의의 를 임의의 가중치로 조합할 수 있다. 따라서 개의 -차원 벡터 전체가 정보원이 된다.
또 다른 핵심은 alignment가 학습된다는 점이다. IBM 통계 번역 모델은 alignment를 별도 단계에서 EM으로 추정했다. Bahdanau는 가 번역 손실 자체로 end-to-end 학습된다. “J’aime”를 출력할 때 “love”에 높은 를 부여하는 패턴이 alignment label 없이 나타난다.
WMT’14 En→Fr에서 Vanilla Seq2Seq + reverse 대비 +7.7 BLEU. 긴 문장에서의 개선이 특히 크다.
Luong Attention — 효율화와 Transformer로의 다리
Bahdanau의 additive attention은 표현력이 높지만 per-pair tanh 연산이 들어간다. Luong 2015는 세 가지 scoring 함수를 체계적으로 비교한다.
WMT’15 En→De 실험에서 general scoring이 BLEU 25.9로 최우수였다 — concat(Bahdanau 방식)과 동등하거나 약간 우월하면서도 계산이 빠르다. encoder state 를 미리 계산해 재사용할 수 있기 때문이다.
더 중요한 것은 Transformer와의 연결이다. Luong general을 저랭크 분해하면:
W = W_K^T W_Q 라 하면
e_{ij} = h_i^T W_K^T W_Q s_j
= (W_K h_i)^T (W_Q s_j)
= K_i^T Q_j
여기에 정규화를 추가하면 정확히 Transformer의 scaled dot-product attention이 된다. Luong general은 Query/Key 분리의 직전 단계였다.
Coverage와 Pointer — Attention의 두 확장
Attention이 도입되자 새로운 문제가 드러났다. 같은 source position을 반복해서 attend하면 번역이 반복된다. Tu 2016의 Coverage mechanism은 이력을 추적한다.
누적된 coverage가 높은 위치는 scoring 시 패널티를 받는다. 이미 번역된 구간을 다시 번역하지 않도록 attention이 새 위치를 탐색하게 된다. WMT’14에서 +1.5 BLEU.
Vinyals 2015의 Pointer Network는 다른 방향의 확장이다. TSP나 정렬 같은 조합 최적화에서는 출력이 입력의 인덱스다. 어휘 크기가 고정되지 않고 입력 길이 에 따라 바뀐다.
Attention weight 자체가 출력 확률이 된다. 입력이 5개이면 출력 어휘도 5개, 20개이면 20개 — 가변 크기를 자연스럽게 처리한다.
See 2017의 Pointer-Generator는 둘을 결합한다. 추상적 요약에서 일반 단어는 어휘에서 생성하고, 고유명사나 희귀어는 source에서 직접 복사한다.
은 학습이 자동으로 결정한다. CNN/Daily Mail 데이터셋에서 ROUGE-1 기준 +5. 이 copy mechanism의 정신은 현대 RAG(Retrieval-Augmented Generation)로 직접 이어진다 — 단일 문서에서 외부 지식 저장소 전체로 스케일이 바뀌었을 뿐이다.
트레이드오프
- Vanilla Seq2Seq: 단순하지만 긴 문장에서 정보 손실. Reverse trick은 workaround.
- Bahdanau: 용량 , 표현력 높음, additive per-pair 연산이 느림.
- Luong general: Bahdanau와 동등한 품질, 행렬 pre-compute로 30-50% 빠름.
- Coverage: 반복 번역 제거, 추가 파라미터와 loss term 필요.
- Pointer Network: 가변 출력 어휘, 조합 최적화에 강함, 제약 조건 처리는 약함.
- Pointer-Generator: OOV 해결, copy/generate 혼합으로 복잡도 증가.
Luong의 Local attention은 또 다른 축이다. 전체 위치 대신 예측된 중심 주변 윈도우만 attend하면 복잡도가 에서 로 줄어든다(). BLEU는 약 0.5 손실되지만 긴 문서에서 속도 이득이 크다. Transformer 이후 Longformer, BigBird 등의 sliding window attention이 같은 아이디어를 계승한다.
정리
- Seq2Seq의 고정 벡터 병목은 이론적 용량 문제가 아니라 최적화 문제다 — 경로가 길어 gradient가 소실된다.
- Bahdanau attention은 용량을 에서 로 늘리고, alignment를 end-to-end로 학습한다.
- Luong general은 Bahdanau와 동등한 품질을 더 빠르게 달성하고, Query/Key 분리를 통해 Transformer의 직전 단계가 된다.
- Coverage는 attention 이력으로 반복을 억제하고, Pointer-Generator는 copy mechanism으로 OOV를 해결한다. 두 아이디어는 현대 RAG 아키텍처에 계승된다.
이 계보에서 각 논문은 이전 논문의 “정확한 진단” 위에서 나왔다. Cho가 병목을 진단하고 Bahdanau가 해결했고, Luong이 효율화하고 Vaswani가 RNN 자체를 교체했다. 문제를 정확히 이름 붙이는 것이 해결의 절반이다.