核心要点

  • 说清 RoPE 把位置 m 编码为旋转角度,对 Q/K 向量做二维分块旋转,而非加性嵌入

  • 推导出旋转后 Q·K 的点积只与相对位置 m−n 有关,这是相对位置编码的本质

  • 对比绝对位置编码:RoPE 无需可学习表、支持长度外推、与线性注意力兼容

标准回答

核心思想:RoPE(Rotary Position Embedding)不向输入加位置向量,而是按 token 位置 (m) 对 Query/Key 施加旋转。将向量按维度两两分组,每组以频率 (\theta_i) 旋转角度 (m\theta_i),相当于乘以旋转矩阵 (R_m)。

为什么有效:旋转后注意力点积为 ((R_m q)^\top (R_n k) = q^\top R_{n-m} k),结果只依赖相对距离 (n-m),自然实现了相对位置感知,而绝对编码需要模型自己从绝对位置中学出相对关系。

频率设计:(\theta_i = 10000^{-2i/d}),低维高频、高维低频,兼顾局部与全局。

相比绝对位置编码的优势

  • 无额外参数,不受最大训练长度的硬约束;
  • 点积内蕴相对位置,注意力随距离衰减更自然;
  • 可通过 NTK/位置插值做长度外推;
  • 不破坏向量范数,可与 Flash Attention、线性注意力结合。

详见 LLM 上下文窗口扩展 与 RoPE。

常见误区

⚠️ 常见踩坑

RoPE 不是“加”到 embedding 上的,它是在每层注意力计算时对 Q/K 做旋转;也并非天然支持无限外推,超出训练长度仍需位置插值或 NTK 缩放。

追问

追问 1RoPE 如何做长度外推?

常用位置插值(Position Interpolation)把超长位置线性压缩进训练区间,或用 NTK-aware 缩放调整 base (\theta) 拉低高频,使长上下文衰减更平滑;YaRN 进一步分频段处理。多数方案配合少量长文本微调效果更佳。

追问 2RoPE 与 ALiBi 有何区别?

ALiBi 直接在注意力分数上按相对距离加线性偏置,无可学习参数、外推强但不旋转向量;RoPE 通过旋转隐式编码相对位置,表达更丰富、被主流大模型(LLaMA、Qwen、GLM)采用。

追问 3为什么 RoPE 能与 Flash Attention 兼容?

旋转是正交变换、保持向量范数与点积结构,可在加载 Q/K 后、做 softmax 注意力前逐元素施加,不改变 Flash Attention 的分块在线 softmax 流程,因此可无缝叠加。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。