이 논문을 간단하게 요약하면, seq2seq 모델에서 당연하게 쓰이던 recurrence(RNN)와 convolution을 전부 제거하고
attention 연산만으로 encoder-decoder를 구성한 Transformer를 제안한 논문이다.
RNN의 근본 문제는 ht가 ht−1에 의존하는 순차성 때문에 시퀀스 내부에서 병렬화가 불가능하다는 것이다.
Transformer는 모든 위치를 한번에 attention으로 연결해서 전체 시퀀스를 병렬로 계산하고,
임의의 두 위치 사이의 경로 길이(path length)도 O(1)로 만든다.
핵심 부품은 3개다: Scaled Dot-Product Attention (dk1 스케일링이 왜 필요한지 아래에서 증명),
Multi-Head Attention (attention을 h개의 저차원 subspace로 쪼개서 병렬 수행),
Sinusoidal Positional Encoding (순서 정보가 없는 attention에 위치 정보 주입, 상대 위치가 선형 변환으로 표현됨을 증명).
WMT14 English→German에서 BLEU 28.4 (당시 SOTA 대비 +2.0 이상), English→French에서 41.8을 달성했고,
학습 비용은 8×P100으로 3.5일 — 기존 SOTA들의 수분의 1 수준이다.
이후 BERT, GPT, ViT, 그리고 diffusion model의 UNet 속 attention까지 전부 이 논문의 부품을 쓰고 있으므로
딥러닝 논문 계보에서 가장 영향력이 큰 논문 중 하나다.
[1] Intro & Background
RNN, LSTM[13], GRU는 language modeling, machine translation 같은 sequence modeling에서 SOTA로 확고하게 자리잡고 있었다.
recurrent 모델은 입력/출력의 위치를 따라 계산을 나눠서 진행한다. 즉 위치 t의 hidden state ht는
이전 hidden state ht−1과 현재 입력의 함수로 생성된다.
이런 본질적인 순차성 때문에 학습 샘플 내부에서 병렬화가 불가능하고, 이는 메모리 제약 때문에 batch로도
못 묶는 긴 시퀀스에서 치명적이다.
factorization trick[21]이나 conditional computation[32] 같은 연구들이 계산 효율을 개선했지만 순차성이라는
근본적인 제약은 그대로 남아있다.
Attention mechanism 자체는 이미 seq2seq의 필수 부품이었다[2, 19]. 입력/출력의 거리에 상관없이 dependency를
모델링할 수 있게 해주지만, 거의 모든 경우 RNN에 붙어서 사용되고 있었다.
순차 계산을 줄이려는 다른 시도로 Extended Neural GPU[16], ByteNet[18], ConvS2S[9]가 있는데 전부 CNN 기반이다.
이 모델들은 임의의 두 위치를 연결하는 데 필요한 연산 수가 거리에 따라 증가한다. (ConvS2S는 선형, ByteNet은 로그)
그래서 멀리 떨어진 위치 사이의 dependency를 배우기 어렵다.
Transformer는 이걸 상수 O(1)로 줄인다. (대신 attention-weighted 평균 때문에 유효 해상도가 줄어드는 비용이
있는데, 이건 Multi-Head Attention으로 상쇄한다)
Self-attention(intra-attention)은 한 시퀀스 내부의 위치들끼리 attention 해서 시퀀스의 representation을 계산하는
것으로, reading comprehension, summarization 등에서 이미 사용되고 있었다[4, 27].
Transformer는 RNN/CNN 없이 오로지 self-attention만으로 입력과 출력의 representation을 계산하는 최초의 transduction 모델이다.
[2] Model Architecture — 부품 하나하나 뜯어보기
2.1 전체 구조 (Encoder-Decoder)
Encoder: 동일한 layer N=6개 스택. 각 layer는 2개의 sub-layer로 구성된다.
Multi-Head Self-Attention
Position-wise Feed-Forward Network
Decoder: 동일한 layer N=6개 스택. 각 layer는 3개의 sub-layer로 구성된다.
Masked Multi-Head Self-Attention (미래 위치를 못 보게 masking)
logit의 스케일이 커지면 softmax는 최댓값 위치만 1인 one-hot에 가까워진다. 이때
si≈1인 곳은 si(1−si)≈0, si≈0인 곳도 si(⋯)≈0이 되어
Jacobian의 모든 원소가 0으로 붕괴한다. 즉 attention 가중치로 gradient가 흐르지 않아 학습이 안 된다.
스케일링은 이 포화 영역에 진입하는 것을 막는 장치다. ■
Masking: decoder self-attention에서 위치 i가 j>i를 참조하지 못하게, softmax 전에 해당 logit을
−∞로 설정한다. (softmax 후 가중치가 정확히 0이 됨) 이것이 auto-regressive 성질을 보존한다.
2.3 Multi-Head Attention
dmodel 차원 전체로 attention 한 번을 하는 대신, 서로 다른 학습된 projection으로 h번 쪼개서 attention을
병렬 수행하고 결과를 concat 한다.
왜 쪼개는가: 단일 attention은 softmax 가중평균 하나로 정보를 압축해버린다(averaging이 표현력을 깎음).
head를 나누면 각 head가 서로 다른 representation subspace에서 서로 다른 위치 관계를 볼 수 있다.
(실제로 학습된 head들을 시각화하면 구문 구조, 장거리 의존성 등 다른 역할을 하는 것이 관찰됨)
계산량은 공짜: head당 차원을 1/h로 줄였기 때문에 전체 계산량은 full-dimension 단일 attention과 같다.
파라미터 수를 세보면 MHA 하나당 WQ,WK,WV,WO 각각 dmodel2 (h개 head의 projection을 합치면
h×dmodel×dk=dmodel2)이므로 총 4dmodel2=4×5122≈1.05M개다.
2.4 Attention이 쓰이는 3곳
위치
Q
K, V
Mask
역할
Encoder self-attn
encoder 이전 layer
encoder 이전 layer
✗
입력 문장 내부의 모든 위치 참조
Decoder self-attn
decoder 이전 layer
decoder 이전 layer
✓ (미래 차단)
지금까지 생성된 출력 참조
Encoder-Decoder cross-attn
decoder
encoder 최종 출력
✗
번역 원문 참조 (기존 seq2seq attention 역할)
2.5 Position-wise Feed-Forward Network
각 위치마다 독립적으로, 동일하게 적용되는 2-layer MLP.
FFN(x)=max(0,xW1+b1)W2+b2
안쪽 차원은 dff=2048로 dmodel의 4배다. (이 4배 비율도 이후 모델들의 표준이 됨)
kernel size 1짜리 convolution 2번으로 볼 수도 있다. 파라미터는 layer당 2×512×2048≈2.1M개로
사실 attention보다 FFN이 파라미터를 더 많이 먹는다.
2.6 Embedding과 Softmax의 Weight 공유
입력 embedding, 출력 embedding, softmax 직전 linear 이 3개의 weight 행렬을 공유한다[30].
embedding layer에서는 weight에 dmodel을 곱해준다.
(공유된 행렬이 softmax용 스케일에 맞춰져 있어서, embedding으로 쓸 때는 positional encoding과 스케일을 맞추기 위한 보정)
2.7 Positional Encoding
attention은 집합 연산이라 순서 개념이 전혀 없다. 그래서 위치 정보를 embedding에 직접 더해준다.
논문은 주파수가 기하급수적으로 변하는 sin/cos 함수를 사용한다. (pos는 위치, i는 차원 인덱스)
학습 때는 정답 시퀀스 전체를 넣고 masking으로 병렬 학습(teacher forcing)하지만,
추론은 한 토큰씩 순차 생성이다: <bos>에서 시작해 생성된 토큰을 다시 decoder 입력에 붙인다.
이때 이전 스텝의 Key/Value는 변하지 않으므로 캐싱(KV cache) 하면 스텝당 새 토큰의 Q 계산만 하면 된다.
지금 LLM inference의 KV cache가 바로 이 구조에서 나온 것이다.
즉 “Transformer는 학습은 병렬, 생성은 여전히 순차”라는 비대칭이 있다 — RNN의 순차성을 학습에서만
제거한 셈이고, 이 생성 병목은 이후 speculative decoding 등의 연구 주제가 된다.
[3] Why Self-Attention
self-attention을 RNN/CNN과 3가지 기준으로 비교한다: layer당 계산 복잡도, 순차 연산의 최소 횟수(병렬화 가능성),
네트워크 내 장거리 의존성의 최대 경로 길이. (n: 시퀀스 길이, d: 차원, k: 커널 크기, r: 제한된 윈도우 크기)
Layer Type
Complexity per Layer
Sequential Ops
Maximum Path Length
Self-Attention
O(n2⋅d)
O(1)
O(1)
Recurrent
O(n⋅d2)
O(n)
O(n)
Convolutional
O(k⋅n⋅d2)
O(1)
O(logkn)
Self-Attention (restricted)
O(r⋅n⋅d)
O(1)
O(n/r)
경로 길이가 짧을수록 장거리 의존성 학습이 쉽다는 것이 비교의 핵심 논리다. self-attention은 어떤 두 위치든
한 번의 attention으로 직접 연결된다.
계산 복잡도는 n<d일 때 self-attention이 RNN보다 빠르다. 기계번역에서 쓰는 sentence-piece 시퀀스는
대부분 n<d=512라 실제로 유리하다.
반대로 n이 아주 길어지면 O(n2)이 병목이 된다 — 논문도 restricted self-attention(주변 r개만 참조)을
언급하고 있고, 이 O(n2) 문제는 이후 Sparse/Linear attention, FlashAttention 등 수많은 후속 연구를 낳는다.
부가 효과로 attention 가중치를 시각화하면 해석 가능성도 얻는다. (head별로 구문/의미 역할 분화가 관찰됨)
Optimizer: Adam (β1=0.9, β2=0.98, ϵ=10−9)에 다음 learning rate 스케줄을 사용한다.
lrate=dmodel−0.5⋅min(step−0.5,step⋅warmup−1.5)
warmup=4000 step까지 선형 증가, 이후 step−0.5로 감소하는 스케줄이다. 두 구간이 step=warmup에서
정확히 만나도록 −1.5 지수가 맞춰져 있다. (Post-LN Transformer는 초반 learning rate가 크면 발산하기 쉬워서
이 warmup이 사실상 필수라는 것이 이후 연구들에서 밝혀진다)
Regularization 3종:
Residual Dropout (Pdrop=0.1): 각 sub-layer 출력에, 그리고 embedding + PE 합에도 적용.
Label Smoothing (ϵls=0.1)[36]: 정답에 1−ϵ, 나머지에 ϵ을 분배한 soft target을 사용.
perplexity는 나빠지지만(모델이 더 unsure 해짐) accuracy와 BLEU는 좋아진다.
Checkpoint Averaging: 마지막 체크포인트 하나가 아니라 최근 체크포인트들의 weight를 평균낸 모델로
평가한다 (base: 마지막 5개, big: 마지막 20개, 10분 간격 저장). 공짜로 BLEU가 오르는 고전 트릭으로,
이후 NMT/LLM 학습(가중치 평균, EMA)에서도 계속 쓰인다.
Decoding: beam search (beam size 4, length penalty α=0.6), 최대 출력 길이는 입력 + 50이되
가능하면 조기 종료.
[5] Results
5.1 Machine Translation (WMT 2014)
Model
EN→DE BLEU
EN→FR BLEU
Training Cost (FLOPs)
ByteNet
23.75
-
-
ConvS2S
25.16
40.46
9.6×1018
GNMT + RL
24.6
39.92
2.3×1019
ConvS2S Ensemble
26.36
41.29
1.2×1021
Transformer (base)
27.3
38.1
3.3×1018
Transformer (big)
28.4
41.8
2.3×1019
big 모델이 이전의 앙상블 모델들까지 포함해서 전부 이기고, 학습 비용은 오히려 몇 분의 1 수준이다.
base 모델조차 이전 single 모델 전부를 EN→DE에서 이긴다.
inference는 beam search (beam size 4, length penalty α=0.6) 사용.
5.2 Ablation (Table 3)
base 모델에서 하나씩 바꿔가며 EN→DE dev set(newstest2013)의 perplexity/BLEU 변화를 측정한다. 주요 행 발췌:
변경 내용
PPL (dev)
BLEU (dev)
base (h=8)
4.92
25.8
(A) h=1
5.29
24.9
(A) h=4
5.00
25.5
(A) h=16
4.91
25.8
(A) h=32
5.01
25.4
(D) dropout 제거 (Pdrop=0)
5.77
24.6
(D) label smoothing 제거
4.67
25.3
(E) learned positional embedding
4.92
25.7
big
4.33
26.4
행별로 읽어보면:
head 수 (A): 1개면 BLEU가 0.9 떨어지고, 32개로 너무 늘려도 오히려 하락 — h=8∼16이 sweet spot.
head가 “여러 관계를 병렬로 본다”는 가설의 정량 근거다.
dk 축소 (B): dk를 줄이면 품질 하락 — Q·K 유사도 계산이 그렇게 만만한 문제가 아니라는 해석.
모델 크기 (C): dmodel, dff를 키울수록 일관되게 좋아진다. (스케일링의 초기 증거)
dropout (D): 제거하면 PPL 5.77로 명확한 overfitting.
label smoothing (D): 제거하면 PPL은 가장 좋아지는데(4.67) BLEU는 떨어진다(25.3) —
“PPL과 생성 품질은 다른 지표”임을 보여주는 유명한 행이다.
learned PE (E): sinusoidal과 사실상 동일 (4.92/25.7). 그래서 외삽 가능성을 보고 sinusoidal 선택.
정리하면 Transformer의 성능은 특정 트릭이 아니라 구조 전체에서 나오고, 크기를 키우면 더 좋아진다.
5.3 English Constituency Parsing (일반화 확인)
번역이 아닌 구문 분석에도 거의 그대로(4-layer, dmodel=1024) 적용해봤다.
WSJ만 학습: F1 91.3 — task-specific 튜닝 없이 대부분의 기존 모델을 이김.
semi-supervised: F1 92.7.
출력이 입력보다 길고 강한 구조 제약이 있는 task에서도 동작한다는 일반화 증거.
[6] 개인적인 생각
이 논문의 부품들이 이후 어디로 이어졌는지 계보를 그려보면:
Encoder만 떼서 masked LM으로 학습 → BERT
Decoder만 떼서 auto-regressive LM으로 학습 → GPT 시리즈
이미지를 패치 시퀀스로 취급 → ViT
diffusion model의 UNet 안 attention block도 이 논문의 multi-head attention이다.
(Diffusion Models Beat GANs 리뷰의 [3]장에서 뜯었던
32/16/8 해상도 attention이 정확히 이 부품)
지금 시점에서 다시 읽으면 “당시엔 몰랐던 복선”이 많다. ablation의 “키우면 더 좋아진다”는 한 줄이 scaling law로,
sinusoidal PE의 회전 행렬 해석이 RoPE로, O(n2) 병목이 FlashAttention/linear attention 연구로 이어졌다.
수식 자체는 어렵지 않은데(사실상 행렬곱 + softmax가 전부), “왜 이렇게 설계했는가” 에 대한 논증
(scaling의 분산 논리, path length 비교, head 분리의 subspace 논리)이 이 논문의 진짜 가치라고 생각한다.
읽을 때 결과 표보다 Section 4 (Why Self-Attention)를 곱씹는 것을 추천.
Reference
[1] J. Ba et al., “Layer Normalization” (2016)
[2] D. Bahdanau et al., “Neural Machine Translation by Jointly Learning to Align and Translate” (2015)
[9] J. Gehring et al., “Convolutional Sequence to Sequence Learning” (ConvS2S, 2017)
[11] K. He et al., “Deep Residual Learning for Image Recognition” (ResNet, 2016)
[18] N. Kalchbrenner et al., “Neural Machine Translation in Linear Time” (ByteNet, 2017)
[19] M. Luong et al., “Effective Approaches to Attention-based Neural Machine Translation” (2015)
[30] O. Press & L. Wolf, “Using the Output Embedding to Improve Language Models” (2017)
[36] C. Szegedy et al., “Rethinking the Inception Architecture for Computer Vision” (Label Smoothing, 2016)