트랜스포머 아키텍처 (Transformer Architecture)¶
개요¶
Transformer는 Vaswani et al. (2017)이 "Attention Is All You Need"에서 제안한 아키텍처로, 순환(recurrence) 없이 어텐션 메커니즘만으로 시퀀스를 처리한다. RNN의 순차적 처리 한계를 극복하고 완전한 병렬화를 가능하게 하여, 현재 NLP, 컴퓨터 비전, 오디오 등 거의 모든 도메인에서 지배적인 아키텍처가 되었다.
핵심 개념¶
1. 전체 아키텍처¶
graph TD
subgraph Encoder["인코더 (×N)"]
E_input["입력 임베딩 + 위치 인코딩"]
E_SA["Multi-Head Self-Attention"]
E_AN1["Add & Norm"]
E_FFN["Feed-Forward Network"]
E_AN2["Add & Norm"]
E_input --> E_SA
E_SA --> E_AN1
E_AN1 --> E_FFN
E_FFN --> E_AN2
end
subgraph Decoder["디코더 (×N)"]
D_input["출력 임베딩 + 위치 인코딩"]
D_MSA["Masked Multi-Head Self-Attention"]
D_AN1["Add & Norm"]
D_CA["Multi-Head Cross-Attention"]
D_AN2["Add & Norm"]
D_FFN["Feed-Forward Network"]
D_AN3["Add & Norm"]
D_input --> D_MSA
D_MSA --> D_AN1
D_AN1 --> D_CA
E_AN2 --> D_CA
D_CA --> D_AN2
D_AN2 --> D_FFN
D_FFN --> D_AN3
end
D_AN3 --> Linear["Linear + Softmax"]
Linear --> Output["출력 확률"] 인코더: N개의 동일한 층으로 구성. 각 층은 Self-Attention + FFN
디코더: N개의 동일한 층으로 구성. 각 층은 Masked Self-Attention + Cross-Attention + FFN
각 Sub-layer: Residual Connection + Layer Normalization
2. 위치 인코딩 (Positional Encoding)¶
Self-attention은 순서 불변(permutation invariant) 이므로, 위치 정보를 별도로 주입해야 한다.
Sinusoidal Encoding (원래 Transformer)¶
- 임의 길이로 일반화 가능
- 상대적 위치 관계를 선형 변환으로 표현 가능
기타 위치 인코딩¶
| 방법 | 핵심 아이디어 | 사용 모델 |
|---|---|---|
| Learned Positional Embedding | 위치별 학습 가능 벡터 | BERT, GPT |
| Relative Positional Encoding | 절대 위치 대신 상대 거리 | T5, Shaw et al. |
| RoPE (Rotary) | 회전 행렬 기반, 내적이 상대 위치의 함수 | LLaMA, Qwen |
| ALiBi | attention score에 거리 기반 bias 추가 | BLOOM |
RoPE는 현재 대부분의 최신 LLM에서 사용되며, 학습 시 본 적 없는 긴 시퀀스에도 비교적 잘 일반화된다.
3. Feed-Forward Network (FFN)¶
각 위치에 독립적으로 적용되는 2층 신경망이다.
기본 구조: $\(\text{FFN}(x) = W_2 \cdot \text{GELU}(W_1 x + b_1) + b_2\)$
차원: \(d_{model} \to d_{ff}(= 4 \times d_{model}) \to d_{model}\)
GLU 변형 (SwiGLU, LLaMA에서 사용): $\(\text{FFN}(x) = (W_1 x \odot \text{Swish}(W_g x)) W_2\)$
직관: Attention이 "어디를 볼지" 결정하고, FFN이 "무엇을 할지" 결정한다.
4. Transformer가 RNN을 대체한 이유¶
| 특성 | RNN | Transformer |
|---|---|---|
| 병렬화 | 불가 (순차 처리) | 가능 (전체 동시 처리) |
| 장거리 의존성 | \(O(n)\) 경로 길이 | \(O(1)\) 경로 길이 |
| GPU 활용도 | 낮음 | 높음 |
| 학습 속도 | 느림 | 빠름 |
| 메모리 | \(O(n)\) | \(O(n^2)\) |
| 귀납적 편향 | 시간적 근접성 | 거의 없음 (더 많은 데이터 필요) |
5. Transformer 변형¶
graph TD
T["Transformer"] --> EO["Encoder-only"]
T --> DO["Decoder-only"]
T --> ED["Encoder-Decoder"]
T --> V["Vision"]
EO --> BERT["BERT<br>양방향 문맥 이해<br>분류, NER"]
DO --> GPT["GPT 계열<br>자기회귀 생성<br>현재 LLM 주류"]
ED --> T5["T5, BART<br>번역, 요약"]
V --> ViT["ViT<br>이미지 패치 → Transformer"] | 변형 | 어텐션 방향 | 주요 과제 | 대표 모델 |
|---|---|---|---|
| Encoder-only | 양방향 | 분류, NER, 질의응답 | BERT, RoBERTa |
| Decoder-only | 단방향 (causal) | 생성, 추론 | GPT, LLaMA, Claude |
| Encoder-Decoder | 양방향 + 단방향 | 번역, 요약 | T5, BART |
| Vision | 이미지 패치 | 이미지 분류, 탐지 | ViT, DeiT, Swin |
상세 내용¶
Pre-LN vs Post-LN¶
Post-LN (원래 Transformer): $\(x' = \text{LayerNorm}(x + \text{SubLayer}(x))\)$
Pre-LN (현재 표준): $\(x' = x + \text{SubLayer}(\text{LayerNorm}(x))\)$
Pre-LN이 학습 안정성이 더 좋아, warmup이 짧아도 되고, 더 깊은 모델을 학습할 수 있다.
KV-Cache¶
자기회귀 생성 시, 이미 계산한 Key와 Value를 캐시하여 재계산을 방지한다.
- 없이: 토큰 \(t\)를 생성할 때 \(1 \sim t-1\)의 K, V를 매번 재계산 → \(O(n^2)\)
- 있으면: 이전 K, V를 저장하고 새 토큰의 K, V만 추가 → \(O(n)\)
대규모 배치나 긴 시퀀스에서 KV-Cache는 메모리 병목이 될 수 있다. 이를 위해 GQA(Grouped-Query Attention), MQA(Multi-Query Attention) 등이 제안되었다.
Vision Transformer (ViT)¶
이미지를 고정 크기 패치로 분할하여 "토큰"으로 취급한다.
- 이미지를 \(P \times P\) 패치로 분할
- 각 패치를 선형 투영으로 임베딩
- 위치 인코딩 추가
- 표준 Transformer 인코더 적용
- [CLS] 토큰 또는 GAP으로 분류
대규모 데이터(JFT-300M 등)에서 학습하면 CNN을 능가하지만, 적은 데이터에서는 CNN의 귀납적 편향(이동 등변성, 지역성)이 유리하다.
언제 사용하는가¶
| 과제 | 추천 변형 | 비고 |
|---|---|---|
| 텍스트 분류, NER | Encoder-only (BERT) | 양방향 문맥이 중요 |
| 텍스트 생성 | Decoder-only (GPT) | 자기회귀 생성 |
| 번역, 요약 | Encoder-Decoder (T5) | 입출력이 다른 시퀀스 |
| 이미지 분류 | ViT 또는 CNN | 데이터 양에 따라 선택 |
| 멀티모달 | Cross-Attention 활용 | 텍스트-이미지 등 |
흔한 오해와 함정¶
-
"Transformer는 항상 RNN보다 좋다": Transformer는 데이터가 충분하고 시퀀스가 매우 길지 않을 때 우수하다. 매우 제한된 데이터나 실시간 스트리밍에서는 RNN이 적합할 수 있다.
-
Attention mask 설정 오류: 가장 흔한 버그. Padding mask(패딩 토큰 무시)와 Causal mask(미래 토큰 방지)를 정확히 설정해야 한다. 두 mask를 올바르게 결합하는 것도 중요하다.
-
Warmup 없이 학습: Transformer는 학습 초기에 attention weight가 불안정하므로, learning rate warmup이 사실상 필수적이다. 특히 Post-LN에서는 더욱 중요하다.
-
위치 인코딩 누락: Self-attention은 순서를 모르므로, 위치 인코딩 없이는 "bag of tokens"처럼 동작한다.
-
\(O(n^2)\) 메모리를 무시: 시퀀스 길이가 늘어나면 attention 행렬의 메모리가 이차적으로 증가한다. Flash Attention이나 sparse attention을 고려해야 한다.