本文从二维旋转矩阵的定义出发,梳理它的几何意义、代数性质、点积中的相对角度结构,以及复数乘法视角。这些性质会在 RoPE 旋转位置编码 中出现,因此本文可视为理解 RoPE 的数学前置。
一、二维旋转矩阵
1. 基本定义
二维平面中,将向量逆时针旋转角度 θ 的矩阵为:
R(θ)=[cosθsinθ−sinθcosθ]
给定二维向量:
x=[x1x2]
旋转后的向量为:
x′=R(θ)x
即:
[x1′x2′]=[cosθsinθ−sinθcosθ][x1x2]
展开得到:
x1′=x1cosθ−x2sinθ
x2′=x1sinθ+x2cosθ
2. 几何意义
下图把 x 与 x′=R(θ)x 画在同一坐标系中:旋转只改变方向,两个端点与原点的距离保持相同。
二、长度保持与正交性
1. 旋转矩阵的转置
旋转矩阵的转置为:
R(θ)T=[cosθ−sinθsinθcosθ]
注意到:
R(−θ)=[cosθ−sinθsinθcosθ]
因此:
R(θ)T=R(−θ)
2. 正交矩阵
计算 R(θ)TR(θ):
R(θ)TR(θ)=I
因此旋转矩阵是正交矩阵。
对于任意向量 x,旋转后的长度满足:
∥R(θ)x∥2=(R(θ)x)T(R(θ)x)=xTR(θ)TR(θ)x=xTx=∥x∥2
旋转矩阵保持向量长度不变。
3. 点积结构保持
对于两个向量 x,y,若它们同时旋转同一个角度:
(R(θ)x)T(R(θ)y)=xTR(θ)TR(θ)y=xTy
也就是说,同时旋转不会改变两个向量之间的点积。
如果整个坐标系一起旋转,两个向量之间的相对关系不会变化。
三、旋转角度的可加性
1. 两次旋转等于角度相加
先旋转 α,再旋转 β,结果等价于一次旋转 α+β:
R(β)R(α)=R(α+β)
这是旋转矩阵最重要的性质之一。
2. 代数推导
根据三角恒等式:
cos(α+β)=cosαcosβ−sinαsinβ
sin(α+β)=sinαcosβ+cosαsinβ
矩阵相乘可得:
R(β)R(α)=[cos(α+β)sin(α+β)−sin(α+β)cos(α+β)]=R(α+β)
3. 反向旋转
由「二、2」已知 R(θ) 是正交矩阵,即 R(θ)TR(θ)=I,这说明转置与逆矩阵是同一个矩阵:
R(θ)−1=R(θ)T
再结合本节开头的 R(θ)T=R(−θ),两者相拼即可得到旋转的逆矩阵:
R(θ)−1=R(θ)T=R(−θ)
这表示反向旋转同样的角度即可回到原向量。
四、点积中的相对角度
1. 两个向量旋转不同角度
现在考虑两个向量 q,k。下图取 n>m,并暂时将二者的初始方向对齐,以单独显示位置旋转产生的夹角 (n−m)θ;一般情形不要求 q,k 同向,后面的矩阵推导仍然成立。
若 q 旋转角度 mθ,k 旋转角度 nθ,则它们的点积为:
(R(mθ)q)T(R(nθ)k)
利用转置性质:
(R(mθ)q)T(R(nθ)k)=qTR(mθ)TR(nθ)k
又因为:
R(mθ)T=R(−mθ)
所以:
qTR(mθ)TR(nθ)k=qTR(−mθ)R(nθ)k=qTR((n−m)θ)k
2. 相对位置自然出现
最终得到:
(R(mθ)q)T(R(nθ)k)=qTR((n−m)θ)k
这个结果非常关键:点积不再分别依赖 m 和 n,而是通过 n−m 依赖二者的相对距离。
这里的“只依赖相对位置”特指位置变量的进入方式;点积的具体数值仍由内容向量 q,k 共同决定。
五、旋转矩阵与复数乘法
1. 二维旋转矩阵回顾
一个二维向量可以写成:
[xy]
绕原点逆时针旋转角度 θ 时,使用旋转矩阵:
R(θ)=[cosθsinθ−sinθcosθ]
因此:
[x′y′]=R(θ)[xy]=[xcosθ−ysinθxsinθ+ycosθ]
这组公式后面会和复数乘法完全对应。
2. 复数背景知识
欧拉公式给出:
ejθ=cosθ+jsinθ,j2=−1
一个复数 z=x+jy 可以看作复平面上的点 (x,y)。它也可以写成极坐标形式:
z=x+jy=r(cosθ+jsinθ)
其中:
- r=x2+y2:到原点的距离,也就是复数的模;
- θ=atan2(y,x):与 x 轴的夹角,也就是复数的辐角。
3. 复数相乘
设两个复数为:
z1=r1(cosθ1+jsinθ1)
z2=r2(cosθ2+jsinθ2)
根据三角恒等式,它们的乘积展开后可合并为:
z1z2=r1r2[cos(θ1+θ2)+jsin(θ1+θ2)]
可以看到:
- 模相乘:r1r2;
- 角度相加:θ1+θ2。
特别地,如果第二个复数在单位圆上:
z2=ejϕ=cosϕ+jsinϕ
它的模为 1,不会改变长度。因此:
z1ejϕ=r1[cos(θ1+ϕ)+jsin(θ1+ϕ)]
根据极坐标定义,这表示把 z1 绕原点旋转 ϕ 弧度。
因此,ejϕ 可以看作复平面上的旋转算子。
4. 对应回矩阵形式
把二维向量 (x,y) 写成复数 z=x+jy,再乘以单位复数 ejθ:
z′=z⋅ejθ=(x+jy)(cosθ+jsinθ)=xcosθ+jxsinθ+jycosθ+j2ysinθ=(xcosθ−ysinθ)+j(xsinθ+ycosθ)
所以实部和虚部分别是:
{x′=xcosθ−ysinθy′=xsinθ+ycosθ
写回矩阵形式,正好得到:
[x′y′]=[cosθsinθ−sinθcosθ][xy]
因此二维旋转既可以看作矩阵乘法,也可以看作复平面上乘以单位复数。
六、高维向量中的分组旋转
1. 每两个维度一组
RoPE 面对的是高维向量,例如 q,k∈Rd。它不会构造一个完整的 d×d 任意旋转矩阵,而是把相邻两个维度分成一组:
(x0,x1), (x2,x3), …, (xd−2,xd−1)
每组单独进行二维旋转。
2. 块对角矩阵
高维旋转可以写成块对角矩阵:
RΘ(m)=R(mθ0)0⋮00R(mθ1)⋮0⋯⋯⋱⋯00⋮R(mθd/2−1)
其中每个二维子空间有自己的频率 θi。
以 d=4 为例,向量 x=(x0,x1,x2,x3) 按相邻两维分组为 (x0,x1)、(x2,x3),块对角矩阵展开为:
RΘ(m)x=cosmθ0sinmθ000−sinmθ0cosmθ00000cosmθ1sinmθ100−sinmθ1cosmθ1x0x1x2x3=x0cosmθ0−x1sinmθ0x0sinmθ0+x1cosmθ0x2cosmθ1−x3sinmθ1x2sinmθ1+x3cosmθ1
可以看到,前两维只按频率 θ0 旋转,后两维只按频率 θ1 旋转,两组之间没有交叉项。高维旋转本质上就是若干个二维旋转各自独立、并行进行。
3. 为什么需要多个频率
θi 表示角度随位置 m 变化的速率。但单一频率只能表达一种尺度的位置变化,多个频率相当于同时提供不同尺度的位置信号:
- 高频维度变化快,适合刻画局部位置差异;
- 低频维度变化慢,适合刻画较长距离关系。
这与 Sinusoidal 位置编码的多频率设计一脉相承(其频率构造可参见 绝对位置编码)。
七、总结
旋转矩阵有三个对 RoPE 极其重要的性质:保持向量长度、旋转角度可加、不同位置旋转后的点积只依赖相对角度。
特别是:
(R(mθ)q)T(R(nθ)k)=qTR((n−m)θ)k
这说明只要让 query 和 key 根据各自位置旋转,注意力分数中就会自然出现相对位置 n−m。RoPE 正是把这个二维旋转结构扩展到高维 attention 表示中。
参考资料
- RoFormer: Enhanced Transformer with Rotary Position Embedding
- Attention Is All You Need