Attention(注意力机制)让模型能够"关注"输入中重要的部分,是现代 LLM 的核心。
核心思想
理解句子时,不是所有词都同等重要。
"这只 猫 吃了 鱼"
理解"猫"时,需要关注"吃"、"鱼";理解"鱼"时,需要关注"猫"、"吃"。
Self-Attention 原理
Transformer 中的 Self-Attention 让每个词都能"看到"句子中的所有其他词:
Attention(Q, K, V) = softmax(QK^T / √d_k) × V
其中:
- Q (Query):查询向量,"我要找什么"
- K (Key):键向量,"我是什么"
- V (Value):值向量,"我的内容是什么"
- d_k:缩放因子,防止梯度消失
直观理解:Q 和 K 匹配(计算相似度),匹配结果决定从 V 中提取多少信息。
计算步骤
- 对每个位置生成 Q, K, V(线性变换)
- 计算 Q 和所有 K 的点积(相似度)
- 除以 √d_k 缩放(防止数值过大)
- Softmax 归一化(得到权重)
- 权重乘以 V(聚合信息)
例如:处理 "The cat sat on the mat"
步骤1: 每个词生成 Q, K, V
步骤2: 计算 "sat" 的 Q 与所有词的 K 的相似度
步骤3: 得到权重 ["cat": 0.3, "sat": 0.5, "mat": 0.2]
步骤4: 加权求和 V → "sat" 的新表示
为什么重要?
- 并行计算:不像 RNN 需要顺序处理,Transformer 可以并行
- 长距离依赖:词之间无论相隔多远都能建立联系
- 可扩展:为大规模预训练奠定基础
- 可解释性:Attention 权重可视化,了解模型关注什么
Multi-Head Attention
单次 Attention 只能捕捉一种关系,Multi-Head 用多组 Q,K,V 同时捕捉多种关系:
- Head 1:关注语法关系
- Head 2:关注语义关系
- Head 3:关注指代关系
- ...
GPT-3: 96 heads
Llama-2-7B: 32 heads
Claude: 更多 heads
Attention vs RNN/LSTM
| 特性 |
RNN/LSTM |
Attention |
| 计算方式 |
顺序(串行) |
并行 |
| 长距离依赖 |
弱(梯度消失) |
强 |
| 可解释性 |
差 |
好(权重可视化) |
| 扩展性 |
差 |
好(适合大规模) |
Encoder-Decoder vs Decoder-only
Encoder-Decoder (原始 Transformer)
- Encoder:双向 Attention(看到整个输入)
- Decoder:单向 Attention(只能看到过去)+ Cross-Attention(看 Encoder)
- 用于:翻译、摘要(T5, BART)
Decoder-only (GPT 系列)
- 只有 Decoder,使用 Masked Attention(看不到未来)
- 适合:文本生成
- 优点:结构简单,扩展性强
Encoder-only (BERT)
- 只有 Encoder,双向 Attention
- 适合:理解任务(分类、NER)
RoPE (Rotary Positional Embedding)
现代模型(Llama、PaLM、GLM)多用 RoPE 而非绝对位置编码:
- 通过旋转矩阵注入位置信息
- 相对位置编码,外推性更好
- 支持长上下文扩展
Grouped Query Attention (GQA)
优化 Attention 计算,减少推理时内存:
- 多个 Head 共享同一组 Key/Value
- Llama-2/3, Mistral 使用
- 速度提升,精度损失很小
可视化工具
推荐阅读