如何提高大模型的外推能力
?
外推是指模型在处理或理解超出其训练数据范围内的信息时的能力。
通俗来说,就像是让一个人去处理他之前没有直接学习或经验的事情。
举个例子,假设你学过加减乘除,但没有学过代数。
如果有人问你一个代数问题,你可能会觉得困难,因为这超出了你之前学的范围。
但如果你能够运用你所学的知识,去理解和解决这个代数问题,那就说明你具有一定的“外推性”。
在大型语言模型的背景下,外推性指的是模型对于那些它在训练时没有直接接触过的新情况、新问题或更长的文本的处理能力。
一个具有良好外推性的模型能够在面对新颖或未曾直接训练过的数据时,仍然表现出较好的理解和处理能力。
?
增加上下文窗口的微调:这种方法是最直接的。它通过扩大模型的上下文窗口来适应长文本建模的需求。上下文窗口越大,模型就能够处理越长的文本序列。然而,这种方法有其局限性,因为仅仅增加窗口大小并不总是有效地提高模型处理长文本的能力,尤其是在模型需要理解非常长的序列时。
改进的位置编码(如 ALiBi, LeX):这些技术通过实现长度外推来扩展模型的能力,意味着它们可以在短的上下文窗口上进行训练,但在长的上下文窗口上进行推理。这使得模型能够更有效地处理比其训练时所见更长的序列。
插值法:这种方法通过将超出上下文窗口的位置编码压缩到预训练的上下文窗口中,允许模型处理比其原始设计更长的文本。这种技术在保持模型结构不变的情况下,通过对位置编码的智能处理来实现长文本处理的能力。
?
绝对位置编码 vs 相对位置编码
旋转位置编码 (RoPE)
ALiBi 与其他位置编码技术
不同版本的 Baichuan 模型
?
ALiBi,这是一种在 Transformer 模型中使用的相对位置编码技术。
不同于常规的位置编码方法,ALiBi 不在模型的 Embedding 层添加位置信息,而是在计算注意力权重时添加一个静态的、不可学习的偏置项。
理解 ALiBi 的核心在于它如何处理位置信息。
在传统的 Transformer 模型中,位置信息通常是通过添加一个可学习的位置向量到每个 token 的嵌入中实现的。
ALiBi 采用了一种不同的方法:
偏置项的引入:在计算注意力分数时,ALiBi 为 Softmax 函数的输入添加了一个偏置项。
偏置向量的形式:偏置向量的形式为 ( m ? [ ? ( i ? 1 ) , … , ? 2 , ? 1 , 0 ] ) ( m \cdot [-(i-1), \dots, -2, -1, 0] ) (m?[?(i?1),…,?2,?1,0]),其中 i i i 是序列中的位置, m m m 是一个斜率值,它对于模型中的不同注意力头是不同的。
斜率值 ( m ):斜率 m m m 对于模型中每个注意力头都是不同的,它定义为一个几何序列。
图解解释:图中左侧展示的是标准的注意力分数计算,即查询 q i \mathbf{q}_i qi? 和键 k j \mathbf{k}_j kj? 的点积。
归纳偏差:ALiBi 通过这种方式引入了一种归纳偏差,这种偏差倾向于更靠近查询的键。
斜率参数的通用性:经过实验证明,这组斜率参数适用于不同的文本领域和模型大小,并且通常不需要根据新的数据集或模型架构进行调整。
通过这种方式,ALiBi 能够有效地处理长距离的依赖关系,同时减少计算复杂性,因为它不需要学习或更新位置编码。
?
旋转位置编码 (RoPE) 是一种特定的位置编码方式,它使用复数和三角函数来编码单词在序列中的相对位置信息。
RoPE 的设计使得模型的注意力机制能够直接利用相对位置信息,而不是依赖于绝对位置。
RoPE 的核心是将位置编码与词嵌入相结合,形成一种旋转的效果,这有助于模型捕捉长距离依赖关系。
位置索引和嵌入向量:
RoPE位置编码:
注意力分数的依赖:
外推能力问题:
三角函数和基函数:
RoPE的拟合能力和插值结果:
?
位置插值法的核心思想是调整模型理解位置的方式,而不是从头开始重新训练模型。
这个方法像是在数学上进行缩放操作,将一个很长的序列“压缩”成模型能够处理的大小。
这就好比你有一条很长的尺子,但是你的工具箱只能放下一把小尺子。
位置插值法就是将这条长尺子上的刻度间距缩小,这样它就能适应小尺子的长度了。
具体来说,位置插值法通过以下步骤工作:
缩小位置索引:将较长序列中的位置索引缩小(或者说“重映射”),使得序列的最大位置索引与模型在预训练阶段的上下文窗口限制相匹配。这样做,模型就能理解原本超出其处理范围的长序列。
微调:通过微小的调整(微调),来进一步优化模型的参数,以适应这种新的位置索引方式。这个过程远比完全重新训练模型来得快速和经济。
保持原有功能:这种方法的一个重要好处是,它允许模型在扩展其上下文窗口的同时,仍然保持原有的任务处理能力。这意味着模型不会因为能够处理更长的文本而失去其在其他任务上的效能。
重用现有模型和方法:通过位置插值,我们可以继续使用现有的预训练模型和优化方法,而不需要大规模的改动。这使得将模型应用到实际中变得更加容易和吸引人。
位置插值是一个巧妙的技术,它允许现有的预训练大型语言模型理解和处理比它们原本设计时更长的文本,而无需进行昂贵的重训练过程。
这为大型模型的实际应用和灵活性提供了极大的便利。