演示 / 大语言模型 / RoPE:旋转如何记住相对位置?

RoPE:旋转如何记住相对位置?

把四维 Q、K 拆成两个二维平面。亲手移动 token 位置,观察不同频率的旋转,再用数值验证相对位置恒等式。

分量对 0:高频旋转

分量对 1:低频旋转

中间向量:每步旋转一个分量对

完整旋转的相对位置恒等式

此处预览两对全部旋转后的结果。因为 R(m)ᵀR(n) = R(n − m),同时平移两个位置不会改变内积。

从绝对旋转得到相对关系

θᵢ = b^(−2i/d),d = 4,i ∈ {0, 1} R(pθ)[x,y] = [x cos(pθ) − y sin(pθ), x sin(pθ) + y cos(pθ)]

蓝色为 Q,橙色为 K;虚线是原向量,实线与圆点是当前向量。旋转角为正时逆时针。不同二维分量对使用不同频率,而不是所有维度转同一个角度。调节两个方向会改变原始向量,两个平面中的向量长度固定。

试一试:把 m、n 都增加 1,比较完整内积;再让 m = n,比较旋转前后的内积。b 越大,第二对转得越慢,第一对频率保持为 1。

边界:这里仅实现 4 维 RoPE 及内积,不是训练过程或完整语言模型。真实模型维度更高;未实现长上下文缩放变体。此处显示的是未经 √d 缩放和 softmax 的内积,不能直接理解成注意力概率。

对照精读:RoPE · Su 等,RoFormer 原论文(2021)