位置编码是 Transformer 架构中一个看似简单却深刻的设计问题。自注意力机制本身是位置无关的——它对输入序列的排列不变,这意味着同一个句子打乱词序后,自注意力的计算逻辑完全不变。然而语言的本质是序列性的,“猫吃鱼"和"鱼吃猫"含义截然不同。位置编码的使命,就是将序的结构注入一个天生无视顺序的机制中。

在众多位置编码方案中,Rotary Position Embedding(RoPE)独树一帜:它用绝对位置的方式编码,却在注意力分数中自动实现了相对位置的效果。这种"用绝对编码实现相对位置"的优雅性质,源自复数乘法的一个古老几何事实——乘以 eiθe^{i\theta} 就是旋转。

绝对与相对:位置编码的核心矛盾

位置编码方案大致分为两族。绝对位置编码为每个位置 mm 指定一个向量 pm\mathbf{p}_m,将其加到 token 嵌入上:

x~m=xm+pm\tilde{\mathbf{x}}_m = \mathbf{x}_m + \mathbf{p}_m

原始 Transformer 的 Sinusoidal 编码和 BERT 的可学习位置编码都属于此类。绝对编码简单直接,但有一个根本缺陷:注意力分数 qmTkn\mathbf{q}_m^T \mathbf{k}_n 展开后为 (xm+pm)T(xn+pn)(\mathbf{x}_m + \mathbf{p}_m)^T(\mathbf{x}_n + \mathbf{p}_n),位置信息以 pmTxn+xmTpn+pmTpn\mathbf{p}_m^T \mathbf{x}_n + \mathbf{x}_m^T \mathbf{p}_n + \mathbf{p}_m^T \mathbf{p}_n 的形式混入,没有任何一项只依赖 mnm - n。模型必须通过学习来间接捕捉相对位置关系。

相对位置编码则直接让注意力分数依赖位置差:

Attn(m,n)=f(qm,kn,mn)\text{Attn}(m, n) = f(\mathbf{q}_m, \mathbf{k}_n, m - n)

T5 的偏置项、Transformer-XL 的缓存机制都是相对编码的代表。它们在原理上更优雅,但在工程实现上往往更复杂,尤其是需要修改注意力计算的内核。

RoPE 提供了一个出人意料的第三条路:用绝对位置的方式对 Query 和 Key 分别施加变换,使得它们的内积自然只依赖相对位置。不需要修改注意力公式,不需要额外的偏置项——只需要让向量"旋转"起来。

复数乘法即旋转

一切的起点是 Euler 公式:

eiθ=cosθ+isinθe^{i\theta} = \cos\theta + i\sin\theta

在复平面上,eiθe^{i\theta} 是单位圆上的一个点。将任意复数 z=reiϕz = re^{i\phi} 乘以 eiθe^{i\theta},得到:

zeiθ=rei(ϕ+θ)z \cdot e^{i\theta} = re^{i(\phi + \theta)}

效果是将 zz 绕原点旋转角度 θ\theta,模长不变。这就是"复数乘法 = 旋转"的几何意义。

现在考虑二维嵌入的情况。将 token 在位置 mm 的 Query 向量 q=(q1,q2)\mathbf{q} = (q_1, q_2) 视为复数 q=q1+iq2q = q_1 + iq_2,对其施加旋转 eimθe^{im\theta}

qm=(q1+iq2)eimθ=(q1cosmθq2sinmθ)+i(q1sinmθ+q2cosmθ)q_m = (q_1 + iq_2) \cdot e^{im\theta} = (q_1 \cos m\theta - q_2 \sin m\theta) + i(q_1 \sin m\theta + q_2 \cos m\theta)

对位置 nn 的 Key 向量 k=(k1,k2)\mathbf{k} = (k_1, k_2) 施加同样的旋转:

kn=(k1+ik2)einθk_n = (k_1 + ik_2) \cdot e^{in\theta}

两者的内积(在复数语境下取实部)为:

Re[qmkn]=Re[(q1+iq2)eimθ(k1+ik2)einθ]\text{Re}[q_m \cdot \overline{k_n}] = \text{Re}\left[(q_1 + iq_2)e^{im\theta} \cdot \overline{(k_1 + ik_2)e^{in\theta}}\right]

利用 einθ=einθ\overline{e^{in\theta}} = e^{-in\theta},上式简化为:

Re[(q1+iq2)(k1ik2)ei(mn)θ]\text{Re}\left[(q_1 + iq_2)(k_1 - ik_2) \cdot e^{i(m-n)\theta}\right]

关键观察:内积中与位置相关的部分只剩 ei(mn)θe^{i(m-n)\theta},它仅依赖于相对位置 mnm - n。这正是 RoPE 的核心性质。

复平面旋转与相对位置内积
Loading visualization...
左:复平面上 q(蓝色)与 k(红色)随位置旋转;右:内积随相对位置 m−n 的衰减曲线

从可视化中可以直观看到:无论绝对位置 mmnn 如何变化,只要 mnm - n 固定,内积值就固定——这正是"用绝对编码实现相对位置"的含义。

从复数到矩阵:二维旋转的代数形式

将复数乘法 zeiθz \cdot e^{i\theta} 写成矩阵-向量乘法的形式。设 z=x+iyz = x + iy,则:

zeiθ=(x+iy)(cosθ+isinθ)=(xcosθysinθ)+i(xsinθ+ycosθ)z \cdot e^{i\theta} = (x + iy)(\cos\theta + i\sin\theta) = (x\cos\theta - y\sin\theta) + i(x\sin\theta + y\cos\theta)

对应矩阵乘法:

(xcosθysinθxsinθ+ycosθ)=(cosθsinθsinθcosθ)(xy)\begin{pmatrix} x\cos\theta - y\sin\theta \\ x\sin\theta + y\cos\theta \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}

这就是二维旋转矩阵 R(θ)\mathbf{R}(\theta)。对位置 mm 的 Query 向量施加旋转角度 mθm\theta

R(mθ)q=(cosmθsinmθsinmθcosmθ)(q1q2)\mathbf{R}(m\theta)\mathbf{q} = \begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix} \begin{pmatrix} q_1 \\ q_2 \end{pmatrix}

旋转矩阵有一个关键性质:R(α)TR(β)=R(βα)\mathbf{R}(\alpha)^T \mathbf{R}(\beta) = \mathbf{R}(\beta - \alpha)。这可以验证:

R(mθ)TR(nθ)=R((nm)θ)\mathbf{R}(m\theta)^T \mathbf{R}(n\theta) = \mathbf{R}((n-m)\theta)

因此:

(R(mθ)q)T(R(nθ)k)=qTR(mθ)TR(nθ)k=qTR((nm)θ)k(\mathbf{R}(m\theta)\mathbf{q})^T (\mathbf{R}(n\theta)\mathbf{k}) = \mathbf{q}^T \mathbf{R}(m\theta)^T \mathbf{R}(n\theta) \mathbf{k} = \mathbf{q}^T \mathbf{R}((n-m)\theta) \mathbf{k}

内积只依赖相对位置 nmn - m。这个二维的优美结果,自然引出一个问题:如何推广到高维?

高维推广:分块对角旋转矩阵

Transformer 的隐藏维度 dd 通常是 64 的倍数(如 4096),远大于 2。RoPE 的推广方式是:将 dd 维向量分成 d/2d/2 个二维子空间,在每个子空间上独立施加不同频率的旋转。

具体地,将 qRd\mathbf{q} \in \mathbb{R}^d 分成 d/2d/2 对:

q=(q1,q2,q3,q4,,qd1,qd)\mathbf{q} = (q_1, q_2, q_3, q_4, \ldots, q_{d-1}, q_d)

对第 ii(q2i1,q2i)(q_{2i-1}, q_{2i}) 施加旋转角度 mθim\theta_i,其中频率参数:

θi=100002i/d,i=1,2,,d/2\theta_i = 10000^{-2i/d}, \quad i = 1, 2, \ldots, d/2

整体写成矩阵形式,得到分块对角旋转矩阵:

R(Θ,m)=(cosmθ1sinmθ1sinmθ1cosmθ1cosmθ2sinmθ2sinmθ2cosmθ2cosmθd/2sinmθd/2sinmθd/2cosmθd/2)\mathbf{R}(\Theta, m) = \begin{pmatrix} \cos m\theta_1 & -\sin m\theta_1 & & & & \\ \sin m\theta_1 & \cos m\theta_1 & & & & \\ & & \cos m\theta_2 & -\sin m\theta_2 & & \\ & & \sin m\theta_2 & \cos m\theta_2 & & \\ & & & & \ddots & \\ & & & & & \cos m\theta_{d/2} & -\sin m\theta_{d/2} \\ & & & & & \sin m\theta_{d/2} & \cos m\theta_{d/2} \end{pmatrix}

由于分块对角结构,各个二维子空间的旋转相互独立,内积仍然是各子空间旋转内积之和:

qTR(Θ,m)TR(Θ,n)k=qTR(Θ,nm)k=i=1d/2[(q2i1,q2i)R((nm)θi)(k2i1k2i)]\mathbf{q}^T \mathbf{R}(\Theta, m)^T \mathbf{R}(\Theta, n) \mathbf{k} = \mathbf{q}^T \mathbf{R}(\Theta, n-m) \mathbf{k} = \sum_{i=1}^{d/2} \left[(q_{2i-1}, q_{2i}) \mathbf{R}((n-m)\theta_i) \begin{pmatrix} k_{2i-1} \\ k_{2i} \end{pmatrix}\right]

相对位置性质在高维下依然成立。

频率 θi=100002i/d\theta_i = 10000^{-2i/d} 的选择使得低维对(ii 小)旋转快、高维对(ii 大)旋转慢。这创造了一种多分辨率的编码:低频分量捕捉长距离的粗粒度位置关系,高频分量捕捉短距离的细粒度位置关系。

高维旋转矩阵的分块结构与频率分布
Loading visualization...
8 维旋转矩阵的分块对角结构,不同颜色表示不同频率的旋转块;滑块控制位置 m

从可视化中可以清晰看到分块对角结构的两个关键特征。第一,每个 2×22 \times 2 旋转块独立运作,块与块之间没有耦合,这保证了内积的可分解性。第二,不同块的旋转频率差异巨大——θ1=100002/80.0316\theta_1 = 10000^{-2/8} \approx 0.0316,而 θ4=100008/8=0.0001\theta_4 = 10000^{-8/8} = 0.0001,前者在位置 m200m \approx 200 处就完成一个完整旋转,后者需要 m60000m \approx 60000。这种对数间距的频率分布,使得不同尺度的位置信息都能被有效编码。

RoPE 与 Sinusoidal 的关系

原始 Transformer 的 Sinusoidal 位置编码定义为:

PE(m,2i)=sin(m100002i/d),PE(m,2i+1)=cos(m100002i/d)\text{PE}(m, 2i) = \sin(m \cdot 10000^{-2i/d}), \quad \text{PE}(m, 2i+1) = \cos(m \cdot 10000^{-2i/d})

这与 RoPE 的旋转角度 θi=100002i/d\theta_i = 10000^{-2i/d} 完全一致。事实上,如果将 Sinusoidal 编码的 (sinmθi,cosmθi)(\sin m\theta_i, \cos m\theta_i) 视为单位圆上的一个点,那么 RoPE 的旋转操作就是在复数乘法层面利用了同一组频率。

两者的区别在于作用方式。Sinusoidal 将位置向量加到嵌入上,是一种加性编码;RoPE 将位置信息乘到嵌入上,是一种乘性编码。加性编码无法保证内积只依赖相对位置,因为加法的结构不够"刚性”。而旋转操作保持了向量长度,且旋转的复合是可交换的群运算,这使得 R(mθ)TR(nθ)=R((nm)θ)\mathbf{R}(m\theta)^T \mathbf{R}(n\theta) = \mathbf{R}((n-m)\theta) 的性质在高维下自然成立。

从这个角度看,RoPE 是 Sinusoidal 的推广:它继承了 Sinusoidal 的频率选择,但将作用方式从加法升级为乘法(旋转),从而获得了相对位置不变性这一关键性质。

完备性分析:为什么 RoPE 只能是这个形式

前面的推导展示了分块对角旋转矩阵如何实现"内积只依赖相对位置"这一性质。一个自然的问题是:这是唯一的构造方式吗?是否存在其他形式的编码也能满足同样的性质?

苏剑林在《旋转位置编码的完备性分析》中给出了严格的回答:在一定条件下,RoPE 的分块对角旋转矩阵形式是唯一满足"内积只依赖相对位置"要求的编码方式。

这个结论的证明思路如下。设位置 mm 处的变换为 ϕ(m,x)\boldsymbol{\phi}(m, \mathbf{x}),要求内积 ϕ(m,q)Tϕ(n,k)\boldsymbol{\phi}(m, \mathbf{q})^T \boldsymbol{\phi}(n, \mathbf{k}) 只依赖 mnm - n(和 q,k\mathbf{q}, \mathbf{k})。这意味着存在函数 gg 使得:

ϕ(m,q)Tϕ(n,k)=g(mn,q,k)\boldsymbol{\phi}(m, \mathbf{q})^T \boldsymbol{\phi}(n, \mathbf{k}) = g(m - n, \mathbf{q}, \mathbf{k})

q\mathbf{q}k\mathbf{k} 的线性性约束(变换必须是线性的,否则无法在注意力框架中高效计算)将 ϕ(m,)\boldsymbol{\phi}(m, \cdot) 限定为线性变换,即 ϕ(m,x)=M(m)x\boldsymbol{\phi}(m, \mathbf{x}) = \mathbf{M}(m) \mathbf{x}。内积条件变为:

qTM(m)TM(n)k=g(mn,q,k)\mathbf{q}^T \mathbf{M}(m)^T \mathbf{M}(n) \mathbf{k} = g(m - n, \mathbf{q}, \mathbf{k})

这意味着 M(m)TM(n)\mathbf{M}(m)^T \mathbf{M}(n) 只依赖 mnm - n。满足这个条件的矩阵族 {M(m)}\{\mathbf{M}(m)\} 在适当正则性条件下只能是分块对角的正交矩阵——即 RoPE 的形式。更具体地,对 Self-Attention 而言,分块对角 RoPE 不损失一般性,因为任何更一般的编码形式都可以通过相似变换吸收到线性层参数 WQ,WKW_Q, W_K 中,等价于分块对角 RoPE。

但这个完备性结论对 Linear Attention 并不成立。在 Linear Attention 中,注意力计算为 ϕ(qm)Tϕ(kn)\phi(\mathbf{q}_m)^T \phi(\mathbf{k}_n)(其中 ϕ\phi 是特征映射),相似变换无法像 Self-Attention 那样自由吸收。这意味着对 Linear Attention,可能存在比 RoPE 更好的位置编码方案。反过来看,RoPE 是目前唯一一种可用于线性 Attention 的相对位置编码——T5 偏置等方案需要完整的 softmax 注意力矩阵,无法在线性 Attention 框架中使用。这是 RoPE 区别于其他相对位置编码方案的重要优势。

这个完备性分析回答了一个深层问题:RoPE 的分块对角旋转矩阵形式是"几乎唯一的解",而非"巧妙的构造"。在"线性变换 + 内积只依赖相对位置"的双重约束下,旋转几乎是唯一的出路。

远程衰减:RoPE 的局域性

完备性分析确立了 RoPE 形式的唯一性,而 RoPE 的另一个重要性质——远程衰减——解释了它在实践中为何有效。

苏剑林通过 Abel 变换(分部求和)严格证明了:RoPE 的注意力内积随相对距离 mn|m - n| 增大而衰减。其证明的核心步骤是:将内积 i=1d/2(q2i1k2i1+q2ik2i)cos((mn)θi)+(q2i1k2iq2ik2i1)sin((mn)θi)\sum_{i=1}^{d/2} (q_{2i-1}k_{2i-1} + q_{2i}k_{2i}) \cos((m-n)\theta_i) + (q_{2i-1}k_{2i} - q_{2i}k_{2i-1}) \sin((m-n)\theta_i) 重写为 Abel 求和形式,利用频率 θi\theta_i 的几何级数结构和系数的递减性质,证明当 mn|m - n| \to \infty 时内积趋向于零。

远程衰减的直觉是清晰的:RoPE 的多个频率分量以不同速率旋转,当相对距离增大时,不同频率的旋转角度越来越不同步,正负贡献相互抵消,内积趋向零。高频分量最先失同步,低频分量最后——这与多分辨率编码的设计一致:近处信息由所有频率共同贡献,远处信息主要由低频分量决定,而低频分量本身变化缓慢,对远处位置的区分力有限。

远程衰减性质解释了 RoPE 的局域性:注意力自然集中在邻近位置,这与语言中局部依赖强于远距离依赖的经验观察一致。更重要的是,它为后续长度外推方法的动机提供了基础——正因为 RoPE 具有局域性,超出训练长度时注意力的急剧恶化才成为问题,而各种外推策略其实都是在试图恢复这种局域性。

工程实践:主流 LLM 的选择

RoPE 自 2021 年由苏剑林提出以来,已经成为主流大语言模型的事实标准位置编码方案:

  • LLaMA 系列(Meta):从 LLaMA 1 到 LLaMA 3 均采用 RoPE,是 RoPE 大规模应用的开创者
  • Qwen 系列(阿里):Qwen2.5 和 Qwen3 均使用 RoPE,并通过 NTK-aware 缩放支持超长上下文
  • Mistral 系列:Mistral 7B 和 Mixtral 8x7B 均使用 RoPE
  • DeepSeek 系列:DeepSeek-V2/V3 使用 RoPE,并在 MLA 架构中设计了专门的解耦 RoPE 机制

RoPE 之所以成为主流选择,核心原因在于它在三个维度上同时达到了优秀:

  1. 表达力:多分辨率频率编码使得模型能同时捕捉局部和全局的位置关系
  2. 效率:旋转操作可以在注意力计算中通过 element-wise 乘法高效实现,无需额外的矩阵乘法
  3. 外推性:虽然 RoPE 本身的外推能力有限,但基于 RoPE 的长度外推方法(如 NTK-aware 缩放、YaRN)已经成为长上下文扩展的标准工具

RoPE 的实现还有一个工程细节:标准的 RoPE 将向量按相邻元素配对((q1,q2),(q3,q4),(q_1, q_2), (q_3, q_4), \ldots),而 LLaMA 的实现采用了间隔配对((q1,qd/2+1),(q2,qd/2+2),(q_1, q_{d/2+1}), (q_2, q_{d/2+2}), \ldots)。两种配对方式在数学上等价(只需调整旋转矩阵的排列),但间隔配对在某些硬件上更友好。

小结

RoPE 的优雅在于它将位置编码问题转化为一个几何问题:复平面上的旋转。旋转的核心性质——旋转的复合等价于角度的加法——使得绝对位置的旋转在注意力内积中自然约化为相对位置。从复数到分块对角旋转矩阵的推广保持了这一性质,而对数间距的频率分布则为模型提供了多分辨率的位置感知能力。

这种"用绝对编码实现相对位置"的设计哲学,是 RoPE 区别于所有其他位置编码方案的根本特征。而完备性分析进一步揭示,这并非偶然——在"线性变换 + 内积只依赖相对位置"的约束下,旋转几乎是唯一的出路。远程衰减性质则赋予了 RoPE 天然的局域性,使注意力自然聚焦于邻近位置,这也为后续的长度外推问题埋下了伏笔。理解了这些,就能理解后续关于长度外推、解耦 RoPE 等所有技术发展的内在逻辑。

相关概念


参考文献

  • Su, J. (2021). Transformer升级之路:博采众长的旋转式位置编码. https://kexue.fm/archives/8265
  • Su, J. (2023). Transformer升级之路:旋转位置编码的完备性分析. https://kexue.fm/archives/9403
  • Su, J., et al. (2024). RoFormer: Enhanced Transformer with Rotary Position Embedding. NeuroComputing.