Transformer 模型本身不具备对序列位置信息的感知能力。为此,学术界提出了各类位置编码方案(如绝对位置编码和相对位置编码)。这篇论文提出了一种革命性的方法——旋转位置编码(Rotary Position Embedding, RoPE)。它通过将绝对位置编码转换为复数域上的旋转矩阵,并在计算自注意力时对向量进行相乘,巧妙地在自注意力机制中隐式融入了精确的相对位置信息。该方法具备高度的序列长度外推灵活性、符合直觉的相对距离衰减特性,并且完美兼容线性注意力机制。
在自然语言理解中,单词的前后序列顺序对语义建模至关重要。自注意力机制(Self-Attention)在捕获全局上下文方面极其强大,但它的架构天然是“位置无关”的。为了打破这种对称性,我们需要将位置信息注入模型。
在 RoPE 提出之前,主流方案主要分为两类,但它们都存在明显妥协:
如何设计一种位置编码机制,既能在底层保留每个 token 的绝对位置,又能在注意力运算时自动显现出纯粹的相对位置关系,并且不改变点积乘法的结构?
RoPE 的解答:不相加,只旋转。
RoPE 的推导极其优美,核心思想在于使用复平面旋转来表达位置的变化。
| 符号 | 含义描述 |
|---|---|
| $x_m, x_n$ | 序列中第 $m$ 个和第 $n$ 个位置的词嵌入向量,维度为 $d$。 |
| $q_m, k_n$ | 融入了位置信息后的 Query 和 Key 向量。 |
| $\langle q_m, k_n \rangle$ | Query 和 Key 在注意力机制中的内积运算。 |
| $\theta$ | 旋转的基准角度超参数(多维时有 $\theta_i$)。 |
论文希望寻找一种特殊的函数 $f_q$ 和 $f_k$,将位置信息 $m, n$ 编码到向量后,两者的点积结果 $g$ 仅依赖于输入向量 $x_m, x_n$ 以及它们的相对距离 $m-n$:
假设隐层维度 $d=2$。我们利用二维平面向量的复数几何特性。如果将向量表示为复数,要让两个复数的内积只取决于它们的角度差,最好的方法就是给它们分别乘以一个与绝对位置成正比的旋转因子 $e^{im\theta}$。推导后论文给出了以下解:
在这个解下,Query 和 Key 的内积天然满足相对位置关系:
为了将 2D 推广到 $d$ 维,论文将 $d$ 维空间两两划分为 $d/2$ 个相互独立的 2D 子空间。对每个子空间施加不同旋转频率的旋转。这就等价于对原本的 $W_q x_m$ 乘上一个块对角旋转矩阵 $R_{\Theta, m}^d$:
其中旋转矩阵由不同的频率 $\theta_i = 10000^{-2i/d}$ 构成,与绝对位置 $m$ 相乘。最终自注意力中的点积计算变为:
物理意义: 由于旋转矩阵的正交性,这表明经过 RoPE 处理后,位置 $m$ 的 Query 寻找位置 $n$ 的 Key 时,实际上等价于在计算没有位置信息的点积之前,先对向量进行了相对距离为 $n-m$ 的旋转。这完美地在绝对编码的形式下实现了相对编码的特性。
由于 $R_{\Theta, m}^d$ 是极其稀疏的块对角矩阵,直接进行矩阵相乘非常低效。论文给出了一种利用元素级操作的高效实现方法:
将向量相邻两项配对计算,伪代码逻辑表达为:
$x_{out} = \begin{pmatrix} x_1 \cos m\theta_1 - x_2 \sin m\theta_1 \\ x_1 \sin m\theta_1 + x_2 \cos m\theta_1 \\ \vdots \end{pmatrix}$
在深度学习框架中,通常会利用切片操作重排特征维度(例如将偶数位和奇数位特征抽出),然后再进行 Hadamard 乘积和加减,时间复杂度降低至 $O(d)$。
为了验证 RoPE 的有效性,作者在各类 NLP 经典任务上进行了广泛实验。(注:本文主要探讨预训练底层架构,未使用 LLM 的 Prompt few-shot 评测体系,而是基于微调评估)
bert-base-uncased。对比 vanilla BERT 与注入了 RoPE 的 RoFormer。这是体现 RoPE 对长序列外推优势的核心实验。
预训练 MLM Loss 曲线(参见原论文 Figure 3 左侧)显示,使用 RoPE 替换了绝对位置编码的 RoFormer,在训练前期和后期的 Loss 均持续低于原生 BERT。证明旋转信息提供了比绝对加法更优越的依赖指导。
微调 3 个 Epoch(Max len 512,学习率遍历 2,3,4,5e-5)。在多项关键指标上超越 Baseline。
| 模型 | MRPC (F1) | SST-2 (Acc) | QNLI (Acc) | STS-B (Corr) | QQP (F1) |
|---|---|---|---|---|---|
| BERT (Devlin 等, 2019) | 88.9 | 93.5 | 90.5 | 85.8 | 71.2 |
| RoFormer (本文) | 89.5 | 90.7 | 88.0 | 87.0 | 86.4 |
💡 解读:在 QQP 问答匹配任务上,RoFormer 相对原版 BERT 带来了惊人的 15.2% 的跃升,MRPC 与 STS-B 也有稳定提升。虽然部分单句分类任务轻微下降,但长依赖匹配任务优势明显。
针对 CAIL2019-SCM,论文分别对比了在最大长度 512 截断和 1024 截断下的表现。
| 模型配置 | 验证集 Acc | 测试集 Acc |
|---|---|---|
| BERT-512 | 64.13% | 67.77% |
| WoBERT-512 | 64.07% | 68.10% |
| RoFormer-512 | 68.29% | 64.13% |
| RoFormer-1024 | 66.07% | 69.79% |
结论机制:当最大输入长度放宽至 1024 时,RoFormer 依然能稳健工作并取得最佳的 69.79% 测试准确率,证明 RoPE 虽然是在较短长度训练的,但具备天然的相对距离约束,使得模型可以较好地泛化到比预训练时更长的序列上(即长度外推性)。
作为审稿人,我会建议:既然复数域旋转赋予了外推性,那么当序列长度达到数十万(100K+)时,固定的 $\theta$ 基底可能会因为高频震荡失去局部精度。是否可以通过插值(Interpolation)而非外推来解决超长文本问题?(剧透:这正是后来基于 RoPE 的 NTK-aware 缩放和 YaRN 所做的事。)
如果你只看这篇论文的实验表格,会觉得它只是一次“涨了几个点的微创新”。
但将时间轴拉到今天,你会发现 RoPE 构成了整个大模型时代的基石。
从 Meta 的 LLaMA 系列,到 Google 的 PaLM,再到国内的 Qwen、ChatGLM 等几乎所有的主流开源大模型,无一例外抛弃了最初的绝对位置编码,全盘采用了 RoPE。为什么?