ROPE 阅读苏神博客有感
最近再次推到了 ROPE,又产生了很多疑惑,故而做如下笔记记录。苏神科学空间,原文:https://spaces.ac.cn/archives/8265
一、背景知识
1. 二维向量复数表示
二维向量的复数表示是什么意思?
二维向量的复数表示是指将二维向量 映射为复数 ,其中:
是向量的实部(横坐标),对应实轴方向的分量。
是向量的虚部(纵坐标),对应虚轴方向的分量。
是虚数单位,满足 。
这种表示的本质是将二维向量与复平面中的点或向量一一对应。复数的几何意义在于:
模(长度):复数的模 对应向量的长度。
辐角(相位角):复数的辐角 对应向量与实轴正方向的夹角。
为什么要用复数表示二维向量?
复数表示二维向量的核心优势在于 简化几何变换的运算,尤其是在旋转、缩放等操作中。
复数乘法在几何上可以分解为:
模的乘积:两个复数相乘,其模等于各自模的乘积。
辐角的相加:两个复数相乘,其辐角等于各自辐角的和。
例如,将复数 乘以 (即单位复数表示旋转),结果为:
这相当于将向量 逆时针旋转 角度后的向量。
对比传统方法:
若用矩阵表示旋转,需要计算旋转矩阵:$$
复数乘法直接通过代数运算完成旋转,无需显式构造矩阵。
复数表示的本质是 将代数与几何统一,通过复数的代数性质(如乘法、极坐标形式)高效地描述二维向量的几何变换。这种表示方式在数学理论和工程实践中均具有重要价值。
2. 矩阵
正交矩阵
定义:一个 的实数方阵 满足 ,即其列向量(或行向量)两两正交且为单位向量。
行列式:。
若 ,称为旋转矩阵(纯旋转)。
若 ,称为反射矩阵(包含反射操作)。
逆矩阵:正交矩阵的逆矩阵为其转置,即 。
几何意义:保持向量长度和角度不变,但可能改变方向(反射时反转方向)。
封闭性:正交矩阵的乘积、逆矩阵仍是正交矩阵。
旋转矩阵
定义:行列式为 1 的正交矩阵,即 且 。
几何意义:仅表示纯旋转操作,不改变空间方向(如右手定则)。
迹与旋转角的关系:在三维空间中,旋转矩阵的迹为 ,其中 是旋转角。
封闭性:旋转矩阵的乘积仍为旋转矩阵。
旋转矩阵的乘积:两个旋转矩阵相乘的结果仍为旋转矩阵,其对应的旋转角度是两者的和。例如,。
验证示例(二维空间)
旋转矩阵公式:$$
计算 :$$
二、 ROPE 解释
1. Transformer 的局限性
Transformer 架构的核心是自注意力机制,其计算方式 。这种计算方式的本质是计算 Query 和 Key 之间的点积相似度。
然而,点积操作本身不包含任何位置信息。这意味着,如果我们将输入序列的词序打乱,Transformer 在理论上会得到相同的注意力分数(因为 是对所有 Q 和 K 的点积,与它们的原始顺序无关)。这就是 Transformer 的置换不变性。
为了引入位置信息,传统的做法有:
绝对位置编码 (Absolute PE):将位置编码 直接加到词向量 上,即 ,。
此时 。
这种方法的问题在于,点积结果包含了词向量自身的相似度、词向量与位置编码的交互、以及位置编码自身的相似度。相对位置信息 无法被简洁地表示,并且在外推(训练时没见过的长序列)时表现不佳。
相对位置编码 (Relative PE):尝试直接在 中引入相对位置信息。例如 Shaw et al. (Transformer-XL) 的方法在计算注意力分数时额外考虑相对位置。
RoPE 的目标是设计一种简洁、高效的位置编码方法,使得点积操作天然地包含相对位置信息,并且能够很好地外推。
2. 核心思想:通过旋转引入相对位置
RoPE 的核心思想是:能否找到一种函数 ,它能将位置 的信息编码到向量 中,使得任意两个向量 和 在经过位置编码后,它们的点积只依赖于它们的相对位置 ?
即,我们希望 。
考虑二维向量 ,我们可以将其看作复数 。
复数乘法 对应于在复平面上将 旋转 角。
。
那么 。
这在实数域中,对应于对向量 应用一个旋转矩阵:
$$R(\theta) =
\begin{bmatrix}\cos\theta & -\sin\theta \\sin\theta & \cos\theta\end{bmatrix}$$
所以, 就是将向量 旋转 角。
现在,我们将这个旋转操作应用到我们的 函数中:
令 和 ,其中 是一个与位置相关的角度参数。
那么,它们的点积为:
由于 是正交矩阵,所以 。
由于 是旋转矩阵,有 (两次旋转等价于一次旋转角度之和),
我们得到了一个非常漂亮的结果: 只依赖于相对位置 !这正是我们想要的 形式。
3. 从二维推广到高维
要将二维旋转矩阵进行推广,最直接的思路是,把维度两两分组。假设词向量维度为 d(d 为 2 的倍数):
如此,d 个维度被分为了 d/2 组,θ 也有了分别 d/2 个取值。
在代码实现上可以用以下思路来等效计算 M⋅q,节省资源:
$$M·q= \left [ \begin{matrix} q_0\ q_1\q_2\q_3\\vdots\q_{d-2}\q_{d-1} \end{matrix} \right] \odot \left [ \begin{matrix} \cos m\theta_0\ \cos m\theta_0\ \cos m\theta_1\ \cos m\theta_1\ \vdots\ \cos m\theta_{d/2 - 1}\ \cos m\theta_{d/2 - 1}\ \end{matrix} \right] + \left [ \begin{matrix} -q_1\ q_0\-q_3\q_2\\vdots\-q_{d-1}\q_{d-2} \end{matrix} \right] \odot \left [ \begin{matrix} \sin m\theta_0\ \sin m\theta_0\ \sin m\theta_1\ \sin m\theta_1\ \vdots\ \sin m\theta_{d/2 - 1}\ \sin m\theta_{d/2 - 1}\ \end{matrix} \right]
$$
这样,RoPE 巧妙地将位置信息编码到了 Query 和 Key 向量中,使得它们在计算点积时,天然地反映了相对位置。
4. θ 函数
是 RoPE 中非常关键的参数,它决定了每个维度对的旋转频率。
(1) 的公式
RoPE 中 的计算方式与原始 Transformer 的正弦/余弦位置编码中的频率设置非常相似:
其中:
:维度对的索引,从 到 。
:向量的维度 (hidden size)。
:一个超参数,通常取 (与原始 Transformer PE 相同),LLaMA 1 用的是 ,LLaMA 2 则将其扩展到了 , Qwen3 更是扩展到 1,000,000
(2) 为什么选择 10000 作为基数?
历史借鉴:RoPE 的θ设计借鉴了 Transformer 的 Sinusoidal 位置编码,后者同样使用 10000 作为基数。这种设计保证了不同维度的频率范围合理,且具有一定的外推性(能够处理超出训练长度的序列)。
频率分布:10000 的指数衰减使得不同维度的频率覆盖从高频到低频的连续范围,从而能够捕捉不同尺度的相对位置关系。
(3) θ的作用示例
假设一个 128 维的向量,其θ的计算如下:
第 0 维(i=0):
第 1 维(i=2):
第 64 维(i=128):
结果:低维(如 i=0)的θ较大,对应高频旋转;高维(如 i=64)的θ较小,对应低频旋转。
(4) 远程衰减

从图中可以看到随着相对距离的变大,内积结果有衰减趋势的出现。因此,选择,确实能带来一定的远程衰减性。几乎任意的光滑单调函数都可以,带来远程衰减性。
苏神还试过以为初始化,将视为可训练参数,然后训练一段时间后发现并没有显著更新,因此干脆就直接固定了。
评论