位置编码怎么选? RoPE vs ALiBi
Transformer 中绝对/相对位置编码原理与优劣对比
原题:请系统介绍Transformer模型中常见的位置编码方法,包括绝对位置编码、相对位置编码、旋转位置编码(RoPE)和ALiBi,并比较它们的原理与优劣。
模型架构 · 京东真题
回答与解析
为什么需要位置信息
不带位置项的自注意力对 token 排列是置换等变的,因此模型需要额外机制区分顺序。常见方案不是简单的优劣排名,而是把位置信息注入 hidden state、attention score 或 Q/K 几何关系。
| 方法 | 核心做法 | 主要边界 |
|---|---|---|
| Learned absolute | 为位置查表并与 token embedding 相加 | 表外位置没有已学习向量,扩窗需额外处理 |
| Sinusoidal absolute | 用不同频率的 sin/cos 直接计算位置向量 | 可计算到更长位置不等于模型会可靠外推 |
| Relative position | 按 token 间距离给 attention 加 bias 或关系表示 | 可分桶或按需计算,不必保存完整 L×L 参数矩阵 |
| RoPE | 对每个 Q/K 二维对子按位置旋转,使内积带相对位置信息 | 超训练长度表现依频率、训练分布和扩窗方法 |
| ALiBi | 对每个头的 attention logit 加与相对距离成比例的线性负偏置 | 简洁、无需位置 embedding,但质量与外推仍需任务评测 |
RoPE 对位置 m 和维度对子 i 的角度是 m θ_i:(x'_{2i},x'_{2i+1})=R(mθ_i)(x_{2i},x_{2i+1})。这里 m 是 token 位置,i 是特征维度对子,不能混写。旋转后的 Q/K 点积依赖相对位置差。
选型要同时看训练长度、目标上下文、模型架构、缓存实现和长上下文评测。ChatGLM-6B 的二维 RoPE 不应被列为 ALiBi 的代表。
口语版讲法(约4分钟)
- 先解释无位置自注意力的置换性质
- 区分两类绝对位置编码
- 说明相对位置与 ALiBi 的注入位置
- 准确解释 RoPE 二维旋转公式
- 以目标长度评测而不是口号做选型
这道题我先回答为什么要位置编码。纯自注意力本身只看 token 之间的内容关系,如果把输入顺序一起置换,输出也会对应置换,它不会天然知道“谁在前、谁在后”。所以位置方法的本质,是把顺序信号放进 hidden state、注意力分数,或者 Query 和 Key 的几何关系里。
绝对位置编码要分两种。可学习绝对位置是查表后与 token embedding 相加,优点是简单,缺点是超过表长没有训练过的向量。正弦绝对位置用不同频率的 sin 和 cos 直接计算,所以数学上可以为更大的位置生成向量。但“能算出来”不等于模型在训练长度之外就能可靠工作,注意力和其他参数没有见过那个长度分布,仍然要做目标长度评测。不能把它简单说成超长后位置向量会乱套。
相对位置方法直接表达两个 token 的距离或方向,可以把相对距离映射成 bias、embedding 或分桶值,加到 attention score 或 Key、Value 表示中。它并不必然需要存一张完整的 L 乘 L 参数矩阵,很多实现可以按距离即时生成或用 bucket 查表。
RoPE 是另一条常用路线。对位置 m 的向量,它把第 2i 和第 2i+1 个维度看成一个二维对子,按角度 m 乘 θ i 做旋转。m 是 token 的位置,i 是特征维度索引,这两个变量不能混在一起。Query 和 Key 都旋转后,它们的点积会自然带上位置差 m-n,因此兼容标准点积注意力。RoPE 在长上下文上很常用,但原生 RoPE 也不保证无限外推,超过训练长度往往要位置插值、频率缩放或继续训练并验证。
ALiBi 更直接:每个注意力头有一个斜率,在 attention logit 上加入与相对距离成比例的负偏置,让越远的 token 默认受到越大惩罚。它不需要位置 embedding,扩展长度也方便,但是否比 RoPE 好要看任务和训练设置。
工程选型时,我会先确定训练长度与目标长度,再看模型是否需要兼容已有 checkpoint、KV Cache 和 kernel,最后用长文本困惑度、needle retrieval、多跳问答和真实生成任务验证。还要避免拿未核实的模型做例子,比如 ChatGLM-6B 讨论的是二维 RoPE 语境,不应当被列成 ALiBi 代表。
验证长上下文时也不能只看一个 needle 命中率。我会同时检查短上下文能力是否回退、不同相对距离上的注意力、困惑度随长度变化,以及真实长文中的顺序、引用和多跳任务。这样才能区分位置方案真的外推,还是只对某类人工测试有效。
扩窗改频率后还要检查旧 checkpoint 的兼容性,不能只改最大长度配置就认为完成迁移。
关键一句:正弦位置编码能计算到更长位置,与模型能在该长度可靠泛化是两件事。
核验来源
面试官还可能这样问
- 问法 1 · 场景切入
我们有个搜索推荐场景,文档库长度会动态变化,比如从几千跳到几万。你负责给Transformer加位置编码,怎么保证模型在长序列上还能正常推理?
- 问法 2 · 层层追问
Transformer怎么知道token顺序的?……那如果训练时最大长度512,线上来了1024的序列,位置编码能直接工作吗?……你刚才提到了外推性,那具体哪些编码方法外推性好?
- 问法 3 · 直球架构
对比一下绝对位置编码、相对位置编码、RoPE和ALiBi这四种方法,直接从原理、外推性和应用场景说,不用展开细节。