RoFormer 提出的旋转位置编码(Rotary Position Embedding),用「乘法旋转」取代「加法偏移」,让 Transformer 的注意力内积天然只依赖相对位置差。如今已成为 LLaMA、Qwen 等主流大模型的标配组件。
Transformer 需要位置信息,但传统做法是把位置向量加到词嵌入上。RoPE 的核心洞察是:把 query 和 key 向量按位置角度旋转,内积就自然只取决于相对位置差 $m - n$,无需显式构造相对位置编码。
与 RNN 的递归和 CNN 的局部窗口不同,Transformer 的自注意力机制对所有位置一视同仁——它是位置无关的(position-agnostic)。如果不注入位置信息,「我喜欢你」和「你喜欢我」对模型来说完全一样。
因此,我们需要某种方式告诉模型每个 token 在序列中的位置。过去五年,位置编码大致沿两条路线演化:
前两种方法都是「加法」——把位置信息加到词嵌入或注意力分数上。RoPE 走了一条不同的路——用「乘法(旋转)」来编码位置,从而让位置信息自然地融入注意力计算。
传统方法的做法是:先把位置向量 $p_m$ 加到词嵌入 $x_m$ 上,再做线性变换得到 query 和 key:
传统:$q_m = W_q(x_m + p_m)$,位置信息通过加法混入嵌入
RoPE 的做法完全不同——先做线性变换,然后把结果向量按位置角度旋转:
RoPE:$q_m = R_m \cdot W_q x_m$,位置信息通过旋转矩阵乘法编码
这个看似简单的改动带来了一个关键优势:当你计算 $q_m^\top k_n$ 时,两个旋转矩阵相乘自动变成 $R_{n-m}$,内积天然只取决于相对位置差。
把位置向量加到嵌入上,然后在注意力公式中展开,手动提取相对位置项。
对 query/key 施加位置相关的旋转,内积自动只包含相对位置。
为了理解为什么旋转能编码位置,我们先看最简单的二维情况。在 2D 平面上,把一个向量旋转角度 $\theta$ 就是左乘旋转矩阵:
$R(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}$
RoPE 的做法是:位置 $m$ 的 token,其 query/key 被旋转 $m\theta$。那么位置 $m$ 的 query 和位置 $n$ 的 key 做内积时:
$q_m^\top k_n = (R(m\theta) \cdot q)^\top (R(n\theta) \cdot k) = q^\top R((n-m)\theta) \cdot k$
结果只取决于 $n - m$,即相对位置差。这是因为旋转矩阵是正交矩阵,$R(a)^\top R(b) = R(b-a)$。
拖动滑块改变位置 $m$,观察 query 向量如何随位置旋转。右侧显示 $q$ 与固定的 $k$(位置 0)的夹角变化。
论文通过复数域的推导严格证明了这个解的唯一性:设 $q = W_q x_m$ 在复数域表示为 $|q|e^{i\theta_q}$,要求内积 $\langle f_q(x_m, m), f_k(x_n, n)\rangle = g(x_m, x_n, m-n)$,则解必须是 $f_q(x_m, m) = (W_q x_m) e^{im\theta}$——即乘以一个纯旋转。
实际模型的维度 $d$ 远大于 2。RoPE 的做法是把 $d$ 维空间拆成 $d/2$ 个独立的 2D 子空间,每个子空间用不同的旋转频率 $\theta_i$:
每个 2D 子空间对应一个不同的旋转频率。低频维度捕获远程依赖,高频维度捕获近距离关系——就像傅里叶变换中不同频率分量各自负责不同尺度的信号。
每个 2D 子空间按不同频率 $\theta_i$ 旋转。低维旋转快(捕获近距离),高维旋转慢(捕获远距离)。
RoPE 不只是数学上优雅,它还具备三个实际优势,这些性质让它成为现代大模型的首选位置编码方案。
论文在机器翻译、预训练语言模型、GLUE 微调和中文长文本任务上验证了 RoPE 的有效性。
预训练 100k 步后,在 GLUE 基准上微调对比 BERT:
| 模型 | MRPC (F1) | SST-2 | QNLI | STS-B | QQP (F1) | MNLI |
|---|---|---|---|---|---|---|
| BERT | 88.9 | 93.5 | 90.5 | 85.8 | 71.2 | 84.6 |
| RoFormer | 89.5 | 90.7 | 88.0 | 87.0 | 86.4 | 80.2 |
RoFormer 在 MRPC、STS-B 和 QQP 上显著优于 BERT;在 SST-2、QNLI 和 MNLI 上 BERT 略胜——这可能与预训练步数有限(仅 100k 步)以及任务类型差异有关。
这是论文最能体现 RoPE 长文本优势的实验——文档长度普遍超过 512 字符:
| 模型 | 验证集 (Acc) | 测试集 (Acc) |
|---|---|---|
| BERT-512 | 64.13% | 67.77% |
| WoBERT-512 | 64.07% | 68.10% |
| RoFormer-512 | 64.13% | 68.29% |
| RoFormer-1024 | 66.07% | 69.79% |
当截断长度为 512 时,RoFormer 与 WoBERT 持平。但当长度扩展到 1024 时,RoFormer 获得了 +1.5% 的绝对提升——这正是 RoPE 序列长度灵活性的体现。
RoPE 的真正影响力远超这篇论文本身的实验。在 2023-2024 年间,几乎所有主流开源大模型——LLaMA、Mistral、Qwen、DeepSeek——都采用了 RoPE 作为位置编码。它成为了 Transformer 长上下文建模的事实标准。
RoPE 的成功揭示了一个深层道理:好的归纳偏置不需要复杂的机制。用旋转代替加法,这个简洁的改动同时解决了绝对/相对位置编码的统一、长序列外推、线性注意力兼容三个问题。
论文也坦诚地指出了两个未解之谜:为什么旋转编码比加法编码收敛更快,以及远程衰减为什么能带来如此显著的长文本优势——这些理论分析仍然是开放问题。