1. Abstract + Introduction
기존 모델의 한계
- 당시 최첨단 모델들은 주로 RNN, LSTM, GRU 기반의 인코더-디코더 구조
- RNN - 단어를 순서대로 처리 → 병렬화 불가능 → 학습 시간 매우 긺
- 장기 의존성 문제: 문장이 길어질수록 멀리 떨어진 단어 사이의 관계를 학습하기 어려움
- CNN의 시도: CNN을 활용해 병렬화 시도(두 단어 사이 거리가 멀수록 많은 계산이 필요)
해당 논문의 제안
복잡한 구조를 다 걷어내고 'Attention' 하나에 집중
- 재귀나 컨볼루션을 완전히 제거하고, 오직 Attention 메커니즘에만 기반한 'Transformer' 구조 제안
- Self-Attention: 문장 내의 각 단어가 서로 어떤 관련이 있는지 스스로 계산하여 문맥을 파악
- Multi-Head Attention: 여러 개의 Attention을 병렬로 수행하여, 단어 간의 관계를 다양한 관점(예: 문법적 관계, 의미적 관계 등)에서 포착
- 순차적 처리가 필요 없어 병렬화 가능
성과 및 의의
- 압도적인 성능 (SOTA 달성): 2014년 WMT 영-독, 영-불 번역 태스크에서 기존 모델들을 제치고 최고의 성능(BLEU 점수)
- 학습 효율성: 기존 모델들이 수주간 학습해야 했던 성능을, 트랜스포머는 단 며칠(심지어 12시간 내외) 만에 달성
- 범용성 증명: 번역뿐만 아니라 문장 파싱 등 다른 태스크에서도 매우 우수한 성능을 보여, 모델의 일반화 능력을 입증
- 패러다임의 전환: 딥러닝 모델 설계의 중심을 RNN에서 Attention 기반 구조로 완전히 이동
2. Background
- CNN의 적용따라서 컨볼루션 연산을 NLP에 적용하는 시도를 해봄(Extended Neural GPU, ByteNet, ConvS2S): Transformer에서 개선!
- → 근데 이건 거리가 멀어지면 연산량 너무 많아짐
- 순차적 연산을 줄이는 것, 병렬화는 CNN의 특징
- self-attention트랜스포머는 RNN이나 CNN 없이 순수하게 Attention만으로 전체 구조를 설계한 최초의 모델
- 한 시퀀스 내의 서로 다른 위치에 있는 단어들을 연결하여, 해당 시퀀스의 전체적인 표현을 계산
3. Model architecture

인코더(encoder) - 토큰화된 입력 시퀀스$(x_1, ..., x_n)$를 연속적인 표현 $z = (z_1, ..., z_n)$으로 변환
디코더(decoder) - 주어진 $z$를 기반으로 출력 시퀀스$(y_1, ..., y_m)$를 한 번에 하나의 요소씩 생성
이전에 생성된 토큰을 추가 입력으로 활용하여 다음 출력 생성
3.1 Encoder and Decoder Stacks
인코더(Encoder):
- 6개의 동일한 레이어 반복
- 서브레이어 2개
- Multi-Head Self-Attention
- 입력 시퀀스 내 각 단어가 시퀀스 내 다른 모든 단어를 참조
- Position-wise Feed-Forward Network
- 각 위치에 대해 독립적으로 적용되는 두 개의 선형 변환 + ReLU
- 각 서브레이어에 잔차 연결 적용 후, 레이어 정규화 수행
- 출력: $\text{LayerNorm}(x + \text{Sublayer}(x))$
- 모델 내 모든 하위 계층과 임베딩 계층의 출력 차원
- $d_{\text{model}} = 512$로 고정
디코더(Decoder):
- 6개의 동일한 레이어 반복
- 서브레이어 3개
- Masked Multi-Head Self-Attention
- 이전까지 생성된 단어들만 참조 가능하게 미래 정보 마스킹
- Encoder-Decoder Attention
- encoder의 출력을 key와 value로 사용하고, decoder의 이전 출력을 query로 사용
- 이는 일반적인 sequence-to-sequence 모델에서의 attention과 동일
- Position-wise Feed-Forward Network
- Masked Multi-Head Self-Attention
- 각 서브레이어에 잔차 연결 적용 후, 레이어 정규화 수행
3.2 Attention
output: 어텐션 층 하나를 통과해서 나온 토큰별 벡터
구하는 방법: 시퀀스의 모든 토큰의 V와 어텐션 점수의 가중합
V: 해당 토큰의 내용
어텐션 점수: 해당 토큰과 본체 토큰이 얼마나 연관됐는지 가중치(유사도)
‘본체 토큰의 쿼리’와 ‘시퀀스 내 각 토큰들의 키’의 유사도
3.2.1 Scaled Dot-Product Attention
(입력) query (Q), key (K), value (V) → attention → (출력) weighted sum
- attention score 계산 방법:
- $\text{Attention}(Q, K, V) = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) V$
- 핵심 아이디어:
- Q와 K의 내적(dot-product)을 이용해 유사도 측정
- 유사도를 softmax로 정규화하여 가중치로 사용
- V에 이 가중치를 곱해 최종 출력 생성
- 스케일링 이유
- $d_k$ 증가 → 내적의 분산 증가 → Softmax 통과 시 값이 양극단으로 심하게 펼쳐짐 → 기울기 소실
- :따라서 $\sqrt{d_k}$로 나눠서 안정화시킴
- 왜 $\sqrt{d_k}$로 나누는가
- : 이게 내적의 표준편차니까 표준편차로 나눠서 표준화한거~
- 내적(QK)의 분산 = $d_k$
- Q와 K가 각각 평균 0, 분산 1로 돼있음
- 내적 = 요소를 각각 곱하고 싹 더함 $\text{Dot Product} = \sum_{i=1}^{d_k} q_i k_i$
- 한 쌍($q_i k_i$)의 분산:
- $Var(q_i k_i) = E[q_i^2] E[k_i^2] - (E[q_i] E[k_i])^2$
- $Var(q_i) = E[q_i^2] - (E[q_i])^2$
- $E[q_i^2] = Var(q_i) + (E[q_i])^2 = 1 + 0$
- $Var(q_i k_i) = 1 *1 - 0=1$
- 더하면 분산도 같이 더해짐, 시그마는 $d_k$번 → 1을 $d_k$번 더함 → 분산은 $d_k$
- 왜 $\sqrt{d_k}$로 나누는가

가장 일반적으로 사용되는 두 가지 어텐션 기법
- 가법 어텐션(Additive Attention)
- : 그냥 비교 대상… $Q$와 $K$를 단순히 곱하는 게 아니라, 둘을 합친(Add) 뒤에 작은 신경망(FNN + 은닉층)에 집어넣음
- 내적 어텐션(Dot-Product Attention)
- : 트랜스포머에서 쓰는 것의 원형, 여기에 $\frac{1}{\sqrt{d_k}}$ 만 추가하면 Scaled Dot-Product Attention
두 방식의 비교
- Dot-Product Attention이 더 빠르고, 메모리 사용량이 적음
- 큰 $d_k$ 값에서는 Scaling 없는 Dot-Product Attention이 성능이 떨어지고, Additive Attention이 더 우수한 성능
3.2.2 Multi-Head Attention
단일 attention만 사용하는 대신, 여러 "head"를 병렬로 사용
- Q, K, V를 여러 개의 subspace로 분할해서 여러 개의 attention 연산을 병렬로 수행
- 각각의 head는 서로 다른 정보를 학습함
- ex. 얘는 문맥, 얘는 수동태, 얘는 대명사,…
- 마지막에 head들의 출력을 concat → projection하여 최종 출력 생성
$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O$
각 head는:
$\text{head}_i = \text{Attention}(QW^Q_i, KW^K_i, VW^V_i)$
- 실제 설정: $h = 8, d_k = d_v = 64$ → 병렬 attention분산 투영 ($W^Q, W^K, W^V$): 8개의 64차원 헤드로 쪼개기결합(Concat): 64차원 8개를 다시 붙여서 512차원으로 만들기
- 최종 투영 ($W^O$): $W^O$를 곱해서 정보를 통합하고 최종 아웃풋 완성!
- 어텐션 연산: 8개의 시각으로 각자 계산
- 입력: 512차원 벡터

3.2.3 Application of Attention in our Model
Transformer는 총 3가지 방식으로 Multi-Head Attention을 사용
- Encoder-Decoder Attention → decoder의 각 위치가 encoder의 모든 위치를 참조
- $Q$ (쿼리): 이전 디코더 층에서 가져옴 (지금 내가 만들 단어가 무엇을 찾아야 하는지 묻는 역할)
- $K, V$ (키와 값): 인코더의 최종 출력에서 가져옴 (입력 문장 전체의 정보)
- 효과: 디코더가 단어를 뱉을 때마다 입력 문장의 어느 부분을 중점적으로 봐야 할지 결정하게 함
- 인코더가 분석한 입력 문장 정보를 디코더에게 전달하는 다리 역할
- Encoder Self-Attention → 각 위치가 입력 시퀀스 내 다른 모든 위치에 어텐션
- $Q, K, V$ 모두 이전 인코더 층의 출력에서 가져옴
- 범위: 인코더 내의 모든 위치가 이전 층의 모든 위치를 참고 가능
- 효과: 문장 전체를 한 번에 조망하며 각 단어의 의미를 입체적으로 완성
- 인코더 안에서 단어들이 서로를 쳐다보며 문맥을 파악하는 단계
- Decoder Masked Self-Attention → 미래 단어를 보지 않도록 마스킹하여, 현재까지의 출력에만 어텐션
- $Q, K, V$ 모두 이전 디코더 층의 출력에서 가져옴
- Auto-Regressive 특성을 지키기 위해, 현재 위치 이후(미래)의 정보는 볼 수 없게함
- 소프트맥스를 취하기 전, 미래 위치에 해당하는 값들을 $-\infty$로 밀어버려(Masking Out) 확률이 0이 되게 함
- 디코더가 이미 생성한 단어들을 토대로 다음 단어를 준비하는 단계
3.3 Position-wise Feed-Forward Networks
각 encoder와 decoder 레이어에는 attention 서브레이어 외에 **position-wise feed-forward network (FFN)**가 하나씩 있다.
구조
- FFN은 시퀀스의 각 위치에 독립적으로 동일한 두 개의 선형 변환을 적용하는 구조
- 표현식
- $x$에 첫 번째 선형 변환 $W_1$ 적용
- ReLU 활성화 함수 적용
- 두 번째 선형 변환 $W_2$ 적용
- $\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$
- 이 구조는 사실상 커널 크기 1의 1D convolution과 수학적으로 동일한 연산!FFN도 단어의 순서는 건드리지 않고 그 단어가 가진 512개의 특징들만 요리조리 섞어주는 역할
- 이미지 처리에서 1x1 컨볼루션이 공간 정보는 그대로 두고 채널(특징)만 섞어주는 것처럼,
하이퍼파라미터
- 입력/출력 차원 $d_{model} = 512$
- 내부(hidden) 차원 $d_{ff} = 2048$
- 즉, 512차원 → 2048차원 → 512차원으로 변환되는 두 단계 네트워크
3.4 Embeddings and Softmax
- 임베딩과 벡터 변환 ($d_{\text{model}}$)
- 인코더에 들어가는 입력 토큰과 디코더에 들어가는 출력 토큰 모두 학습된 임베딩 과정을 거쳐 $d_{\text{model}}$ 크기의 벡터로 변환
- 가중치 공유 (Weight Sharing) 모델 내부에서 세 군데의 가중치 행렬을 똑같은 것으로 사용이유: 모델의 파라미터(용량)를 줄여서 효율성을 높이고, 같은 단어라면 입력될 때나 출력될 때나 비슷한 의미적 공간($d_{\text{model}}$)에 머물게 하기 위해서
- 공유 지점: (1) 입력 임베딩, (2) 출력 임베딩, (3) 디코더 끝단의 선형 변환(Linear transformation).
- 임베딩에 레이어에서 나온 값들에 $\sqrt{d_{\text{model}}}$ 를 곱하는 이유
- 포지셔널 인코딩 값들은 평균적으로 1 근처, 임베딩 값들도 너무 작으면 위치 정보에 단어의 의미 정보가 묻힐 수 있음
- 임베딩 값의 크기를 키워줌으로써, 단어의 의미 정보가 위치 정보보다 더 지배적인 영향력을 갖도록 밸런스를 맞춰줌
- 왜 하필 $\sqrt{d_{\text{model}}}$ 일까?얘는 보통 입력차원($d_{model}$)에 반비례하게 분산을 잡는 경우가 많아서 분산이 $1/d_{\text{model}}$
- → $\sqrt{d_{\text{model}}}$을 곱함으로써 벡터 전체의 평균적인 크기(에너지)가 1이 됨?
- 임베딩 벡터를 처음에 초기화할 때 Xavier 초기화를 쓰는 경우가 많은데
- 이유: 뒤에서 더해질 포지셔널 인코딩 때문
3.5 Postional Encoding
RNN, CNN 대신 토큰의 순서 정보를 인코딩할 수단
Transformer는 사인과 코사인함수를 이용한 고정된 포지셔널 인코딩을 사용함
$\text{PE}{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d{\text{model}}}}}\right)$
$\text{PE}{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d{\text{model}}}}}\right)$
- $pos$ : 단어의 위치
- $i$: 임베딩 차원의 인덱스
- 각 차원마다 서로 다른 주기(주파수)를 갖는 사인/코사인 값을 사용함
- 이 값을 임베딩 벡터에 더해 모델에 순서 정보를 주입
왜 사인/코사인인가?
- 다양한 주기를 가진 사인/코사인 조합을 통해 위치 간 관계를 쉽게 학습할 수 있음
- 아날로그시계의 시침, 분침, 초침 처럼 각 주기가 따로 돌아가면 두 주기의 조합으로 더 많은 관계를 매핑할 수 있음
- 선형 함수로 표현 가능$pos+k$번째 위치의 값은 $pos$번째 값에 특정 행렬을 곱하는 것만으로 계산가능상대적 거리 정보도 포함 가능 → 일반화에 유리
- → “현재 위치($pos$)에서 $k$만큼 떨어진 곳($pos+k$)"의 정보를 찾을 때, 일정한 선형 변환만으로 계산 가능
- 삼각함수의 덧셈 정리: $\sin(a+b) = \sin a \cos b + \cos a \sin b$
- 훈련 데이터보다 더 긴 시퀀스에도 extrapolation 가능
- 위치 정보가 일정한 패턴 안에서 반복되고 확장되기 때문에, 훈련 때보다 더 긴 문장이 들어와도 그 상대적인 위치 관계를 유추해서 처리할 수 있음
실험적 비교
- 학습된 위치 임베딩과 비교 실험도 진행
- 결과적으로 둘 다 성능은 거의 동일, 그러나 고정형(sinusoidal)이 더 일반화성 측면에서 유리하다고 판단
4. Why Self-Attention
Self-Attention의 3가지 주요 장점
- 계산 복잡도
- 병렬화 가능
- 장거리 의존성 학습 경로 길이
1. 계산 복잡도
구조 Layer당 복잡도 (n: 시퀀스 길이, d: 차원)
| Self-Attention | $O(n^2 \cdot d)$ |
| Self-Attention (restricted) | $O(r \cdot n \cdot d)$ |
| RNN | $O(n \cdot d^2)$ |
| CNN (kernel size = k) | $O(k \cdot n \cdot d^2)$ |
- 시퀀스 길이가 짧고 차원이 클 경우, self-attention이 훨씬 효율적
- 특히 대부분의 NLP 모델에서는 $d \gg n$이므로 self-attention이 유리함
계산 효율성 한계 극복 방안
- 출력 위치를 기준으로 주변 $r$개의 단어만 보도록 제한
- 계산량은 줄어들지만, 한 번에 문장 끝까지 도달하지 못하므로 최대 경로 길이가 $O(n/r)$로 늘어남
2. 병렬화
- RNN은 이전 단계 출력에 의존 → 병렬화 불가능
- CNN과 Self-Attention은 모든 위치를 동시에 계산 가능 → 병렬화 가능
- Transformer는 RNN 없이 self-attention만 사용하므로 훈련 속도가 빠름
3. 장거리 의존성 학습 경로
구조 최대 경로 길이 (두 위치 간 정보 이동 거리)
| Self-Attention | $O(1)$ ← 모든 위치가 바로 연결됨 |
| Self-Attention (restricted) | $O(n/r)$ |
| RNN | $O(n)$ |
| CNN | $O(\log_k n)$ (dilated convolution 사용 시) |
- Self-attention은 멀리 떨어진 단어 간 연결이 단 한 번의 연산으로 가능
- 따라서 장기 의존성을 훨씬 쉽게 학습할 수 있음
+) 모델의 해석 가능성
어텐션이 단순히 성능만 좋은 게 아니라, 모델이 "왜 그렇게 생각했는지" 보여줄 수 있음
- 어텐션 분포 분석: 모델이 어떤 단어에 집중하는지 시각화 가능
- 헤드의 분업: 각 어텐션 헤드는 서로 다른 작업(문법 구조 파악, 의미 관계 파악 등)을 수행하도록 스스로 학습
- 언어적 패턴: 문장의 구문론적, 의미론적 구조를 잘 반영하는 패턴이 나타남
5. Training
학습 설정
5.1 Training Data and Batching
- 영어-독일어(WMT 2014): 약 450만 문장 쌍
- 영어-프랑스어(WMT 2014): 약 3600만 문장 쌍
- 서브워드 분할 사용 (BPE, Byte-Pair Encoding)
- 영어-독일어: 약 37,000개의 공유 토큰
- 영어-프랑스어: 32,000개의 word-piece
- Batch 구성 방식: 문장 길이 비슷한 것끼리 묶음
- 한 배치당 약 25,000개의 source & target 토큰 포함
5.2 Hardware and Schedule
- 하드웨어: 8개의 NVIDIA P100 GPU 사용
- 학습 시간:
- Base model: 100,000 step (약 12시간)
- Big model: 300,000 step (약 3.5일)
- Base step time: 0.4초 / Big step time: 1.0초
5.3 Optimizer
- Adam Optimizer 사용
- $\beta_1 = 0.9, \beta_2 = 0.98, \epsilon = 10^{-9}$
- 학습률 스케줄링 공식:
- $\text{lrate} = d_{\text{model}}^{-0.5} \cdot \min(\text{step}^{-0.5}, \text{step} \cdot \text{warmup}^{-1.5})$
- 초반에는 선형 증가, 이후에는 $\text{step}^{-0.5}$로 감소
- warmup step: 4000
5.4 Regularization
Transformer는 세 가지 정규화 방법을 사용
- Residual Dropout
- 각 서브레이어 출력에 dropout 적용 (P=0.1)
- positional encoding과 임베딩 합에도 dropout 적용
- Label Smoothing
- 정답 확률을 100%로 하지 않고, 일부 분산시켜 일반화 성능 향상
- 값: $\epsilon_{ls} = 0.1$
- Weight Sharing (본문에 정규화로 분류되진 않지만 효과 있음)
- 입력 임베딩 / 출력 임베딩 / softmax projection 간 가중치 공유
6. Results
6.1 Machine Translation
- 평가 기준: BLEU 점수 (기계 번역의 품질 평가 지표)
| WMT 2014 EN-DE | 27.3 | 28.4 | 기존 최고 모델보다 2.0+ 점 향상 |
| WMT 2014 EN-FR | 38.1 | 41.8 | 단일 모델 기준 새로운 최고 성능 |
🔧 기타 설정:
- checkpoint averaging: 마지막 5개 또는 20개 체크포인트 평균
- beam search 사용 (beam size=4, length penalty α=0.6)
6.2 Model Variations

- Attention Head 수 변화 (A)
- 너무 적어도, 너무 많아도 성능 저하
- 기본값: 8개 head (dk=dv=64)
- Key/Value 차원 변경 (B)
- dk, dv가 작아질수록 성능 감소 → dot-product compatibility 계산이 어려워짐
- 모델 크기 변화 (C)
- layer 수 증가 시 BLEU 증가
- 큰 모델일수록 성능 향상
- Feedforward 내부 차원 변화 (C)
- d_ff 늘리면 성능 향상 (512→2048, 4096 등)
- Dropout 비율 변화 (D)
- 적절한 dropout은 과적합 방지에 효과적
- Positional Encoding 방식 (E)
- 고정형(sinusoidal)과 학습형(learned)의 성능 거의 동일
6.3 English Constituency Parsing(구문 분석 성능)
- Penn Treebank 데이터셋 (WSJ) 사용
- Transformer (4-layer, d_model=1024)는:
- 훈련 데이터만 사용: F1 = 91.3
- 준지도 학습 시: F1 = 92.7
- 이는 기존 대부분의 parsing 모델보다 높은 점수이며,
- 특히 작은 데이터셋에서도 강력한 일반화 성능을 보여줌
7. Conclusion
핵심 성과
- Transformer는 기존의 RNN, CNN 기반 시퀀스 모델을 대체하는 첫 구조로,
- Multi-Head Self-Attention만을 사용하여 설계됨
- 복잡한 recurrence 없이도 높은 성능 달성
- 기계 번역 작업에서:
- 기존 최고 성능을 단일 모델로 초과
- 훈련 시간은 기존보다 훨씬 짧음
- 예: 3.5일 학습으로 EN-FR에서 BLEU 41.8 달성
- 구문 분석 등 다른 태스크에도 잘 일반화됨 → 범용적 구조로 가능성 증명
미래 연구 방향
- 다양한 입력/출력 형태의 태스크로 확장 예정
- 예: 이미지, 오디오, 비디오 등
- Local / Restricted Attention 연구
- 긴 시퀀스에 대해 계산량 줄이는 방법 모색
- 더 비순차적인(sequence-less) 생성 방식 연구
- 병렬성의 한계를 더 줄이기 위한 시도