RoPE旋转位置编码理解

1、概述

在 Transformer 中,注意力本身是位置无关的。

RoPE(Rotary Position Embedding)通过一种非常巧妙的方式,把位置信息耦合到注意力结果中,并且让注意力天然感知相对位置。

把向量的每一对维度当作二维平面,在不同位置上按不同角度旋转。

  • 向量本身不变长

  • 旋转角度由位置决定

  • 点积结果天然会包含相对位置信息,而与绝对位置无关

image-20251224221208540

2、线代视角下的数学理解

假设有一段输入中某一个tokens是X,X在注意力机制中有三个向量,分别是Key、Query、Value。

假设 Query 向量的一部分是二维向量:

(1)q=[xy]

位置为 p,对应一个旋转角度 θ_p。

通过一个旋转矩阵:

(2)R(θp)=[cos⁡θp−sin⁡θpsin⁡θpcos⁡θp]

得到位置编码后的 q :

(3)q~p=R(θp)q

Key向量同理:

(4)k~p=R(θp2)k

他们的注意力机制结果是:

(5)q~p⋅k~p2=(R(θp)q)⊤(R(θp2)k)

由于旋转矩阵是正交矩阵:

(6)R(θp)⊤R(θp2)=I,R(θp)⊤=R(−θp)

可得:

(7)q~p⋅k~p2=(R(θp)q)⊤(R(θp2)k)=q⊤R(θp2−θp)k

点积的结果,天然与θp2−θp 相关,且与绝对位置无关。

3、复数视角下的数学理解

在 RoPE多维推广中,我们总是把相邻两维当成一组:

(8)(q2i,q2i+1)

在复数视角下,它可以自然地表示为一个复数:

(9)zi=q2i+iq2i+1

同理,Key 的第 i 组:

(10)wi=k2i+ik2i+1

复数的旋转,则是乘以单位复数;

二维旋转矩阵:

(11)R(θ)=[cos⁡θ−sin⁡θsin⁡θcos⁡θ]

在复数里,对应的操作只需要一行:

(12)z⟶z⋅eiθ

也就是说模长 |z| 不变,只改变相位。

在 RoPE 中,位置 p 对应一个角度 θp。

于是:

(13)z~p=z⋅eiθp

Query 和 Key 的复数表示为:

(14)z~m=zq⋅eiθm,w~n=zk⋅eiθn

分别对应第 m的 Query 和第 n 个位置的Key。

二维实向量点积:

(2)z~m=zqeiθm=a+biw~n=zkeiθn=c+di
(3)q~m⋅k~n=z~m⋅w~n―=zqzk―⋅ei(θm−θn)=(a+bi)(c−di)=ac−adi+bci−bdi2=(ac+bd)+(bc−ad)i

这里的实部可以取到(ac+bd)正好是点积的结果,虚部丢弃:

可以看到在复数视角下取共轭,是为了最后可以构造出点积形式,在这里利用复数特性构造共轭复数作为乘数因子:

(4)q~m⋅k~n

ℜ(z~m⋅w~n―)即可得到ac+bd:

取实部:

(5)ℜ(zqzk―⋅ei(θm−θn))

可得到点积(这里的实部为ac+bd,而虚部为bc-ad,正好是叉积式的旋转量)。