想让大模型在prompt中学习更多示例,这种方法能让你输入更多字符( 二 )


如果只从信息编码的角度看 RoPE,根据神经正切核(NTK)理论,如果输入维度较低且对应的嵌入缺乏高频分量,那么深度神经网络难以学习高频信息 。
为了解决在对 RoPE 嵌入插值时丢失高频信息的问题,Bowen Peng 在上述 Reddit 帖子中提出了 NTK 感知型插值 。这种方法不会对 RoPE 的每个维度进行同等扩展,而是通过更少地扩展高频和更多地扩展低频来将插值压力分散到多个维度 。
在测试中,研究者发现在扩展未经微调的模型的上下文大小方面,这种方法优于 PI 。但是,这种方法有一个重大缺点:由于它不只是一种插值方案,某些维度会被外推入一些「界外」值,因此使用 NTK 感知型插值进行微调的效果不及 PI 。
更进一步说,由于存在「界外」值,理论上的扩展因子就无法准确地描述真实的上下文扩展程度 。在实践中,对于给定的上下文长度扩展,必须将扩展值 s 设置得比期望的扩展值高一点 。
相对局部距离的损失 —— 部分 NTK 插值
对于 RoPE 嵌入,有一个有趣的观察:给定一个上下文大小 L,存在某些维度 d,其中的波长 λ 长于预训练阶段见过的最大上下文长度(λ > L),这说明某些维度的嵌入可能在旋转域中的分布不均匀 。
PI 和 NTK 感知型插值会平等地对待所有 RoPE 隐藏维度(就好像它们对网络有同样的效果) 。但研究者通过实验发现,网络会给某些维度不同于其它维度的待遇 。如前所述,给定上下文长度 L,某些维度的波长 λ 大于或等于 L 。由于当一个隐藏维度的波长大于或等于 L 时,所有的位置配对会编码一个特定的距离,因此研究者猜想其中的绝对位置信息得到了保留;而当波长较短时,网络仅可获得相对位置信息 。
当使用扩展比例 s 或基础变化值 b' 来拉伸所有 RoPE 维度时,所有 token 都会变得与彼此更接近,因为被一个较小量旋转过的两个向量的点积会更大 。这种扩展会严重损害 LLM 理解其内部嵌入之间小的局部关系的能力 。研究者猜测这种压缩会导致模型对附近 token 的位置顺序感到困惑,从而损害模型的能力 。
为了解决这个问题,基于研究者观察到的现象,他们选择完全不对更高频率的维度进行插值 。
他们还提出,对于所有维度 d,r < α 的维度按扩展度 s 线性插值(与 PI 一样,避免出现外推);r > β 的维度就完全不插值(总是外推) 。
使用这一小节描述的技术,一种名为部分 NTK 插值的方法诞生了 。这种改进版方法优于之前的 PI 和 NTK 感知型插值方法,其适用于无微调和已微调模型 。因为该方法避免了对旋转域分布不均匀的维度进行外推,因此就避免了之前方法的所有微调问题 。
动态缩放 —— 动态 NTK 插值
当使用 RoPE 插值方法无微调地扩展上下文大小时,我们希望模型在更长的上下文大小上慢慢地劣化,而不是在扩展度 s 超过所需值时在整个上下文大小上完全劣化 。
在动态 NTK 方法中,扩展度 s 是动态计算的 。
在推理过程中,当上下文大小被超过时,就动态地更改扩展度 s,这样可让所有模型在达到训练的上下文限制 L 时缓慢地劣化而不是突然崩溃式劣化 。
增加用于长距离的平均最小余弦相似度 ——YaRN
即便解决了前面描述的局部距离问题,为了避免外推,也必须在阈值 α 处插值更大的距离 。直觉来看,这似乎不应该是个问题,因为全局距离无需高精度也能区分 token 位置(即网络只需大概知道 token 是在序列的开头、中间或末尾即可) 。
但是,研究者发现:由于平均最小距离随着 token 数量的增加而变得更近,因此它会使注意力 softmax 分布变得更尖(即减少了注意力 softmax 的平均熵) 。换句话说,随着长距离衰减的影响因插值而减弱,网络会「更加关注」更多 token 。这种分布的转变会导致 LLM 输出质量下降,这是与之前问题无关的另一个问题 。
由于当将 RoPE 嵌入插值到更长的上下文大小时,注意力 Softmax 分布中的熵会减少,因此研究者的目标是逆转这种熵减(即增加注意力 logit 的「温度」) 。这可以通过在应用 softmax 之前将中间注意力矩阵乘以温度 t > 1 来完成,但由于 RoPE 嵌入被编码为一个旋转矩阵,就可以简单地按常数因子 √t 来扩展 RoPE 嵌入的长度 。这种「长度扩展」技巧让研究可以不必修改注意力代码,这能大幅简化与现有训练和推理流程的集成,并且时间复杂度仅有 O (1) 。
由于这种 RoPE 插值方案对 RoPE 维度的插值不均匀,因此很难计算相对于扩展度 s 所需的温度比例 t 的解析解 。幸运的是,研究者通过实验发现:通过最小化困惑度,所有 LLaMA 模型都遵循大致相同的拟合曲线:


推荐阅读