RoPE 是怎样把位置信息放进 Attention 的?

转动 Q 和 K,让点积看见两个 Token 相隔多远

目录

  先看两个短语:

我 喜欢 苹果
苹果 喜欢 我

  Token 没有变。顺序变了,意思也变了。Attention 必须知道每个 Token 在哪里。

  RoPE 的办法很特别。它不把位置向量加到 Token Embedding 上。它转动 Q 和 K,然后再计算点积。

先记住一句话

RoPE 用绝对位置决定旋转角度,用两个角度的差表示相对距离。

RoPE 从位置编号到 Attention 分数的四步流程

位置编号 → 旋转 Q/K → 计算角度差 → 得到 Attention 分数

1、RoPE 改了哪里

  Attention 先从每个 Token 生成 Q、K、V。

Hidden State → Q、K、V
Q · K        → Attention 分数
Attention × V → 输出

  RoPE 插在“生成 Q、K”和“计算点积”之间:

Q → 按位置旋转 → Q′
K → 按位置旋转 → K′
Q′ · K′       → 带位置信息的分数

  标准 RoPE 不直接修改 V。

疑问:旋转后,原来的 Embedding 变了吗?

  不会。RoPE 改变的是 Q 和 K,不是原始 Token Embedding。

Token ID
  ↓
Token Embedding
  ↓
Hidden State
  ├─ Wq → Q ── RoPE → Q′
  ├─ Wk → K ── RoPE → K′
  └─ Wv → V ─────────→ V

  这里有三层不同的表示:

表示 它是什么
Token Embedding Token 刚进入模型时的初始向量
Hidden State 模型结合上下文后得到的表示
Q、K、V Hidden State 经过三组线性投影得到的临时工作向量

  RoPE 位于 Q、K 生成之后。它不会回头修改 Token Embedding,也不会直接覆盖 Hidden State。

  Q、K 旋转后,数值确实发生了变化。但旋转不是压缩,也不是删除信息。

\[\lVert R_\theta q\rVert=\lVert q\rVert\]

  旋转改变方向,不改变向量长度。它也是可逆的:

\[R_\theta^{-1}=R_{-\theta}\]

  RoPE 真正要改变的是 Q 与 K 的夹角。夹角改变后,点积就会包含位置信息,从而影响 Attention 选择“关注谁”。

Q 和 K 原本表达“我在找什么”和“我能提供什么”。RoPE 让它们在比较时,同时带上“我们相隔多远”。

2、把两维看成一个平面

  先只看 Q 的两个维度。把它们写成平面上的点 (x₁, x₂)。

  位置为 m 时,RoPE 把这个点旋转 mθ:

\[x_1' = x_1\cos(m\theta)-x_2\sin(m\theta)\] \[x_2' = x_1\sin(m\theta)+x_2\cos(m\theta)\]

  旋转只改变方向。它不改变向量长度。

  位置 0 不转。位置 1 转 θ。位置 2 转 2θ。因此,每个绝对位置都有自己的角度。

3、关键是角度差

  假设 Q 在位置 m,K 在位置 n。旋转后再做点积:

\[(R_m q)^\top(R_n k) =q^\top R_m^\top R_n k =q^\top R_{n-m}k\]

  中间的共同旋转会抵消。最后只剩 n-m。

  例如,位置 2 和位置 5 相差 3。位置 20 和位置 23 也相差 3。对于同一组 Q、K 内容向量,这两组位置产生相同的相对旋转。

  这就是 RoPE 最关键的性质:它用绝对位置完成旋转,却让 Q、K 点积自然包含相对位置。

4、动手改变两个位置

  下面是一个二维玩具模型。Q 和 K 使用相同的单位向量,只保留位置带来的影响。真实模型的分数还包含 Token 内容、不同维度和缩放。

RoPE 二维旋转实验改变 Q 和 K 的位置,观察旋转角度、相对距离与点积。 Q 按 mθ 旋转K 按 nθ 旋转
相对距离 n−m3
相对角度60°
位置项 cos(Δ)0.50

位置 2 与位置 5 相差 3。把两者同时向后移动,角度差和位置项保持不变。

5、真实模型不只转一个平面

  真实 Q、K 有很多维。RoPE 把维度两两配对,并给每一对不同的频率。

维度组 角度变化 直观作用
高频组 变化快 区分邻近位置
中频组 变化适中 表示中等距离
低频组 变化慢 覆盖更长距离

  可以把这些频率看成多把尺子。短尺子看近处。长尺子看远处。模型同时使用它们。

6、为什么不旋转 V

  Q 和 K 决定“关注谁”。它们的点积产生 Attention 分数。

  V 保存要汇总的内容。RoPE 的目标是把位置放进相关性分数。因此,标准做法旋转 Q、K,不直接旋转 V。

7、长上下文为什么仍需验证

  RoPE 可以为更大的位置编号计算角度。但能计算不等于能理解。

  模型可能没有在长序列上训练。高频分量也可能在很远的位置产生陌生的相位模式。因此,扩展上下文常会调整位置或频率,例如线性缩放、动态 NTK 或 YaRN。

  判断扩展是否有效,不能只看配置中的最大长度。还要测试长文本检索、困惑度和推理任务。

容易混淆的 4 件事

  1. RoPE 不旋转 Token ID,也不是直接旋转原始文字。
  2. RoPE 作用于 Attention 中的 Q、K。
  3. 相对距离进入点积,不表示模型只知道相对位置。
  4. 更长的可计算位置不保证更长的有效上下文。

记住这 5 件事

  1. RoPE 把向量维度两两配对。
  2. 位置编号决定每一对的旋转角度。
  3. Q 和 K 都要旋转。
  4. 点积中的共同旋转会抵消,留下相对位置。
  5. 多种频率负责不同距离尺度。

8、一分钟视频讲解

  视频时长约 71 秒。画面、旁白和字幕按下面的分镜同步生成。

时间画面旁白
00–08 秒“我喜欢苹果”与“苹果喜欢我”交换位置。Token 相同,顺序不同,意思就不同。Attention 需要知道 Token 在哪里。
08–20 秒Q、K 两支箭头出现在坐标轴上。RoPE 不把位置向量加到输入。它把 Q 和 K 的维度两两配对,再按位置旋转。
20–34 秒位置 2 的 Q 转 2θ;位置 5 的 K 转 5θ。位置决定绝对角度。位置越靠后,旋转越多。
34–48 秒两个角度合并为差值 3θ,公式变成 R(n−m)。计算点积时,共同旋转会抵消。最后留下的是两个位置的差。
48–60 秒多组快慢不同的圆环同时旋转。不同维度使用不同频率。模型因此能同时观察近距离和远距离。
60–70 秒Q、K 高亮,V 保持不动;出现总结句。记住:RoPE 用绝对位置旋转 Q 和 K,让 Attention 的点积看见相对距离。

参考资料

第十二课复习总图

RoPE 第十二课复习总图

第十二课复习总图,点击查看原始 SVG

  下一课比较 MHA、MQA、GQA 与 MLA:它们共享或压缩了什么?