一、目录
- 定义
- 如何提高模型的外推能力?
- 分类
- 测评方法
- 各技术点,以及应用模型,优缺点
- 支持模型长上下文的方案「NTK-aware interpolation」的思路是什么?
- LLM长度外推方案NTK-by-parts的思路是什么?
- LLM长度外推方案YaRN是怎做的?
二、实现
-
定义:什么是长度外推性?
长度外推性=短文本训练,长文本预测 -
如何提高模型的外推能力?
寻找或设计合适的位置编码(典型如RoPE);
设计局部注意力机制(局部attention)。 -
分类
一类是事后修改,这类方法的特点是直接修改推理模型,无需微调就能达到一定的长度外推效果,但缺点是它们都无法保持模型在训练长度内的恒等性;
比如NTK-RoPE、YaRN、ReRoPE,KeyNorm等,
另一类自然是事前修改,它们可以不加改动地实现一定的长度外推,但相应的改动需要在训练之前就引入,因此无法不微调地用于现成模型,并且这类方法是否能够Scale Up还没得到广泛认可。
如ALIBI、KERPLE、XPOS以及HWFA等 -
测评方法
-
各技术点,以及应用模型,优缺点
参考:https://zhuanlan.zhihu.com/p/670280576
PoPE: 旋转位置编码
PoPE旋转位置编码具有远程衰减的特性,具体表现为:对于两个词向量,若它们之间的距离越近,则它们的内积分数越高,反之则越低。随机初始化两个向量q和k,将q固定在位置0上,k的位置从0开始逐步变大,依次计算q和k之间的内积。随着q和k的相对距离的增加,它们之间的内积分数呈现出远程衰减的性质。
当推理长度超出RoPE的训练长度 时,为什么模型的性能会下降?
模型在训练时,只见过[0,(L-1)theta] 范围内的旋转弧度,未见过大于(L-1)*theta的旋转弧度,所以当推理长度大于L 时,模型难以理解新的旋转弧度,无法正确注入位置信息,导致模型性能下降。
Position Interpolation 位置线性内插法
缺点:简单粗暴,直接降低旋转速度,导致模型高频信息丢失。
为什么会丢失?
NTK-aware Interpolation(神经正切核(NTK)理论)感知插值
无需训练的技术可以调整比例参数以防止在扩展长度时丢失高频信息。
加入缩放影子alpha。
NTK-by-parts Interpolation
其核心思想是:不改变高频部分,仅缩小低频部分的旋转弧度。也就是不改变靠前分组的旋转弧度,仅减小靠后分组的旋转弧度,这就是by-patrs的含义。
beta 值如何确定?
YaRN
无论是Position Interpolation还是NTK类方法,本质都是通过减小旋转弧度,降低旋转速度,来达到长度扩展的目的。这将导致位置之间的旋转弧度差距变小,词向量之间的距离变得比原来更近,词向量之间的点乘变大,破坏模型原始的注意力分布。所以经过插值之后,模型在原来的训练长度内的困惑度均有所提升,性能受损。
- 支持模型长上下文的方案「NTK-aware interpolation」的思路是什么?
而NTK插值则是一种非线性插值的方法。它通过仅改变RoPE的base,使得位置编码中不同频率的信号有不同的表现,具体来说就是“高频外推,低频内插”。高频信号使用外推,防止分辨率太低,而低频信号沿用插值的方式,实现方便。 - LLM长度外推方案NTK-by-parts的思路是什么?
它认为无论是线性插值还是NTK-aware插值,都认为RoPE的所有分量都对网络有同样的重要性。而NTK-by-parts的思路认为,应该区别对待不同分量,他们对网络的影响有所不同。对于波长远小于上下文长度的分量(如波长<=1/32上下文),就不插值只外推;而对于波长大于等于上下文长度的分量,就只外推不插值;对于介于两者之间的分量,就使用外推和插值的加权和。 - LLM长度外推方案YaRN是怎做的?
PI/NTK/NTK-by-parts主要的做法都是使用插值,而随着插值进行,token之间的距离变得更近(因为现在每一个位置旋转角度变小了),平均最小距离在减小,这样注意力softmax的分布会变得更尖,也就是都集中在某个区间。
换句话说,就是RoPE原本远距离衰减的特性变弱了,衰减得更不明显,就会导致模型更平均地关注到更多的token,这样就削弱了注意力机制,导致输出质量下降。
可以通过在softmax之前,将中间注意力矩阵乘以温度 t>1来缓解这个问题。由于RoPE被编码为一个旋转矩阵,就可以简单地给旋转矩阵乘以一个系数根号t来实现,这样可以不必修改注意力的代码。