RoPE 与 ALiBi(位置编码的两条主线)

位置编码的作用是:让模型区分“同一组 token 的不同排列”,并表达相对顺序信息。对于 Transformer 来说,位置相关性最终会体现在 attention logits 上。

本节聚焦两类在 LLM 中非常常见的方法:

  • RoPE(Rotary Position Embedding):通过旋转把位置信息注入到 (Q,K) 中

  • ALiBi(Attention with Linear Biases):直接给 attention logits 加一个随距离变化的 bias

绝对位置编码的基础与示意图见 position_encoding.md


RoPE:把位置变成“旋转”

RoPE 的核心做法是:对每个位置 (t),用一个与 (t) 相关的旋转矩阵 (R_t) 作用在 (Q,K) 上:

[ Q_t’ = R_t Q_t,\quad K_t’ = R_t K_t ]

然后 attention logits 使用旋转后的 (Q’,K’):

[ Q_t’ (K_j’)^\top ]

直觉上:旋转把绝对位置编码成“相位”,从而让 (t-j) 的相对位置信息自然地出现在内积中。

工程收益

  • 相对位置建模能力强

  • 在长上下文(以及外推)上表现通常更好

  • 实现上只作用于 (Q,K),与注意力算子融合友好


ALiBi:在 logits 上加距离偏置

ALiBi 的思想非常直接:对每个注意力分数加上与相对距离相关的线性 bias:

[ \mathrm{score}_{t,j} = \frac{Q_t K_j^\top}{\sqrt{d_k}} + b(t-j) ]

其中 (b(\Delta)) 通常是负斜率乘以距离,使得模型天然偏好近邻 token(但仍允许远距离关注)。

工程收益

  • 极其简单:不改 (Q,K) 的表示,只改 logits

  • 长上下文外推往往更稳(取决于训练与实现细节)


RoPE vs ALiBi:怎么选?

从工程角度给一个经验对比:

  • 想要通用 LLM 配方、社区成熟实现、与主流 checkpoint 兼容:RoPE 更常见

  • 想要更简单的实现、并在某些长上下文外推场景更稳:ALiBi 很有吸引力

最终选择通常受以下因素影响:

  • 你使用的基座模型/生态是否已经固定(Qwen/LLaMA 等多数是 RoPE)

  • 推理框架对 RoPE 融合与长上下文支持是否成熟

  • 目标场景是否强依赖超长上下文外推