RoPE旋转位置编码详解


1.直观理解

  • 原生的正弦波绝对位置编码(Absolute PE)其实是个“路痴”,它算点积时只能感知距离,根本分不清前后,完全是靠后来不对称的权重矩阵强行“学”出来的方向感。
  • RoPE 则是直接在数学根基上解决这个问题。它的核心理念极其优雅:用绝对位置的计算方式,实现了相对位置的表达。
  • RoPE 的直观理解: 想象词向量是钟表上的一根指针。RoPE 不贴标签,而是根据词的座位号,把指针旋转一个特定的角度。
    • 第 1 个位置,指针顺时针转 10 度。
    • 第 2 个位置,指针顺时针转 20 度。
    • 第 $m$ 个位置,指针顺时针转 $m \times 10$ 度。

why ?

在计算 Attention 打分(点积)时,点积的几何意义是看两个向量的夹角。

假设词 A 在位置 2(转了 20 度),词 B 在位置 5(转了 50 度)。它们在表盘上的相对夹角是多少?是 $50 - 20 = 30$ 度!

你会惊奇地发现,不管它们坐在哪里,只要它们相差 3 个位置,它们的相对旋转角度永远是 30 度。相对位置信息,就这样自然而然地被编码进了点积的结果里。

2.数学推导

RoPE 的推导目标非常明确:我们需要找到一个函数 $f(\cdot)$,当我们用这个函数对 Query 向量 $q$(位置 $m$)和 Key 向量 $k$(位置 $n$)进行位置编码后,它们的内积仅仅是它们自身特征和相对位置 $m-n$ 的函数

用公式表达就是:

为了求解这个方程,RoPE 的作者(苏剑林等)巧妙地借助了二维复平面。

步骤一:复数表示法

假设 $q$ 和 $k$ 是二维平面上的向量,我们可以用复数(欧拉公式)来表示它们:

步骤二:引入旋转

我们定义函数 $f$,它的作用就是给原向量乘上一个旋转因子 $e^{im\theta}$(其中 $\theta$ 是预设的常数频率):

步骤三:点积

在复平面上,两个向量的内积(实数域的点积)等于其中一个复数乘以另一个复数的共轭,再取实部($\text{Re}$):

位置 $m$ 和 $n$ 彻底绑定在了一起,变成了唯一的变量 $(m - n)$。这就意味着,无论绝对位置怎么变,只要相对距离一样,注意力得分的底色就是一样的。而且,因为有了原始向量的初始角度 $\theta_q - \theta_k$ 的加持,此时的 $\cos$ 展开后是不具备对称性的,完美解决了原生位置编码分不清前后的问题!

3.高维空间

刚才的推导是在二维平面里。但在真实的 Transformer 中,$d_{model}$ 是高维的(比如 512 维)。RoPE 的解决思路非常暴力且优雅:把高维空间两两分组,变成一堆二维平面的集合。对于 512 维的向量,我们把它切分成 256 个二维向量:

  • 第 0 维和第 1 维组成一个复平面,用频率 $\theta_0$ 旋转。
  • 第 2 维和第 3 维组成一个复平面,用频率 $\theta_1$ 旋转。

如果写成矩阵的形式,它就是一个分块对角矩阵(Block Diagonal Matrix)

4.总结

  1. 没有额外的参数: RoPE 不需要模型去学习任何新的权重参数,纯数学推演,即插即用。
  2. 绝对与相对的完美融合: 它是在把词向量送入 Attention 前对其本身(绝对位置)进行操作的,但算出来却带着(相对位置)的属性,省去了在 Attention 矩阵 $N \times N$ 上做复杂运算的麻烦。
  3. 极强的外推性(Extrapolation): 因为它本质上是不同频率的波。哪怕遇到了训练时没见过的超长文本,这种旋转的数学规律依然是成立的。

Author: YANG
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source YANG !
  TOC