从 LLM 的 RoPE 编码到 PI 与 NTK-Aware
出发点
在 Transformer 早期,位置编码通常是绝对位置编码,直接加到 token embedding 上,但这类方法存在几个问题:
- 不显式依赖相对位置关系,模型必须自己推导出来,而大量任务本质上依赖的是相对距离而非绝对位置;
- 可学习 PE 长度外推能力差,正弦风格的 PE 虽然理论上可以外推,但是在注意力层中并不保持结构的一致性,也就是两个 token 相对位置关系相同的时候,不一定能够得到相同的
; - 破坏了注意力的平移不变性,也就是整个序列的平移,在我们看来 token 之间的关系不应该发生变化,但是绝对 PE 做不到这一点;
前置知识:向量的旋转
在二维空间中,旋转
对向量
以上的操作,具有这样的性质:
- 向量的长度不变
- 在这两个向量进行相同的旋转后,两个向量的内积不会发生变化
- 两个向量各自旋转了不同角度以后,它们的点积的变化,只取决于这两个角度的差,与各自转了多少无关。
第 3 点性质的推导:
设有两个原始向量
它们的点积是:
注意看,
旋转矩阵还满足性质:
于是得到:
可以看到,是
方法
相对位置的注意力建模
在 Attention 的计算中,有 Query 和 Key 的交互算子,即
为了让位置注意力机制显式地考虑相对位置
现在目标就变成了,要找到函数
RoPE 旋转矩阵
RoPE (Rotary Positional Embedding)提出的方法就是,用对 token 的旋转来加入位置信息。
引入频率
:token 的 绝对位置索引 :第 个 2D 子空间(embedding 维度按 分组) :attention head 的维度( , 的维度)
也就是说,将 embedding 的每两维看成一个 2D 子空间进行旋转。对于 2D 旋转矩阵,其旋转角度受到当前位置
由此,RoPE 让注意力机制显式地考虑相对位置,相同的相对位置关系可以得到相同的内积变化。
RoPE 中 的底数的影响
影响最长相对距离
我们知道,三角函数具有周期性,要保证两个不同的
在用最大的相对距离
故
注意,我们这里用的是最低频率,其思想是:至少要有维度能够区分开这两个相对位置,这样模型才有区分这两者的能力。我们要做的并不是保证
影响短、中、长程的效果
在维度低的地方,频率高,相对位置的细微变化,会让旋转矩阵的值发生很大的变化。
在维度高的地方,频率低,相对位置的巨大变化,才会让旋转矩阵的值发生很大的变化。
这就决定了:
- 如果
的值变大,那同样的相对距离,其旋转矩阵的差异会变小,梯度信号变弱,只有更长的相对距离才能产生与先前相同的梯度信号,使得中短程变弱。 - 如果
的值变小,那同样的相对距离,其旋转矩阵的差异会变大,能建模的最长距离变短,强行建模长距离将使其出现大量重叠,模型丢失长程的分辨能力。
RoPE 计算简化
将矩阵乘法转化为 element-wise 乘法和加法:
其中:
1 | def rotate_half(x: torch.Tensor) -> torch.Tensor: |
上下文窗口扩展
RoPE 的外推性问题
RoPE 主要解决的是相对位置建模的问题,但是其外推性交叉。
举例来说,如果模型训练时最大只见过
Positional Interpolatiopn (PI)
将更大的位置索引,压缩回到模型训练阶段的位置索引范围内。
假设我们要把上下文窗口扩大
原本训练范围:
优点
- 非常稳定: 所有的旋转角度都落在了训练时的域内,Attention 分数不会崩坏。
- 无需重训练(或只需微调): Meta 在论文中证明,只需极少量的微调(几百步),模型就能适应新的长度。
缺点:丢失了位置编码的分辨率信息。高频与低频以相同的倍数进行缩放,使得相对位置的感知显著减弱,尤其是对相邻 token 的感知减弱。
NTK-Aware Scaled RoPE
在神经网络中,neural tangent kernel (NTK) 是描述无限宽深度神经网络在梯度下降训练过程中演化的核。它最开始由Arthur Jacot, Franck Gabriel, 和Clément Hongler在2018年发表的一篇论文中引入 Neural Tangent Kernel: Convergence and Generalization in Neural Networks
NTK-Aware 不直接修改位置
这样就变成了非线性的变换。当我们将 Base 变大时:
- 对于高频分量(
很小): 的变化非常微小。这意味着高频部分几乎没有被压缩,保留了区分相邻 Token 的能力; - 对于低频分量(
很大): 变化显著,周期被拉长了。这意味着低频部分被有效地内插了,从而适应更长的上下文窗口。