들어가며
2017년 Google Brain 팀이 발표한 “Attention Is All You Need” (Vaswani et al., NeurIPS 2017)는 현대 딥러닝 역사에서 가장 영향력 있는 논문 중 하나입니다. 이 논문은 RNN과 CNN에 의존하던 시퀀스 모델링 패러다임을 완전히 뒤바꾸며, Self-Attention 메커니즘만으로 시퀀스-투-시퀀스 변환을 수행하는 Transformer 아키텍처를 제안했습니다.
GPT, BERT, ViT, Stable Diffusion, ChatGPT까지 — 오늘날 AI의 거의 모든 주류 모델은 Transformer 위에 세워져 있습니다.
이 글에서는 원 논문의 핵심 기여, 아키텍처 구성 요소, 수학적 원리, 실험 결과, 그리고 후속 연구에 미친 영향까지 깊이 있게 분석합니다.
논문 기본 정보
| 항목 | 내용 |
|---|---|
| 제목 | Attention Is All You Need |
| 저자 | Ashish Vaswani, Noam Shazeer, Niki Parmar 외 |
| 소속 | Google Brain, Google Research, University of Toronto |
| 학회 | NeurIPS 2017 |
| 인용 수 | 130,000+ (2026년 기준) |
| 코드 | tensor2tensor |
핵심 기여 (Key Contributions)
이 논문의 핵심 기여는 세 가지로 요약됩니다:
- 순환 구조 완전 제거: RNN/LSTM 없이 Self-Attention만으로 시퀀스 의존성을 모델링
- 병렬화 가능한 아키텍처: 순차 연산이 필요 없어 학습 속도가 획기적으로 향상
- 기계 번역 SOTA 달성: WMT 2014 영→독, 영→불 번역에서 당시 최고 성능 기록
논문의 제목 자체가 핵심 메시지입니다: “Attention이 전부다.” RNN도, CNN도 필요 없이 Attention 메커니즘 하나로 충분하다는 과감한 주장을 실험으로 증명했습니다.
기존 방법론의 한계
당시 시퀀스 모델링의 주류였던 RNN 기반 모델들의 근본적 문제:
| 문제 | 설명 |
|---|---|
| 순차적 연산 | 를 계산하려면 이 필요 → GPU 병렬화 불가 |
| 장거리 의존성 | 시퀀스 길이가 길어지면 그래디언트 소실/폭발 |
| 학습 속도 | 긴 시퀀스의 순차 처리로 인한 학습 병목 |
| 메모리 제약 | 모든 시간 스텝의 hidden state를 순차적으로 유지 |
Convolution 기반 접근(ConvS2S, ByteNet)은 병렬화를 해결했지만, 먼 위치 간 의존성을 포착하려면 많은 레이어가 필요했습니다. Transformer는 단일 Attention 연산으로 임의의 두 위치를 직접 연결하여 이 문제를 근본적으로 해결합니다.
아키텍처 상세 분석
Transformer는 인코더-디코더 구조를 따르며, 각각 동일한 레이어를 번 쌓아 올립니다 (논문에서 ).
전체 구조 개요
입력 시퀀스 → [Embedding + Positional Encoding]
↓
Encoder × N
(Self-Attention + FFN)
↓
Encoder 출력
↓
출력 시퀀스 → [Embedding + Positional Encoding]
↓
Decoder × N
(Masked Self-Attention + Cross-Attention + FFN)
↓
Linear + Softmax → 예측
Scaled Dot-Product Attention
Transformer의 핵심 연산입니다. 입력으로 Query, Key, Value 세 행렬을 받아 가중합을 계산합니다.
각 항의 의미:
- : Query 행렬 — “나는 어떤 정보를 찾고 있는가”를 표현
- : Key 행렬 — “나는 어떤 정보를 갖고 있는가”를 표현
- : Value 행렬 — Key에 대응하는 실제 정보
- : Key 벡터의 차원 수
- : 스케일링 팩터 — dot product 값이 커지는 것을 방지
왜 로 나누는가? 가 클 때 의 값이 매우 커져서 softmax가 극단적인 값(거의 0 또는 1)을 출력하게 됩니다. 이로 인해 그래디언트가 소실되는 문제를 스케일링으로 해결합니다.
구체적으로, 와 의 각 성분이 평균 0, 분산 1인 독립 확률변수라고 가정하면:
따라서 로 나누면 분산이 1로 정규화되어 softmax가 안정적으로 동작합니다.
Multi-Head Attention
단일 Attention 대신 여러 개의 Attention을 병렬로 수행하는 것이 Multi-Head Attention입니다.
각 항의 의미:
- : 번째 헤드의 Query 투영 행렬
- : 번째 헤드의 Key 투영 행렬
- : 번째 헤드의 Value 투영 행렬
- : 출력 투영 행렬
- : 헤드 수 (논문 기본값)
- : 각 헤드의 차원
Multi-Head의 직관: 각 헤드가 서로 다른 관점에서 정보를 추출합니다. 예를 들어, 어떤 헤드는 구문적 관계를, 다른 헤드는 의미적 유사성을, 또 다른 헤드는 위치 관계를 학습할 수 있습니다.
연산량 비교: 전체 차원()에서 단일 Attention을 수행하는 것과, 8개 헤드로 나눠(각 ) 병렬 수행하는 것의 총 연산량은 거의 동일합니다. 즉, 추가 비용 없이 표현력을 높이는 구조입니다.
Transformer에서 Attention이 사용되는 세 가지 방식
| 위치 | Q 출처 | K, V 출처 | 역할 |
|---|---|---|---|
| Encoder Self-Attention | 인코더 입력 | 인코더 입력 | 입력 시퀀스 내 관계 파악 |
| Decoder Masked Self-Attention | 디코더 입력 | 디코더 입력 | 미래 토큰 마스킹 + 출력 내 관계 |
| Encoder-Decoder Cross-Attention | 디코더 | 인코더 출력 | 소스-타겟 정렬 (번역의 핵심) |
Position-wise Feed-Forward Network (FFN)
Attention 이후 각 위치에 독립적으로 적용되는 2층 완전연결 네트워크입니다:
- 내부 차원 (입력/출력 의 4배)
- 위치마다 동일한 가중치 적용, 레이어마다 다른 가중치
- ReLU 활성화 함수 사용
이 구조는 “1×1 convolution 두 번”으로도 해석할 수 있으며, Attention이 토큰 간 정보 교환을 담당한다면 FFN은 각 토큰의 표현을 비선형 변환하는 역할을 합니다.
Positional Encoding
Transformer는 순환 구조가 없으므로 토큰의 위치 정보를 별도로 주입해야 합니다. 논문은 사인/코사인 함수를 사용한 고정 인코딩을 제안합니다:
- : 시퀀스에서의 위치 (0, 1, 2, …)
- : 차원 인덱스 (0부터 까지)
- 짝수 차원은 , 홀수 차원은 사용
이 설계의 핵심 장점:
- 상대 위치 표현 가능: 를 의 선형 변환으로 표현 가능
- 학습 데이터보다 긴 시퀀스에 일반화: 고정 함수이므로 임의 길이에 적용 가능
- 학습 가능 인코딩과 유사한 성능: 논문에서 학습 기반과 거의 동일한 결과 확인
Residual Connection과 Layer Normalization
각 서브레이어(Attention, FFN)에 잔차 연결(Residual Connection) 과 레이어 정규화(Layer Normalization) 가 적용됩니다:
이 구조는 다음과 같은 이점을 제공합니다:
- 그래디언트 흐름 개선: 깊은 네트워크에서도 안정적 학습
- 학습 안정화: Layer Normalization이 각 레이어 출력의 분포를 정규화
- 빠른 수렴: 잔차 연결이 최적화 공간을 평탄하게 만듦
Decoder의 Masked Self-Attention
디코더는 Auto-Regressive하게 동작해야 하므로, 현재 위치 이후의 토큰을 참조하면 안 됩니다. 이를 위해 마스킹을 적용합니다:
마스크 행렬 은 미래 위치에 를 넣어 softmax 후 해당 위치의 가중치가 0이 되게 합니다:
모델 하이퍼파라미터
논문은 두 가지 설정의 모델을 실험합니다:
| 하이퍼파라미터 | Transformer (base) | Transformer (big) |
|---|---|---|
| (레이어 수) | 6 | 6 |
| 512 | 1024 | |
| 2048 | 4096 | |
| (헤드 수) | 8 | 16 |
| 64 | 64 | |
| 드롭아웃 | 0.1 | 0.3 |
| 파라미터 수 | 65M | 213M |
학습 전략
옵티마이저와 Learning Rate Schedule
Adam 옵티마이저(, , )를 사용하며, Warmup + Inverse Square Root Decay 스케줄을 적용합니다:
lr = d_{\text{model}}^{-0.5} \cdot \min(\text{step}^{-0.5}, \text{step} \cdot \text{warmup_steps}^{-1.5})
- 처음 \text{warmup_steps} = 4000 스텝 동안 학습률을 선형으로 증가
- 이후 스텝의 역제곱근에 비례하여 감소
이 “Noam” 스케줄러는 이후 수많은 Transformer 학습에서 표준으로 채택되었으며, 현재도 변형이 널리 사용됩니다.
정규화 기법
| 기법 | 적용 방식 |
|---|---|
| Residual Dropout | 각 서브레이어 출력에 적용 () |
| Attention Dropout | Attention 가중치에 적용 |
| Embedding Dropout | 입력 임베딩 + Positional Encoding 합에 적용 |
| Label Smoothing | , perplexity는 높이지만 BLEU는 향상 |
Label Smoothing 상세
Label Smoothing은 정답 레이블을 원-핫 벡터 대신 소프트 타겟으로 바꿉니다:
- : 스무딩 계수
- : 어휘 크기
- 모델의 과신(overconfidence)을 방지하여 일반화 성능 향상
실험 결과 분석
기계 번역 성능 (WMT 2014)
| 모델 | EN→DE BLEU | EN→FR BLEU | 학습 비용 (FLOPs) |
|---|---|---|---|
| ByteNet | 23.75 | — | — |
| Deep-Att + PosUnk | — | 39.2 | — |
| GNMT + RL | 24.6 | 39.92 | |
| ConvS2S | 25.16 | 40.46 | |
| MoE | 26.03 | 40.56 | |
| Deep-Att + PosUnk Ensemble | — | 40.4 | — |
| GNMT + RL Ensemble | 26.30 | 41.16 | |
| ConvS2S Ensemble | 26.36 | 41.29 | |
| Transformer (base) | 27.3 | 38.1 | |
| Transformer (big) | 28.4 | 41.0 | |
| Transformer (big) Ensemble | — | 41.8 | — |
핵심 관찰: Transformer (big) 단일 모델이 기존 모든 앙상블 모델을 능가하면서, 학습 비용은 기존 대비 수십 분의 1 수준입니다. 이것이 Transformer가 혁명적인 진정한 이유입니다.
EN→DE에서 Transformer (big)이 28.4 BLEU를 달성하며 기존 최고 기록(앙상블 포함)인 26.36을 2.04 BLEU 차이로 능가했습니다.
학습 효율성
논문에서 강조하는 학습 비용 비교:
- Transformer (base): 8 × P100 GPU로 12시간 학습 → 3.3 × 10^18 FLOPs
- GNMT + RL: 96 × K80 GPU로 6일 학습 → 1.4 × 10^20 FLOPs
- ConvS2S: 8 × K80 GPU로 수일 학습 → 1.5 × 10^20 FLOPs
Transformer (base)는 기존 대비 약 1/50 수준의 연산량으로 우수한 성능을 달성합니다.
Ablation Study 해석
논문은 EN→DE 번역 태스크에서 체계적인 Ablation Study를 수행합니다.
어텐션 헤드 수와 차원의 영향
| 헤드 수 () | BLEU | 비고 | ||
|---|---|---|---|---|
| 1 | 512 | 512 | 24.9 | 단일 헤드 |
| 4 | 128 | 128 | 25.5 | |
| 8 | 64 | 64 | 25.8 | 기본 설정 |
| 16 | 32 | 32 | 25.5 | 차원이 너무 작아짐 |
| 32 | 16 | 16 | 24.9 | 성능 저하 |
해석: 헤드 수가 너무 적거나 많으면 성능이 저하됩니다. 헤드가 너무 적으면 다양한 관점의 정보를 포착하지 못하고, 너무 많으면 각 헤드의 차원()이 지나치게 작아져 표현력이 부족해집니다. 8개 헤드가 최적의 균형점입니다.
Attention Key 차원의 영향
를 줄이면 성능이 저하되는데, 이는 dot-product attention의 호환성 함수(compatibility function)가 너무 낮은 차원에서는 제대로 동작하지 않기 때문입니다. 논문은 더 정교한 호환성 함수(additive attention 등)가 이 문제를 완화할 수 있을 것이라고 언급합니다.
모델 크기의 영향
| 드롭아웃 | BLEU | |||
|---|---|---|---|---|
| 256 | 1024 | 4 | 0.1 | 23.7 |
| 512 | 2048 | 8 | 0.1 | 25.8 |
| 1024 | 4096 | 16 | 0.3 | 26.2 |
해석: 모델 크기가 커질수록 성능이 지속적으로 향상됩니다. 이는 이후 GPT 시리즈에서 스케일링 법칙(Scaling Law) 을 발견하는 단초가 됩니다.
드롭아웃의 중요성
드롭아웃 없이 학습하면 BLEU가 약 0.2~0.5 하락합니다. 큰 모델(big)에서는 드롭아웃 0.3이 필요하며, 이는 과적합 방지에 정규화가 필수적임을 보여줍니다.
Positional Encoding 비교
| 인코딩 방식 | BLEU |
|---|---|
| 사인/코사인 (고정) | 25.8 |
| 학습 가능 (Learned) | 25.7 |
해석: 두 방식의 성능 차이가 거의 없습니다. 논문은 사인/코사인을 채택하는데, 학습 데이터보다 긴 시퀀스에 대한 일반화 가능성이 더 높기 때문입니다.
연산 복잡도 비교
논문은 Self-Attention과 기존 레이어들의 복잡도를 정밀하게 비교합니다:
| 레이어 유형 | 레이어당 복잡도 | 순차 연산 | 최대 경로 길이 |
|---|---|---|---|
| Self-Attention | |||
| Recurrent | |||
| Convolutional | |||
| Self-Attention (restricted) |
- : 시퀀스 길이, : 표현 차원, : 커널 크기, : 윈도우 크기
핵심 인사이트:
- 최대 경로 길이 : Self-Attention은 어떤 두 토큰이든 단 한 번의 연산으로 직접 연결 가능. RNN은 , CNN은 스텝이 필요
- 순차 연산 : Self-Attention과 CNN은 완전 병렬화 가능. RNN은 번의 순차 연산 필요
- Self-Attention의 약점: 복잡도로, 시퀀스가 매우 길면 (n > d) RNN보다 비효율적
이 복잡도가 이후 FlashAttention, Linear Attention, Mamba 등 수많은 효율적 대안 연구를 촉발했습니다.
영문 구성 태스크(English Constituency Parsing)
기계 번역 외에도 논문은 영문 구문 분석 태스크에서 Transformer의 일반화 능력을 검증합니다.
| 모델 | WSJ 23 F1 |
|---|---|
| Vinyals & Kaiser et al. (2014) | 88.3 |
| Petrov et al. (2006) | 90.4 |
| Zhu et al. (2013) | 90.4 |
| Dyer et al. (2016) | 91.7 |
| Transformer (4 layers) | 91.3 |
| Luong et al. (2015) RNN seq2seq (5 앙상블) | 90.5 |
번역 데이터에서 사전학습 없이도 태스크 특화 모델에 근접하는 성능을 보여주며, Transformer의 범용성을 입증합니다.
기존 방법론과의 종합 비교
| 특성 | RNN (LSTM/GRU) | CNN (ConvS2S) | Transformer |
|---|---|---|---|
| 병렬화 | 불가 | 가능 | 가능 |
| 장거리 의존성 | 약함 | 제한적 | 강함 () |
| 학습 속도 | 느림 | 보통 | 빠름 |
| 시퀀스 길이 확장성 | 메모리 | 메모리 | 메모리 |
| 해석 가능성 | 낮음 | 낮음 | 높음 (Attention 시각화) |
| 구조적 유도 편향 | 순차적 | 지역적 | 없음 (학습으로 획득) |
| EN→DE BLEU | 26.30 (앙상블) | 26.36 (앙상블) | 28.4 (단일) |
| EN→FR BLEU | 41.16 (앙상블) | 41.29 (앙상블) | 41.8 (앙상블) |
구현 핵심 코드
Scaled Dot-Product Attention과 Multi-Head Attention의 PyTorch 구현입니다:
import torch
import torch.nn as nn
import math
class ScaledDotProductAttention(nn.Module):
"""Scaled Dot-Product Attention"""
def __init__(self, d_k: int):
super().__init__()
self.scale = math.sqrt(d_k)
def forward(self, Q, K, V, mask=None):
# Q: (batch, heads, seq_len, d_k)
# K: (batch, heads, seq_len, d_k)
# V: (batch, heads, seq_len, d_v)
# 어텐션 스코어 계산
scores = torch.matmul(Q, K.transpose(-2, -1)) / self.scale
# 마스킹 (디코더에서 미래 토큰 차단)
if mask is not None:
scores = scores.masked_fill(mask == 0, float('-inf'))
# Softmax로 가중치 계산
attn_weights = torch.softmax(scores, dim=-1)
# Value에 가중합 적용
output = torch.matmul(attn_weights, V)
return output, attn_weights
class MultiHeadAttention(nn.Module):
"""Multi-Head Attention"""
def __init__(self, d_model: int = 512, n_heads: int = 8):
super().__init__()
assert d_model % n_heads == 0
self.d_model = d_model
self.n_heads = n_heads
self.d_k = d_model // n_heads
# Q, K, V 투영 행렬
self.W_Q = nn.Linear(d_model, d_model)
self.W_K = nn.Linear(d_model, d_model)
self.W_V = nn.Linear(d_model, d_model)
self.W_O = nn.Linear(d_model, d_model) # 출력 투영
self.attention = ScaledDotProductAttention(self.d_k)
def forward(self, Q, K, V, mask=None):
batch_size = Q.size(0)
# 선형 투영 후 헤드 분리: (batch, seq, d_model) → (batch, heads, seq, d_k)
Q = self.W_Q(Q).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
K = self.W_K(K).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
V = self.W_V(V).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
# Scaled Dot-Product Attention
output, attn_weights = self.attention(Q, K, V, mask)
# 헤드 결합: (batch, heads, seq, d_k) → (batch, seq, d_model)
output = output.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model)
# 출력 투영
return self.W_O(output)
논문의 강점
- 간결하고 우아한 설계: 복잡한 메커니즘 없이 Attention + FFN + Residual만으로 강력한 모델 구성
- 철저한 Ablation Study: 각 구성 요소의 기여도를 체계적으로 검증
- 압도적 성능 대비 효율성: 더 적은 연산량으로 SOTA 달성
- 범용성 입증: 기계 번역뿐 아니라 구문 분석에서도 우수한 성능
- 해석 가능성: Attention 가중치를 통해 모델이 “무엇을 보는지” 시각화 가능
- 확장 가능성: 모델 크기를 키울수록 성능이 지속적으로 향상
논문의 한계점
- 메모리/연산 복잡도: 시퀀스 길이의 제곱에 비례하여, 긴 시퀀스(수천 토큰 이상) 처리에 병목
- 위치 편향 부재: CNN의 지역성(locality)이나 RNN의 순차성 같은 유도 편향(inductive bias)이 없어, 적은 데이터에서 일반화가 어려울 수 있음
- 기계 번역에만 집중: 다른 NLP 태스크나 비전 등 다른 도메인에서의 검증 부족
- 고정 위치 인코딩의 한계: 사인/코사인 인코딩은 상대적 위치 관계를 명시적으로 표현하지 않음
- Decoder의 자기회귀 병목: 생성 시에는 토큰을 하나씩 생성해야 하므로, 추론 시 병렬화 이점이 사라짐
- 학습 불안정성: 깊은 Transformer는 학습이 불안정할 수 있으며, 이후 Pre-LN 등의 개선이 필요했음
후속 연구와 영향
Transformer 논문이 촉발한 주요 후속 연구 흐름:
NLP 혁명
| 모델 | 연도 | 핵심 아이디어 |
|---|---|---|
| GPT | 2018 | Decoder-only + 자기회귀 사전학습 |
| BERT | 2018 | Encoder-only + 양방향 마스크 언어모델 |
| GPT-2/3 | 2019/2020 | 스케일링 법칙 + Few-shot 학습 |
| T5 | 2019 | Text-to-Text 프레임워크 |
| GPT-4 | 2023 | 멀티모달 + 대규모 MoE (추정) |
| ChatGPT/Claude | 2022~ | RLHF를 통한 대화형 AI |
효율적 Attention 연구
| 모델 | 핵심 아이디어 | 복잡도 |
|---|---|---|
| Sparse Transformer | 희소 Attention 패턴 | |
| Linformer | 저랭크 근사 | |
| Performer | 커널 기반 근사 | |
| FlashAttention | IO-Aware 알고리즘 | (but 벽시계 시간 2~4x 빠름) |
| Mamba | Selective State Space Model |
비전 및 멀티모달
| 모델 | 연도 | 도메인 |
|---|---|---|
| ViT | 2020 | 이미지 분류 |
| DETR | 2020 | 객체 검출 |
| DALL-E | 2021 | 텍스트→이미지 생성 |
| Stable Diffusion | 2022 | 텍스트→이미지 생성 (Latent Diffusion) |
| GPT-4V | 2023 | 멀티모달 이해 |
“Attention Is All You Need”는 단순한 기계 번역 논문을 넘어, 현대 AI의 기반 아키텍처를 정의한 논문입니다. 이 논문 하나가 NLP, 비전, 음성, 생성 모델, 강화학습 등 거의 모든 AI 분야의 지형을 바꿔놓았습니다.
마무리
“Attention Is All You Need” 논문의 핵심을 정리하면:
- Self-Attention만으로 RNN/CNN 없이 시퀀스 모델링이 가능함을 최초로 증명
- Multi-Head Attention은 서로 다른 관점에서 정보를 추출하는 효율적 메커니즘
- 경로 길이로 장거리 의존성을 근본적으로 해결
- 1/50 연산량으로 기존 SOTA를 2 BLEU 이상 능가하는 압도적 효율
- 이후 GPT, BERT, ViT, Diffusion Model 등 현대 AI의 모든 주류 아키텍처의 기반
이 논문이 2017년에 제안한 아키텍처는 2026년 현재까지도 거의 변하지 않은 채 사용되고 있습니다. 세부적인 개선(Pre-LN, RoPE, GQA, FlashAttention 등)은 있었지만, Multi-Head Attention + FFN + Residual Connection이라는 기본 구조는 그대로입니다. 이는 원 논문의 설계가 얼마나 근본적으로 올바랐는지를 보여주는 증거입니다.
Transformer를 이해하는 것은 현대 AI를 이해하는 출발점입니다. 이 논문을 깊이 이해한다면, 이후의 모든 LLM, 비전 모델, 생성 모델 논문을 읽을 때 핵심 구조를 명확히 파악할 수 있을 것입니다.
Did you find this helpful?
☕ Buy me a coffee
Leave a Reply