Appearance
Position Encoding
Position Encoding(位置编码)是 Transformer 架构中不可或缺的组成部分。由于 Self-Attention 本身是置换不变的(permutation invariant),不能区分词的先后顺序,因此需要额外的位置信息来补充顺序特征。从原版 Transformer 的正弦/余弦位置编码到 RoPE(旋转位置编码)、ALiBi 和长上下文扩展技术,位置编码经历了显著的演进。
核心问题
为什么需要位置编码
Self-Attention 的计算是置换不变的:
输入: [A, B, C] 和 [B, A, C]
产生的 Attention 矩阵完全相同
问题: 语言是有序的,"狗咬人" ≠ "人咬狗"
解决: 为每个位置添加唯一的位置信息主要方法
1. 绝对位置编码 (Absolute Position Encoding)
正弦/余弦位置编码 (Sinusoidal)
原版 Transformer 采用的方法:
python
PE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
其中:
- pos: 位置索引
- i: 维度索引
- d: 模型维度特点:
- 固定函数,不需学习
- 可以外推到更长序列
- 位置之间有确定的几何关系
可学习位置编码 (Learned)
BERT、GPT 等采用的方法:
python
# 每个位置有一个可训练的向量
position_embeddings = nn.Embedding(max_seq_len, d_model)特点:
- 灵活性高,可以学习任意模式
- 受限于 max_seq_len,难以外推
- 需要更多训练数据
2. 相对位置编码 (Relative Position Encoding)
RoPE (Rotary Position Embedding)
当前主流模型的标准方案(Llama、Qwen、DeepSeek 等):
python
# 将 Q 和 K 的每对维度旋转一个角度
# 角度与位置相关
q_rot = rotate_half(q) * cos(m*θ) + rotate_half(q) * sin(m*θ)
k_rot = rotate_half(k) * cos(n*θ) + rotate_half(k) * sin(n*θ)
# 点积后自然体现相对位置信息
q_rot · k_rot = f(q, k, m-n) # 只依赖于相对位置差优势:
- 相对位置意识:点积后只依赖于位置差
- 长度外推友好
- 与 Attention 机制自然融合
ALiBi (Attention with Linear Biases)
python
# 不使用位置编码,而是在 Attention 分数上加偏置
attention_score = QK^T / √d + bias(m-n)
bias(m-n) = -|m-n| · slope # 距离越远,惩罚越大特点:
- 简洁高效,无需额外参数
- 天然的长度外推能力
- 广泛用于训练长上下文模型
3. 无位置编码方法
固定长度上下文
一些新方法尝试去掉显式位置编码:
- Permutation Equivariant Networks: 利用结构化表示
- State Space Models (Mamba): 隐式位置信息通过状态传递
长上下文扩展技术
问题
模型在训练时只见过短序列,如何处理更长的输入?
解决方案
| 方法 | 原理 | 效果 |
|---|---|---|
| NTK-aware | 插值位置编码 | 可扩展到 2-4x |
| YaRN | 温度缩放 + 频率拆分 | 可扩展到 8x+ |
| PI | 位置插值 | 简单但效果有限 |
| 逐步扩展 | 分阶段训练 | 最稳定但成本高 |
对比总结
| 方法 | 类型 | 参数量 | 外推能力 | 代表模型 |
|---|---|---|---|---|
| Sinusoidal | 绝对 | 0 | 中 | 原版 Transformer |
| Learned | 绝对 | O(n·d) | 差 | BERT, GPT-2 |
| RoPE | 相对 | 0 | 好 | Llama, Qwen, DeepSeek |
| ALiBi | 相对 | 0 | 很好 | BLOOM, MPT |
| NoPE | 无 | 0 | - | 实验性方法 |
Synthesis
位置编码是 Transformer 架构中"看似简单却至关重要"的组成部分。从最初的固定正弦函数到 RoPE 的旋转矩阵表示,这一领域的演进体现了从"绝对"到"相对"、从"显式"到"隐式"的趋势。RoPE 已成为当前主流模型的标准选择,而长上下文扩展技术(YaRN、NTK-aware)则是解决实际应用中常见的长文档处理问题的关键。
Related Pages
- Transformer Architecture — Transformer 完整架构
- Attention Mechanism — 注意力机制详解
- KV Cache & Prompt Caching — KV Cache 与长上下文优化
- Mixture of Experts — MoE 架构
Sources
- "Attention Is All You Need" (Vaswani et al., 2017)
- "RoFormer: Enhanced Transformer with Rotary Position Embedding" (Su et al., 2022)
- "ALiBi: Press et al., 2021"
- "YaRN: Efficient Context Window Extension of Large Language Models" (Peng et al., 2023)