The Illustrated Transformer
Jay Alammar | 2023-06-27 (Updated) Comprehensive Visual Guide | 4,062 words | 50+ Diagrams
핵심 Takeaways
아키텍처 개요
- Encoder-Decoder: 병렬 구조, 6층 스택
- 각 레이어: Self-attention + Feed-forward (2개 서브레이어)
- Key Innovation: Attention이 모든 위치 동시 병렬 처리 가능 (RNN과 차이)
교육적 가치
- 복잡한 수학을 시각적 흐름도로 표현
- Step-by-step 진행: Black box → 각 요소 상세 설명 → 수학
- 실제 구현 연결: Tensor2Tensor, PyTorch 예제 포함
상세 설명
Part 1: Transformer 전체 구조
Encoder-Decoder 패러다임
Source: "Je suis étudiant"
↓ [Encoder]
Context vectors (K, V 생성)
↓ [Decoder]
Target: "I am a student"
각 단계의 역할
Encoder 역할:
입력 이해 → 문맥 벡터 생성
Decoder 역할:
1. 이전 단어들로부터 자기주의 (자신의 출력 마스킹)
2. Encoder의 K, V 사용 (Cross-attention)
3. Feed-forward로 다음 단어 예측
Part 2: 입력 처리 (Embeddings)
Word Embedding
각 단어 → 512차원 벡터
┌─────────────────────┐
│ "Thinking" → [0.1, 0.3, ..., -0.2] 512개 값
└─────────────────────┘
Embedding만의 한계
- Position 정보 없음
- “I love you” ≠ “you love I”
- → Positional encoding 필요
Part 3: Self-Attention 상세
직관적 도입
예시 문장:
"The animal didn't cross the street because it was too tired"
질문: “it”은 무엇을 가리키는가?
- 절차: “it” 토큰의 self-attention이 모든 토큰과 비교
- 결과: “animal”에 가장 높은 가중치
6단계 계산 (이전 sources와 동일하지만 추가 시각)
Step 1-2: QKV 생성 및 Scoring
각 단어마다:
- Query: 512D → 64D (W^Q로 투사)
- Key: 512D → 64D (W^K로 투사)
- Value: 512D → 64D (W^V로 투사)
Score = Q_i · K_j^T (모든 j에 대해)
→ [n × n] 행렬 (n = 시퀀스 길이)
Step 3-4: 정규화
Score / √64 = Score / 8 (안정성)
Softmax(normalized score)
→ [0, 1] 범위, 행의 합 = 1.0
Step 5-6: Value 가중합
Output_i = Σ_j (softmax[i,j] × Value_j)
Matrix 형태 (병렬 계산)
Attention(Q, K, V) = softmax(QK^T / √d_k) V
모든 입력 한 번에 처리
→ 배치 처리 + 병렬화
Part 4: Multi-Head Attention
구조
Input (512D)
├─ Head 1: Q₁,K₁,V₁ (각 64D) → Attn → Z₁
├─ Head 2: Q₂,K₂,V₂ (각 64D) → Attn → Z₂
├─ ... (8개 총)
└─ Head 8: Q₈,K₈,V₈ (각 64D) → Attn → Z₈
Concat(Z₁, Z₂, ..., Z₈) = 512D
↓
W^O (512×512 선형변환)
↓
Output (512D)
효율성 분석
만약 단일 헤드였다면:
Q, K, V: 512×512 행렬 (262K params each)
→ 매우 비효율
Multi-head 분해:
각 헤드: 512×64 행렬 (32K params each)
→ 8개 × 32K = 256K (단일 512×512와 유사)
→ 하지만 다양성 극대 + 병렬화 가능
Part 5: Feed-Forward Networks
구조
각 위치별로 독립 실행 (위치 간 의존성 없음)
FFN(x) = max(0, x·W₁ + b₁)·W₂ + b₂
특징:
- 512 → 2048 → 512 (중간 확대)
- ReLU 활성화
- 병렬 실행 가능
역할
Self-attention: 어디를 봐야 하는가
FFN: 그 정보로 무엇을 할 것인가
Part 6: Positional Encoding
문제 인식
"I love you" vs "you love I"
같은 임베딩 → 다른 의미
→ 위치 정보 필수
Sinusoidal Encoding
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
예: pos=0, d_model=512
차원 0: sin(0/10000^0) = sin(0) = 0
차원 1: cos(0/10000^0) = cos(0) = 1
차원 2: sin(0/10000^2/512) = sin(0) = 0
...
pos=1, d_model=512
차원 0: sin(1/10000^0) = sin(1) ≈ 0.84
차원 1: cos(1/10000^0) = cos(1) ≈ 0.54
...
특징
- 상대 거리 정보: PE[pos+k] 관계가 일정
- 외삽 가능: 학습 길이보다 긴 시퀀스 처리
- 패턴: 저주파(왼쪽) ↔ 고주파(오른쪽)
Part 7: Residual Connections & Layer Normalization
구조
Sublayer input
↓
[Sublayer]
↓
+ input (Residual)
↓
[LayerNorm]
↓
Output
역할
Residual: 깊은 네트워크에서 신호 보존
LayerNorm: Gradient 안정화, 분포 정규화
Part 8: Decoder
자기주의 (Causal/Masked Self-Attention)
생성 시점 t:
Position 1,2,...,t 만 볼 수 있음
Position t+1,t+2,... 는 -∞ (미래 마스킹)
학습 시:
모든 위치가 미래를 보지 않도록 학습
Cross-Attention (Encoder-Decoder)
Decoder가 Encoder 출력에 주의:
Query: Decoder의 현재 상태
Key, Value: Encoder 최상층 출력
역할: Source 언어의 어느 부분을 참고할지 결정
Self-Attention → Cross-Attention → FFN 순서
Decoder Position t:
1. 이전 출력들(1...t)을 self-attention
2. 모든 Source 입력에 cross-attention
3. FFN으로 차원 변환
Part 9: 최종 Linear + Softmax
구조
Decoder output (512D)
↓
Linear layer (512 × vocab_size)
↓
Logits (vocab_size)
↓
Softmax
↓
Probability distribution
↓
argmax → 다음 단어 선택
Vocabulary 예시
vocab_size = 10,000 (영어)
Logits: [0.1, 0.5, -0.2, ..., 0.3] (10,000개)
Softmax: [0.01, 0.05, 0.001, ..., 0.03]
합계: 1.0 (확률)
Part 10: 학습 프로세스
Teacher Forcing
실제 학습:
입력: "Je suis étudiant"
단계 1: Start token → 예측 "I", 실제 "I"
단계 2: "I" → 예측 "am", 실제 "am" ← 실제 값 주입 (Teacher forcing)
단계 3: "I am" → 예측 "a", 실제 "a"
...
Loss 계산
예측 확률: [0.1, 0.05, 0.3, ...] (vocab_size 원소)
실제 단어: "student" (one-hot: [0,0,0,...,1,...,0])
Cross-entropy loss = -log(P_actual)
예: P("student") = 0.05 → loss = -log(0.05) = 2.996
장점: 효율성
문장 길이 n이면, n번 loop하지 않음
전체 시퀀스를 한 번에 처리
병렬 계산으로 매우 빠름
Part 11: Inference (생성)
Greedy Decoding
t=1: 최고 확률 단어 선택 → "I"
t=2: "I"를 context로 최고 확률 → "am"
t=3: "I am"을 context로 최고 확률 → "a"
...
EOS 토큰까지 반복
Beam Search (더 나은 방법)
beam_width = 2:
t=1: Top 2 후보 유지 ["I" (p=0.8), "The" (p=0.15)]
t=2: "I"로부터:
"I am" (0.8×0.7=0.56)
"I have" (0.8×0.2=0.16)
"The" + ... (0.15×...)
Top 2 전체: ["I am", "I have"]
t=3: 비슷하게...
최종: 누적 확률 최고 경로 2개 반환
장점
Greedy: 빠르지만 최적 아님
Beam: 더 나은 결과 (느림)
Diverse Beam: 다양한 생성
ABCD 학습 목표
Understand (이해)
- A: DAP 운영 경험자, AI 교육 준비 중
- B: Transformer의 각 컴포넌트를 설명하고, 이들이 연결되는 방식을 도식화할 수 있다
- C: 임의의 문제 영역 (번역, 요약, 질의응답) 제시
- D: Encoder-Decoder의 역할, Attention의 목적, Positional encoding의 필요성을 각각 설명
Apply (적용)
- A: 모델 선택 담당자, 하이퍼파라미터 최적화 엔지니어
- B: 주어진 언어 쌍과 리소스 제약에서 최적의 Transformer 설정 결계
- C: 한국어↔영어 번역, 4GB VRAM, 12시간 학습 제약
- D: Embedding dimension, Head count, Layer depth, FFN hidden dim 결정 + 예상 성능
Analyze (분석)
- A: 모델 성능 평가자, 병목 분석 담당자
- B: Attention weight 분석으로 모델이 어떤 의존성을 학습했는지 해석
- C: 특정 입출력 예제 + 각 레이어의 attention 가중치
- D: 번역 실패 사례의 근본 원인 (attention 선택 오류인가, embedding 부족인가 등)
교육 설계 강점
왜 이 자료가 좋은가
-
복잡도 관리:
- Black box에서 시작
- 각 컴포넌트 분리 설명
- 다시 통합 (전체 구조)
-
다층 표현:
- 개념적 설명 (이게 뭐하는 건가)
- 수학적 공식 (어떻게 하는가)
- 코드 링크 (실제 구현)
-
예제의 일관성:
- 시작부터 끝까지 “Je suis étudiant” → “I am a student” 추적
- 단계마다 같은 예제로 이해도 누적
한국 맥락에서의 적용
언어 특성 고려
- 영어: SVO (Subject-Verb-Object)
- 한국어: SOV + Agglutination
- Transformer는 어순 무관 (attention이 해결) → 모든 언어에 적용 가능
번역 예시 개선
원본: Je suis étudiant → I am a student
한국어: "나는 학생입니다"
→ Subject + Object + Copula
→ Positional encoding으로 어순 학습
→ Attention으로 "나" ← "는" 관계 학습
관련 문서
- attention-in-transformers-visualized: 3Blue1Brown의 더 깊은 시각화
- multihead-self-attention-insights: 연구 기반 10+1 통찰
- transformer-attention-mechanism: Attention의 기본 원리
- transformer-architecture: 아키텍처 전체 명세
- positional-encoding: Positional encoding 심화
- beam-search: Decoding 전략 상세
추가 자료
원본 논문
- Vaswani et al. (2017) “Attention is All You Need” - 원본 Transformer 논문
- Tensor2Tensor TensorFlow 구현
- Harvard NLP 그룹의 PyTorch 주석 버전
관련 강좌
- MIT Deep Learning State of the Art 강의 (이 포스트 참고)
- Stanford CS224N (NLP)
- Harvard CS50’s AI with Python
2025 Update
- LLM-book.com: Multi-Query Attention, RoPE 포지셔널 임베딩 등 최신 내용
- 애니메이션 강좌: 현대적 개념 시각화 포함
교육 설계 노트: 이 자료는 “시각적 학습자”와 “분석적 학습자” 모두에게 효과적. 다양한 표현(그림, 수식, 코드)으로 중복 설명하여 이해도 극대화. 한국 교육 시스템에 적용 시, 시각적 부분은 그대로 유지하되 한국어 문법 특성을 반영한 예제 추가 권장.