数学基础旋转矩阵线性代数RoPE

旋转矩阵基础

2025-05-229 分钟

本文从二维旋转矩阵的定义出发,梳理它的几何意义、代数性质、点积中的相对角度结构,以及复数乘法视角。这些性质会在 RoPE 旋转位置编码 中出现,因此本文可视为理解 RoPE 的数学前置。


一、二维旋转矩阵

1. 基本定义

二维平面中,将向量逆时针旋转角度 θ\theta 的矩阵为:

R(θ)=[cos⁡θ−sin⁡θsin⁡θcos⁡θ]R(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}

给定二维向量:

x=[x1x2]x= \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}

旋转后的向量为:

x′=R(θ)xx' = R(\theta)x

即:

[x1′x2′]=[cos⁡θ−sin⁡θsin⁡θcos⁡θ][x1x2]\begin{bmatrix} x_1' \\ x_2' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}

展开得到:

x1′=x1cos⁡θ−x2sin⁡θx_1' = x_1\cos\theta - x_2\sin\theta x2′=x1sin⁡θ+x2cos⁡θx_2' = x_1\sin\theta + x_2\cos\theta

2. 几何意义

下图把 xx 与 x′=R(θ)xx'=R(\theta)x 画在同一坐标系中:旋转只改变方向,两个端点与原点的距离保持相同。

二维向量逆时针旋转并保持长度 第一象限中,原向量 x 从原点指向右上方,经过角度 θ 的逆时针旋转后得到更靠上的 x′。两支向量的端点位于同一条四分之一圆弧上,表示旋转前后长度相等。 二维旋转:方向改变,长度不变 x′ = R(θ)x,正角度表示逆时针旋转 第 1 维 第 2 维 原点 x x′ θ 逆时针 ∥x∥ = r ∥x′∥ = r 端点落在同一条半径 r 圆弧上 ∥x′∥ = ∥x∥

二、长度保持与正交性

1. 旋转矩阵的转置

旋转矩阵的转置为:

R(θ)T=[cos⁡θsin⁡θ−sin⁡θcos⁡θ]R(\theta)^T= \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}

注意到:

R(−θ)=[cos⁡θsin⁡θ−sin⁡θcos⁡θ]R(-\theta)= \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}

因此:

R(θ)T=R(−θ)R(\theta)^T = R(-\theta)

2. 正交矩阵

计算 R(θ)TR(θ)R(\theta)^T R(\theta):

R(θ)TR(θ)=IR(\theta)^T R(\theta)=I

因此旋转矩阵是正交矩阵。

对于任意向量 xx,旋转后的长度满足:

∥R(θ)x∥2=(R(θ)x)T(R(θ)x)=xTR(θ)TR(θ)x=xTx=∥x∥2\|R(\theta)x\|^2 = (R(\theta)x)^T(R(\theta)x) = x^T R(\theta)^T R(\theta)x = x^T x = \|x\|^2

旋转矩阵保持向量长度不变。

3. 点积结构保持

对于两个向量 x,yx,y,若它们同时旋转同一个角度:

(R(θ)x)T(R(θ)y)=xTR(θ)TR(θ)y=xTy(R(\theta)x)^T(R(\theta)y) = x^T R(\theta)^T R(\theta)y = x^T y

也就是说,同时旋转不会改变两个向量之间的点积。

如果整个坐标系一起旋转,两个向量之间的相对关系不会变化。


三、旋转角度的可加性

1. 两次旋转等于角度相加

先旋转 α\alpha,再旋转 β\beta,结果等价于一次旋转 α+β\alpha+\beta:

R(β)R(α)=R(α+β)R(\beta)R(\alpha)=R(\alpha+\beta)

这是旋转矩阵最重要的性质之一。

2. 代数推导

根据三角恒等式:

cos⁡(α+β)=cos⁡αcos⁡β−sin⁡αsin⁡β\cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta sin⁡(α+β)=sin⁡αcos⁡β+cos⁡αsin⁡β\sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta

矩阵相乘可得:

R(β)R(α)=[cos⁡(α+β)−sin⁡(α+β)sin⁡(α+β)cos⁡(α+β)]=R(α+β)R(\beta)R(\alpha)= \begin{bmatrix} \cos(\alpha+\beta) & -\sin(\alpha+\beta) \\ \sin(\alpha+\beta) & \cos(\alpha+\beta) \end{bmatrix} =R(\alpha+\beta)

3. 反向旋转

由「二、2」已知 R(θ)R(\theta) 是正交矩阵,即 R(θ)TR(θ)=IR(\theta)^TR(\theta)=I,这说明转置与逆矩阵是同一个矩阵:

R(θ)−1=R(θ)TR(\theta)^{-1} = R(\theta)^T

再结合本节开头的 R(θ)T=R(−θ)R(\theta)^T = R(-\theta),两者相拼即可得到旋转的逆矩阵:

R(θ)−1=R(θ)T=R(−θ)R(\theta)^{-1}=R(\theta)^T=R(-\theta)

这表示反向旋转同样的角度即可回到原向量。


四、点积中的相对角度

1. 两个向量旋转不同角度

现在考虑两个向量 q,kq,k。下图取 n>mn>m,并暂时将二者的初始方向对齐,以单独显示位置旋转产生的夹角 (n−m)θ(n-m)\theta;一般情形不要求 q,kq,k 同向,后面的矩阵推导仍然成立。

查询向量与键向量旋转后的相对角度 示意图令 q 与 k 的初始方向对齐。q 逆时针旋转 mθ,k 逆时针旋转 nθ,且 n 大于 m;两条旋转后向量之间的夹角为 (n−m)θ,说明点积中的位置依赖只与相对旋转有关。 两个绝对旋转,相减得到相对角度 示意取 n > m;共同初始方向仅用于隔离位置带来的旋转差 q、k 的共同初始方向 原点 R(mθ)q R(nθ)k mθ nθ (n−m)θ 位置 m:q 旋转 mθ 位置 n:k 旋转 nθ 绝对角度各自不同 点积中的位置依赖 m,n → n−m 具体数值仍由 q、k 决定

若 qq 旋转角度 mθm\theta,kk 旋转角度 nθn\theta,则它们的点积为:

(R(mθ)q)T(R(nθ)k)(R(m\theta)q)^T(R(n\theta)k)

利用转置性质:

(R(mθ)q)T(R(nθ)k)=qTR(mθ)TR(nθ)k(R(m\theta)q)^T(R(n\theta)k) = q^T R(m\theta)^T R(n\theta)k

又因为:

R(mθ)T=R(−mθ)R(m\theta)^T = R(-m\theta)

所以:

qTR(mθ)TR(nθ)k=qTR(−mθ)R(nθ)k=qTR((n−m)θ)kq^T R(m\theta)^T R(n\theta)k = q^T R(-m\theta)R(n\theta)k = q^T R((n-m)\theta)k

2. 相对位置自然出现

最终得到:

(R(mθ)q)T(R(nθ)k)=qTR((n−m)θ)k(R(m\theta)q)^T(R(n\theta)k) = q^T R((n-m)\theta)k

这个结果非常关键:点积不再分别依赖 mm 和 nn,而是通过 n−mn-m 依赖二者的相对距离。

这里的“只依赖相对位置”特指位置变量的进入方式;点积的具体数值仍由内容向量 q,kq,k 共同决定。


五、旋转矩阵与复数乘法

1. 二维旋转矩阵回顾

一个二维向量可以写成:

[xy]\begin{bmatrix} x \\ y \end{bmatrix}

绕原点逆时针旋转角度 θ\theta 时,使用旋转矩阵:

R(θ)=[cos⁡θ−sin⁡θsin⁡θcos⁡θ]R(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}

因此:

[x′y′]=R(θ)[xy]=[xcos⁡θ−ysin⁡θxsin⁡θ+ycos⁡θ]\begin{bmatrix} x' \\ y' \end{bmatrix} = R(\theta) \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x\cos\theta-y\sin\theta \\ x\sin\theta+y\cos\theta \end{bmatrix}

这组公式后面会和复数乘法完全对应。

2. 复数背景知识

欧拉公式给出:

ejθ=cos⁡θ+jsin⁡θ,j2=−1e^{j\theta}=\cos\theta+j\sin\theta,\qquad j^2=-1

一个复数 z=x+jyz=x+jy 可以看作复平面上的点 (x,y)(x,y)。它也可以写成极坐标形式:

z=x+jy=r(cos⁡θ+jsin⁡θ)z=x+jy=r(\cos\theta+j\sin\theta)

其中:

  • r=x2+y2r=\sqrt{x^2+y^2}:到原点的距离,也就是复数的模;
  • θ=atan2⁡(y,x)\theta=\operatorname{atan2}(y,x):与 xx 轴的夹角,也就是复数的辐角。

3. 复数相乘

设两个复数为:

z1=r1(cos⁡θ1+jsin⁡θ1)z_1=r_1(\cos\theta_1+j\sin\theta_1) z2=r2(cos⁡θ2+jsin⁡θ2)z_2=r_2(\cos\theta_2+j\sin\theta_2)

根据三角恒等式,它们的乘积展开后可合并为:

z1z2=r1r2[cos⁡(θ1+θ2)+jsin⁡(θ1+θ2)]z_1z_2 =r_1r_2\left[\cos(\theta_1+\theta_2)+j\sin(\theta_1+\theta_2)\right]

可以看到:

  • 模相乘:r1r2r_1r_2;
  • 角度相加:θ1+θ2\theta_1+\theta_2。

特别地,如果第二个复数在单位圆上:

z2=ejϕ=cos⁡ϕ+jsin⁡ϕz_2=e^{j\phi}=\cos\phi+j\sin\phi

它的模为 11,不会改变长度。因此:

z1ejϕ=r1[cos⁡(θ1+ϕ)+jsin⁡(θ1+ϕ)]z_1e^{j\phi} =r_1\left[\cos(\theta_1+\phi)+j\sin(\theta_1+\phi)\right]

根据极坐标定义,这表示把 z1z_1 绕原点旋转 ϕ\phi 弧度。

因此,ejϕe^{j\phi} 可以看作复平面上的旋转算子。

4. 对应回矩阵形式

把二维向量 (x,y)(x,y) 写成复数 z=x+jyz=x+jy,再乘以单位复数 ejθe^{j\theta}:

z′=z⋅ejθ=(x+jy)(cos⁡θ+jsin⁡θ)=xcos⁡θ+jxsin⁡θ+jycos⁡θ+j2ysin⁡θ=(xcos⁡θ−ysin⁡θ)+j(xsin⁡θ+ycos⁡θ)\begin{aligned} z' &=z\cdot e^{j\theta} \\ &=(x+jy)(\cos\theta+j\sin\theta) \\ &=x\cos\theta+jx\sin\theta+jy\cos\theta+j^2y\sin\theta \\ &=(x\cos\theta-y\sin\theta)+j(x\sin\theta+y\cos\theta) \end{aligned}

所以实部和虚部分别是:

{x′=xcos⁡θ−ysin⁡θy′=xsin⁡θ+ycos⁡θ\begin{cases} x'=x\cos\theta-y\sin\theta \\ y'=x\sin\theta+y\cos\theta \end{cases}

写回矩阵形式,正好得到:

[x′y′]=[cos⁡θ−sin⁡θsin⁡θcos⁡θ][xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

因此二维旋转既可以看作矩阵乘法,也可以看作复平面上乘以单位复数。


六、高维向量中的分组旋转

1. 每两个维度一组

RoPE 面对的是高维向量,例如 q,k∈Rdq,k \in \mathbb{R}^{d}。它不会构造一个完整的 d×dd \times d 任意旋转矩阵,而是把相邻两个维度分成一组:

(x0,x1), (x2,x3), …, (xd−2,xd−1)(x_0,x_1),\ (x_2,x_3),\ \dots,\ (x_{d-2},x_{d-1})

每组单独进行二维旋转。

2. 块对角矩阵

高维旋转可以写成块对角矩阵:

RΘ(m)=[R(mθ0)0⋯00R(mθ1)⋯0⋮⋮⋱⋮00⋯R(mθd/2−1)]R_{\Theta}(m)= \begin{bmatrix} R(m\theta_0) & 0 & \cdots & 0 \\ 0 & R(m\theta_1) & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & R(m\theta_{d/2-1}) \end{bmatrix}

其中每个二维子空间有自己的频率 θi\theta_i。

以 d=4d=4 为例,向量 x=(x0,x1,x2,x3)x=(x_0,x_1,x_2,x_3) 按相邻两维分组为 (x0,x1)(x_0,x_1)、(x2,x3)(x_2,x_3),块对角矩阵展开为:

RΘ(m)x=[cos⁡mθ0−sin⁡mθ000sin⁡mθ0cos⁡mθ00000cos⁡mθ1−sin⁡mθ100sin⁡mθ1cos⁡mθ1][x0x1x2x3]=[x0cos⁡mθ0−x1sin⁡mθ0x0sin⁡mθ0+x1cos⁡mθ0x2cos⁡mθ1−x3sin⁡mθ1x2sin⁡mθ1+x3cos⁡mθ1]R_{\Theta}(m)x= \begin{bmatrix} \cos m\theta_0 & -\sin m\theta_0 & 0 & 0 \\ \sin m\theta_0 & \cos m\theta_0 & 0 & 0 \\ 0 & 0 & \cos m\theta_1 & -\sin m\theta_1 \\ 0 & 0 & \sin m\theta_1 & \cos m\theta_1 \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} x_0\cos m\theta_0-x_1\sin m\theta_0 \\ x_0\sin m\theta_0+x_1\cos m\theta_0 \\ x_2\cos m\theta_1-x_3\sin m\theta_1 \\ x_2\sin m\theta_1+x_3\cos m\theta_1 \end{bmatrix}

可以看到,前两维只按频率 θ0\theta_0 旋转,后两维只按频率 θ1\theta_1 旋转,两组之间没有交叉项。高维旋转本质上就是若干个二维旋转各自独立、并行进行。

3. 为什么需要多个频率

θi\theta_i 表示角度随位置 mm 变化的速率。但单一频率只能表达一种尺度的位置变化,多个频率相当于同时提供不同尺度的位置信号:

  • 高频维度变化快,适合刻画局部位置差异;
  • 低频维度变化慢,适合刻画较长距离关系。

这与 Sinusoidal 位置编码的多频率设计一脉相承(其频率构造可参见 绝对位置编码)。


七、总结

旋转矩阵有三个对 RoPE 极其重要的性质:保持向量长度、旋转角度可加、不同位置旋转后的点积只依赖相对角度。

特别是:

(R(mθ)q)T(R(nθ)k)=qTR((n−m)θ)k(R(m\theta)q)^T(R(n\theta)k)=q^T R((n-m)\theta)k

这说明只要让 query 和 key 根据各自位置旋转,注意力分数中就会自然出现相对位置 n−mn-m。RoPE 正是把这个二维旋转结构扩展到高维 attention 表示中。


参考资料

  1. RoFormer: Enhanced Transformer with Rotary Position Embedding
  2. Attention Is All You Need
旋转矩阵线性代数RoPE