LLM2021· CLASSIC

RoFormer: Rotary Position Embedding

Su et al.

用二维旋转矩阵编码位置——相对位置天然反映在 query 和 key 的点积里,支持长度外推。

arXiv:2104.09864
#position-encoding#attention#architecture

核心贡献

  • 01位置 m 的向量按角度 mθ 旋转
  • 02关键性质:⟨R(m)q, R(n)k⟩ = ⟨q, R(n-m)k⟩ —— 点积仅依赖相对位置差
  • 03天然支持**推理时外推到训练未见过的长度**
  • 04被 LLaMA、PaLM、Qwen、DeepSeek 等主流模型广泛采用

核心思想

位置编码的两种主流方案:

  • 绝对位置编码(Sinusoidal、Learned):把位置信息加到 token embedding 上,简单但外推差
  • 相对位置编码(T5 bias、ALiBiRoPE):把位置信息直接注入 attention 计算

RoPE 的思路:把位置 m 编码为一个旋转变换。对每一对维度 (2i, 2i+1),按角度 mθ_i 做 2D 旋转:

Rmq=(cosmθisinmθisinmθicosmθi)(q2iq2i+1)R_m q = \begin{pmatrix} \cos m\theta_i & -\sin m\theta_i \\ \sin m\theta_i & \cos m\theta_i \end{pmatrix} \begin{pmatrix} q_{2i} \\ q_{2i+1} \end{pmatrix}

关键等式

旋转矩阵的正交性带来:

Rmq,Rnk=q,Rnmk\langle R_m q, R_n k \rangle = \langle q, R_{n-m} k \rangle

query 和 key 的点积只与它们的相对位置差 (n-m) 有关,与绝对位置 m、n 无关。

外推能力

θi=100002i/d\theta_i = 10000^{-2i/d}

不同维度用不同频率——低维高频、高维低频。训练时见过 0~4K 位置,推理时理论上可以应用到任意长度(虽然实际效果仍会衰减)。

长上下文扩展

  • Position Interpolation (PI):推理时把超长位置压缩到训练范围
  • NTK-aware scaling:非线性调整 θ 的底数
  • YaRN:结合 NTK 和 attention scaling
  • 这些技巧把 RoPE 模型推到 100K+ 上下文
面试视角

面试考点

"RoPE 的 '相对位置编码' 体现在哪里?" 必答——写出 R_m q · R_n k = q · R_{n-m} k。点积形式中位置 m、n 具体值不重要,只有差值 n-m 进入结果。

"为什么不用 ALiBi?" ALiBi 直接给 attention score 加一个位置距离的偏置;优点是极简,缺点是表达能力受限。RoPE 可学习(隐式通过 token embedding 的交互),外推性也好。

"RoPE 怎么实现的?" 工程上不用真的做矩阵乘,用复数表示更高效:把 (q_2i, q_2i+1) 看作 q_2i + i·q_2i+1,乘以 e^(imθ_i) 即完成旋转。

"怎么扩长上下文?" PI/NTK/YaRN 的差异:

  • PI 直接压缩位置索引——简单但破坏原始频率
  • NTK 调整底数——在长距离保留更多信息
  • YaRN 进一步结合 attention temperature 调整

易错点RoPE 只对 Q 和 K 做旋转,不对 V 做——V 不参与位置比较。

相关论文