1. Attention 상세
한 줄 요약
"모든 토큰이 모든 다른 토큰을 직접 보고, 얼마나 관련 있는지 점수를 매겨서 가중 평균으로 섞는다."
어떻게 동작하나요?
문장 "나는 파리에 간다. 거기서 __ 를 먹었다" 에서 빈칸에 들어갈 단어를 예측한다고 생각해보세요. 모델은 "거기서" 라는 단어를 처리할 때, 과거의 어떤 단어들을 봐야 하는지 결정해야 합니다. "파리" 라는 단어가 가장 관련이 크죠.
Attention 은 이 과정을 다음과 같이 수학적으로 풀어냅니다:
- Query (Q): 현재 토큰이 "뭘 찾고 싶은지" 질문
- Key (K): 각 과거 토큰이 "나는 이런 정보다" 라는 색인
- Value (V): 실제 전달할 정보 내용
- 점수 = Q·Kᵀ (모든 Q와 모든 K의 내적)
- softmax 로 정규화 → 가중치
- 가중치 × V = 현재 토큰의 새 표현
모든 토큰 쌍을 다 계산하기 때문에 N² 번의 내적 연산 이 필요합니다. 문장이 길어지면 계산량이 제곱으로 증가합니다.
장점
- 완벽한 정보 접근: 과거 어떤 토큰이든 거리에 상관없이 직접 본다.
- in-context learning (ICL): 문맥 내 예시로 학습하는 능력이 압도적으로 강하다.
- 검색/reasoning: 특정 키워드를 찾아 정확히 매칭하는 태스크에 최강.
- 하드웨어 최적화: FlashAttention, xFormers 등 매우 많이 최적화되어 있다.
단점
- O(N²) 계산/메모리: 시퀀스 길이 N 이 2배 되면 비용은 4배.
- KV 캐시 메모리: 추론 시 과거 K,V 를 모두 저장해야 해서 긴 문맥에서 메모리 부담 큼.
- 위치 정보 부재: 자체로는 순서를 모르기 때문에 RoPE 같은 위치 인코딩이 필요.
현재 쓰이는 개선 기법들
EulerStack v1 은 다음 최신 기법들을 attention 믹서에서 지원합니다:
- GQA (Grouped-Query Attention): n_kv_heads < n_heads 로 KV 캐시를 N배 절약 (Llama 2/3, Mistral, Qwen 에서 사용). Ainslie et al., 2023.
- Sliding Window Attention:
window옵션으로 로컬 윈도우만 attend. 최근 N 토큰만 보게 해서 메모리 경계를 만든다 (Mistral 의 핵심 기법). - RoPE (Rotary Position Embedding): Q,K 에 위상 회전을 곱해 상대 위치 인코딩 (Su et al., 2021). 외삽(extrapolation)이 비교적 자연스럽다.
- MLA (Multi-head Latent Attention, v1 Phase B2.1):
latent_dim옵션으로 K/V 를 공유 latent (보통d_model/2) 로 투영 후 head 별로 역투영. KV 캐시를 최대 50% 절감 하면서 품질은 거의 유지. DeepSeek-V2/V3 에서 처음 공개 (2024). 런타임 Core 구현이 완료되어 있어 forward / backward / KV cache 모두 즉시 사용 가능.
MLA 사용 가이드:
- latent_dim 은 반드시 0 < latent_dim < d_model
- 일반적으로 latent_dim = d_model / 2 부터 시작
- 긴 컨텍스트 (≥16K) 서빙에서 KV 캐시 메모리가 병목일 때 가장 큰 이득
- llm_*_mla 프리셋 (0.1B / 0.8B / 2B / 4B / 16B) 과 arch_advanced_mla 참조
실제 적용 예
- Llama 2/3 (Meta) — 표준 Attention + GQA + RoPE
- Mistral 7B / Mixtral — Attention + Sliding Window + GQA
- Gemma 2 (Google) — Attention + Sliding Window 교차
- Qwen 2/3 (Alibaba) — Attention + GQA + RoPE
어떤 상황에 유리한가?
| 상황 | Attention 이 좋은가? |
|---|---|
| 짧은 대화 (≤ 4K) | ★★★★★ 완벽 |
| 코딩/reasoning 태스크 | ★★★★★ 정확한 매칭에 강함 |
| 문서 질의응답 (RAG) | ★★★★★ 관련 구절 정확히 찾아옴 |
| 매우 긴 문서 (≥32K) | ★★ (KV 캐시 + O(N²) 때문에 비효율) |
| 실시간 스트리밍 추론 | ★★★ (KV 캐시 필요) |
EulerStack YAML 예시
layer_templates:
attn_layer:
mixer:
type: attention
attention:
qkv_bias: false # bias 없는 Q,K,V proj (Llama 스타일)
attn_drop: 0.0 # attention dropout
window: null # 전역 attention (null = 무제한)
ffn:
type: gated_mlp
activation: swiglu
state:
kv_cache: true # 추론 시 KV 캐시 사용
로컬 윈도우 사용 시:
attention:
window: 4096 # 최근 4096 토큰만 attend
GQA 사용 시 (model 섹션에서):
model:
n_heads: 16
n_kv_heads: 4 # 16 heads → 4 KV heads 공유 (4배 압축)
MLA (Phase B2.1) 사용 시:
layer_templates:
mla_attn:
mixer:
type: attention
attention:
latent_dim: 768 # d_model=1536 의 절반 → KV 캐시 ~50% 절감
ffn:
type: gated_mlp
state:
kv_cache: true
MLA 는 GQA, sliding window 와 조합 가능합니다 (모두 독립 차원).
논문 출처
- Vaswani et al., 2017. "Attention Is All You Need." NeurIPS.
- Su et al., 2021. "RoFormer: Enhanced Transformer with Rotary Position Embedding."
- Ainslie et al., 2023. "GQA: Training Generalized Multi-Query Transformer Models." EMNLP.
- Beltagy et al., 2020. "Longformer: The Long-Document Transformer." (sliding window)
- Dao et al., 2022. "FlashAttention." NeurIPS.
- DeepSeek-AI, 2024. "DeepSeek-V2 / DeepSeek-V3 Technical Report." (MLA)