旋转位置编码RoPE:用旋转艺术,解开 Transformer 的位置之谜

283 阅读4分钟

位置编码RoPE:用旋转艺术,解开 Transformer 的位置之谜

RoPE.png 在现代大型语言模型(LLM)的宏伟殿堂中,从 PaLM、Llama 到 GPT-NeoX,一个共同的基石在支撑着它们对序列顺序的理解:旋转位置编码 (Rotary Position Embedding, RoPE)

RoPE 不仅仅是另一种位置编码方案,它是一次优雅的数学推导的产物。它巧妙地以“绝对位置编码”的形式,实现了“相对位置编码”的特性,并顺便解决了传统位置编码与线性 Attention 之间的根本性冲突。

本文将深入探讨 RoPE 背后的数学原理、作者的思考出发点,以及它如何一步步从一个简洁的恒等式,演变为现代 LLM 的核心组件。

1. 问题的起点:我们到底想要什么?

Transformer 模型本身是置换不变 (Permutation-Invariant) 的,它无法感知序列的顺序。为了解决这个问题,我们需要注入位置信息。

  • 原始 Transformer (APE): 使用固定的 sin/cos\sin/\cos 绝对位置编码 (APE) ,将其添加到词元嵌入中。这很管用,但模型必须“学会”如何从 PE(m)PE(m)PE(n)PE(n) 的组合中推断出相对位置 (mn)(m-n)

  • T5 (RPE): 使用相对位置编码 (RPE) ,直接在 N×NN \times N 的 Attention 矩阵上添加一个偏置项 bias(mn)\text{bias}(m-n)。这更直接,但带来了新的问题:

    1. 外推性差: 在 2k 长度上训练的模型,无法推广到 4k。
    2. 与线性 Attention 不兼容: 线性 Attention ( O(N)O(N) ) 的核心就是避免构建 N×NN \times N 矩阵。T5 的 RPE 必须操作这个矩阵,因此两者水火不容。

RoPE 的作者们另辟蹊径。他们提出了一个绝妙的“出发点”:

我们能否设计一个操作 ff,它作用于向量 qq 和它的绝对位置 mm,使得 qqkk 在各自位置 m,nm, n 上经过 ff 操作后,它们的内积 f(q,m),f(k,n)\langle f(q,m), f(k,n) \rangle 只取决于 q,kq, k 和它们的相对位置 (mn)(m-n)

用数学语言来描述这个目标,就是找到一个满足下列恒等式的解 ff

f(q,m),f(k,n)=g(q,k,mn)\langle f(q,m), f(k,n) \rangle = g(q, k, m-n)

同时,为了让这个操作是一个“纯粹”的位置编码,我们希望它在 0 位置不改变原向量:

f(q,0)=qf(q, 0) = q

2. 核心推导:

从复数到 2D 旋转 直接求解 dd 维向量的 ff 非常困难。作者巧妙地将问题简化:先在二维上求解。 二维向量可以被看作复数 qCq \in \mathbb{C}。 二维向量的点积 q,k\langle q, k \rangle 等价于 Re[qk]\text{Re}[qk^*](其中 kk^*kk 的复共轭)。 我们的目标恒等式 ff 变成了:

Re[f(q,m)f(k,n)]=g(q,k,mn) \text{Re}[ f(q,m) f^*(k,n) ] = g(q, k, m-n)

为了求解方便,我们假设一个更强的条件(后续只需取实部即可):

f(q,m)f(k,n)=gcomplex(q,k,mn)f(q,m) f^*(k,n) = g_{\text{complex}}(q, k, m-n)

现在,我们将 ffgg 都写成复数的指数形式:

  • f(q,m)=Rf(q,m)eiΘf(q,m)f(q,m) = R_f(q,m) e^{i\Theta_f(q,m)} ( RfR_f 是模, Θf\Theta_f 是相位)

代入上式,得到:

Rf(q,m)Rf(k,n)ei[Θf(q,m)Θf(k,n)]=Rg(q,k,mn)eiΘg(q,k,mn)R_f(q,m)R_f(k,n) e^{i[\Theta_f(q,m) - \Theta_f(k,n)]} = R_g(q,k,m-n) e^{i\Theta_g(q,k,m-n)}

这个复数等式必须模相等相位相等

前置概念

在我们开始推导 f(q,m)f(k,n)=gcomplex(q,k,mn)f(q,m) f^*(k,n) = g_{\text{complex}}(q, k, m-n) 之前,需要先理解三个关键的复数工具:

1. 复共轭 (Complex Conjugate)
  • 定义: 记为 zz^*。如果 z=a+biz = a+bi,则 z=abiz^* = a-bi

  • 指数形式: 如果 z=ReiΘz = Re^{i\Theta}RR 是模,Θ\Theta 是相位),那么 z=ReiΘz^* = Re^{-i\Theta}

  • 核心作用: 将相位取反

  • 为何重要:

    1. 它是 RoPE 作者定义**复数内积(点积)**的基础: q,k=Re[qk]\langle q, k \rangle = \text{Re}[qk^*]
    2. 它是我们推导 f(k,n)f^*(k,n) 的工具:(eiΘ)=eiΘ(e^{i\Theta})^* = e^{-i\Theta}
2. 模方程 (Modulus Equation)
  • 定义: 这不是一个正式术语,而是我们求解复数等式 Z1=Z2Z_1 = Z_2 时,通过令等式两边的模(幅度 RR相等,得到的第一个实数方程。
  • 原理: Z1=Z2    Z1=Z2Z_1 = Z_2 \implies \|Z_1\| = \|Z_2\|
  • 为何重要: 在我们的推导中,它将 ff 函数的“幅度”信息 RfR_f 分离出来,帮助我们证明 ff 必须是一个纯旋转操作(不改变向量长度)。
3. 相位方程 (Phase Equation)
  • 定义: 类似地,这是求解 Z1=Z2Z_1 = Z_2 时,通过令等式两边的相位(角度 Θ\Theta相等,得到的第二个实数方程。
  • 原理: Z1=Z2    Angle(Z1)=Angle(Z2)Z_1 = Z_2 \implies \text{Angle}(Z_1) = \text{Angle}(Z_2)
  • 为何重要: 它将 ff 函数的“角度”信息 Θf\Theta_f 分离出来。我们对这个方程的求解(ϕ(m)=mθ\phi(m) = m\theta),是 RoPE 旋转角度必须与位置 mm线性关系的直接原因。

总结: 我们利用“复共轭”来构建初始的复数等式,然后使用“模方程”和“相位方程”这套方法,将这个复数等式拆解为两个独立的实数问题(一个关于长度,一个关于角度),从而分别求解。

我们就此得到了两个独立的实数方程:

(1) 模方程 (Magnitude Equation)

R_f(q,m)R_f(k,n)=R_g(q,k,mn)R\_f(q,m)R\_f(k,n) = R\_g(q,k,m-n)

为了满足这个条件,最直接的解是 Rf(q,m)R_f(q,m) 必须与 mm 无关,即 Rf(q,m)=Rf(q)R_f(q,m) = R_f(q)。 应用初始条件 f(q,0)=qf(q,0)=q,我们得到 Rf(q,0)=qR_f(q,0) = \|q\|。 因此, Rf(q,m)=qR_f(q,m) = \|q\|

结论 1: ff 操作不改变向量的长度。它是一个纯粹的旋转操作。

(2) 相位方程 (Phase Equation)

Θf(q,m)Θf(k,n)=Θg(q,k,mn)\Theta_f(q,m) - \Theta_f(k,n) = \Theta_g(q,k,m-n)

这是一个经典的函数方程。我们通过“变量分离”来求解:

  1. n=mn=m,得到 Θf(q,m)Θf(k,m)=Θg(q,k,0)\Theta_f(q,m) - \Theta_f(k,m) = \Theta_g(q,k,0)
  2. 这个 Θg(q,k,0)\Theta_g(q,k,0)mm 无关,所以它等于 m=0m=0 时的值:Θg(q,k,0)=Θf(q,0)Θf(k,0)\Theta_g(q,k,0) = \Theta_f(q,0) - \Theta_f(k,0)
  3. 应用初始条件 f(q,0)=qf(q,0)=q,其相位 Θf(q,0)\Theta_f(q,0) 就是 qq 自己的幅角 Θ(q)\Theta(q)
  4. 因此: Θf(q,m)Θf(k,m)=Θ(q)Θ(k)\Theta_f(q,m) - \Theta_f(k,m) = \Theta(q) - \Theta(k)
  5. 移项: Θf(q,m)Θ(q)=Θf(k,m)Θ(k)\Theta_f(q,m) - \Theta(q) = \Theta_f(k,m) - \Theta(k)
  6. 这个等式左边只与 q,mq,m 相关,右边只与 k,mk,m 相关。要使其对任意 q,kq,k 成立,两边都必须等于一个只与 mm 相关的函数,记为 ϕ(m)\phi(m)
  7. Θf(q,m)=Θ(q)+ϕ(m)\Theta_f(q,m) = \Theta(q) + \phi(m)。又因 Θf(q,0)=Θ(q)\Theta_f(q,0) = \Theta(q),可知 ϕ(0)=0\phi(0) = 0
  8. Θf(q,m)=Θ(q)+ϕ(m)\Theta_f(q,m) = \Theta(q) + \phi(m) 代回原始相位方程:
[Θ(q)+ϕ(m)][Θ(k)+ϕ(n)]=Θ_g(q,k,mn)[\Theta(q) + \phi(m)] - [\Theta(k) + \phi(n)] = \Theta\_g(q,k,m-n)
[Θ(q)Θ(k)]+[ϕ(m)ϕ(n)]=Θg(q,k,mn)[\Theta(q) - \Theta(k)] + [\phi(m) - \phi(n)] = \Theta_g(q,k,m-n)

为使此式成立,[ϕ(m)ϕ(n)][\phi(m) - \phi(n)] 必须是一个只关于 (mn)(m-n) 的函数。唯一的线性解是 ϕ(m)\phi(m) 是一个等差数列,即 ϕ(m)=mθ\phi(m) = m\theta (公差为 θ\theta )。

结论 2: ff 操作将 qq 的原始相位 Θ(q)\Theta(q) 增加了 mθm\theta

(3) 最终解 综合模和相位:

f(q,m)=Rf(q,m)eiΘf(q,m) f(q,m) = R_f(q,m) e^{i\Theta_f(q,m)}
f(q,m)=qei(Θ(q)+mθ) f(q,m) = |q| e^{i(\Theta(q) + m\theta)}
f(q,m)=(qeiΘ(q))(eimθ) f(q,m) = (|q| e^{i\Theta(q)}) \cdot (e^{im\theta})
f(q,m)=qeimθ f(q,m) = q e^{im\theta}

这个解极其简洁:ff 操作就是将二维向量 qq 旋转 mθm\theta 角度。

我们来验证一下它是否满足我们的初衷:

=Re[qeimθkeinθ]=Re[(qk)ei(mn)θ] = \text{Re}[ q e^{im\theta} \cdot k^* e^{-in\theta} ] = \text{Re}[ (qk^*) e^{i(m-n)\theta} ]

这个结果只依赖于 q,kq, k(mn)(m-n)。推导成功!

3. 推广到 dd 维:线性叠加的威力

我们已经成功找到了 2D(复数)情况下的解。那么,如何将其推广到 Transformer 使用的 dd 维向量(例如 d=512d=512)上呢?

关键就在于您提到的**“内积满足线性叠加性”**。

dd 维向量 q\mathbf{q}k\mathbf{k} 的内积 q,k\langle \mathbf{q}, \mathbf{k} \rangle 定义为:

q,k=j=0d1qjkj\langle \mathbf{q}, \mathbf{k} \rangle = \sum_{j=0}^{d-1} q_j k_j

我们可以将这个 dd 维向量**强行“切分”**成 d/2d/2 组 2D 向量:

  • q(0)=(q0,q1)\mathbf{q}^{(0)} = (q_0, q_1)
  • q(1)=(q2,q3)\mathbf{q}^{(1)} = (q_2, q_3)
  • ...
  • q(i)=(q2i,q2i+1)\mathbf{q}^{(i)} = (q_{2i}, q_{2i+1})

dd 维内积 q,k\langle \mathbf{q}, \mathbf{k} \rangle 就可以被拆解为这些 2D 组的内积之和:

q,k=(q0k0+q1k1)q(0),k(0)+(q2k2+q3k3)q(1),k(1)++(qd2kd2+qd1kd1)q(d/21),k(d/21)\langle \mathbf{q}, \mathbf{k} \rangle = \underbrace{(q_0k_0 + q_1k_1)}_{\langle \mathbf{q}^{(0)}, \mathbf{k}^{(0)} \rangle} + \underbrace{(q_2k_2 + q_3k_3)}_{\langle \mathbf{q}^{(1)}, \mathbf{k}^{(1)} \rangle} + \dots + \underbrace{(q_{d-2}k_{d-2} + q_{d-1}k_{d-1})}_{\langle \mathbf{q}^{(d/2-1)}, \mathbf{k}^{(d/2-1)} \rangle}

q,k=i=0d/21q(i),k(i)\langle \mathbf{q}, \mathbf{k} \rangle = \sum_{i=0}^{d/2-1} \langle \mathbf{q}^{(i)}, \mathbf{k}^{(i)} \rangle

RoPE 的 dd 维实现正是利用了这一点:我们不对 dd 维向量 q\mathbf{q} 进行一次 dd 维旋转,而是将其拆分d/2d/2 个 2D 向量,然后对每一组 2D 向量独立地应用我们推导出的 2D 旋转。

dd 维的 RoPE 变换 f(q,m)f(\mathbf{q}, m) 就是一个块对角矩阵 (Block Diagonal Matrix) Rm\mathbf{R}_mq\mathbf{q} 相乘。矩阵的每个 2×22 \times 2 的对角块,都是一个 2D 旋转矩阵,形式与您的(10)式一致(只是 θ\theta 根据不同维度 ii 而变化,记为 θi\theta_i):

f(q,m)=Rmq=(cosmθ0sinmθ00000sinmθ0cosmθ0000000cosmθ1sinmθ10000sinmθ1cosmθ1000000cosmθd/21sinmθd/210000sinmθd/21cosmθd/21)(q0q1q2q3qd2qd1)f(\mathbf{q}, m) = \mathbf{R}_m \mathbf{q} =\begin{pmatrix} \begin{smallmatrix} \cos m\theta_0 & \sin m\theta_0 & 0 & 0 & \cdots & 0 & 0 \\ -\sin m\theta_0 & \cos m\theta_0 & 0 & 0 & \cdots & 0 & 0 \\ 0 & 0 & \cos m\theta_1 & \sin m\theta_1 & \cdots & 0 & 0 \\ 0 & 0 & -\sin m\theta_1 & \cos m\theta_1 & \cdots & 0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & 0 & 0 & \cdots & \cos m\theta_{d/2-1} & \sin m\theta_{d/2-1} \\ 0 & 0 & 0 & 0 & \cdots & -\sin m\theta_{d/2-1} & \cos m\theta_{d/2-1} \end{smallmatrix} \end{pmatrix} \begin{pmatrix} q_0 \\ q_1 \\ q_2 \\ q_3 \\ \vdots \\ q_{d-2} \\ q_{d-1} \end{pmatrix}

这个矩阵 Rm\mathbf{R}_m 在做什么?

  • 它将 q0,q1q_0, q_1 作为一个 2D 向量,并将其旋转 mθ0-m\theta_0 角度。
  • 它将 q2,q3q_2, q_3 作为一个 2D 向量,并将其旋转 mθ1-m\theta_1 角度。
  • ...
  • 它将 qd2,qd1q_{d-2}, q_{d-1} 作为一个 2D 向量,并将其旋转 mθd/21-m\theta_{d/2-1} 角度。

注:在实践中,不同组 ii 使用不同的旋转频率 θi=100002i/d\theta_i = 10000^{-2i/d},这与原始 Transformer 的 sin/cos\sin/\cos 编码的波长设计一致。

最终结论:

当我们计算 dd 维的内积 f(q,m),f(k,n)\langle f(\mathbf{q},m), f(\mathbf{k},n) \rangle 时,根据内积的线性叠加性:

f(q,m),f(k,n)=Rmq,Rnk=i=0d/21(Rmq)(i),(Rnk)(i)\langle f(\mathbf{q},m), f(\mathbf{k},n) \rangle = \langle \mathbf{R}_m \mathbf{q}, \mathbf{R}_n \mathbf{k} \rangle = \sum_{i=0}^{d/2-1} \langle (\mathbf{R}_m \mathbf{q})^{(i)}, (\mathbf{R}_n \mathbf{k})^{(i)} \rangle

右侧的每一项 i\langle \cdot \rangle_i 都是 2D RoPE,它们都只依赖于 (mn)(m-n) 。因此,它们的总和也必然只依赖于 (mn)(m-n)

我们成功地将 2D 的解,通过“分而治之”和“线性叠加”的方式,推广到了任意 dd 维。

4. RoPE 解决了什么核心问题?

RoPE 以其优雅的数学形式,一举解决了多个难题:

  1. 实现了“绝对操作,相对结果”:

    它通过 f(q,m)f(\mathbf{q}, m)(绝对位置 mm)和 f(k,n)f(\mathbf{k}, n)(绝对位置 nn)的独立操作,实现了 ,\langle \cdot, \cdot \rangle 结果只依赖 (mn)(m-n) 的相对特性。

  2. 与线性 Attention 完美兼容(杀手级特性):

    这是 RoPE 最大的工程胜利。传统 RPE (T5-bias) 需要操作 N×NN \times N 矩阵,无法用于线性 Attention。

    RoPE 不操作 N×NN \times N 矩阵。它在 Attention 运算之前,分别“预处理” Q\mathbf{Q}K\mathbf{K} 矩阵(Q~=RmQ,K~=RnK\tilde{\mathbf{Q}} = \mathbf{R}_m \mathbf{Q}, \tilde{\mathbf{K}} = \mathbf{R}_n \mathbf{K})。

    线性 Attention 的 O(N)O(N) 运算 Q~(K~TV)\tilde{\mathbf{Q}} (\tilde{\mathbf{K}}^T \mathbf{V}) 可以照常进行,它甚至“不知道” Q~,K~\tilde{\mathbf{Q}}, \tilde{\mathbf{K}} 已经被旋转过,但相对位置信息已经蕴含在内积中了。

  3. 良好的外推性(后续改进的基础):

    由于 q~,k~=Re[(qk)ei(mn)θ]\langle \tilde{q}, \tilde{k} \rangle = \text{Re}[ (qk^*) e^{i(m-n)\theta} ],随着相对距离 (mn)(m-n) 的增加,Attention 得分会自然地振荡和衰减。这提供了一种比 APE 更自然的“距离越远、关注越少”的归纳偏置。虽然它本身的外推并非完美,但它为后来的 NTK-Aware 和 YaRN 等改进方法提供了坚实的理论基础。

总结

RoPE 是那种在学术界和工业界都“大获全胜”的罕见技术。它从一个简单而深刻的数学恒等式出发,通过严谨的复数推导,最终得到了一个极其简洁的物理解释——旋转。这个简单的旋转操作,不仅统一了绝对位置和相对位置的优点,还解开了 RPE 与线性 Attention 之间的死结,为当今万亿参数模型的上下文扩展打开了大门。