中学生能看懂:LongRoPE,2048k 上下文,16 倍于 GPT-4
写在前面
LongRoPE,支持 2048k 上下文
相比而言,GPT4-1106/0125 最多只支持 128k
这是微软研究院(Microsoft Research)刚刚发布的,热乎!
论文在这:https://arxiv.org/abs/2402.13753
让我们从「上下文」这个概念开始
在处理语言任务时,LLMs 需要考虑「上下文」,即模型在生成下一个词时参考的前面的词。模型的上下文窗口就像人在读文章时回忆之前内容的记忆跨度,限制了模型能同时处理的文本信息量。
上下文窗口限制的影响
LLMs 的一个主要局限性是其「上下文窗口限制」。例如,GPT-4 的上下文窗口大小可能限制在数千个 tokens 内。一旦文本长度超过这个限制,模型就不能保持对更早部分的记忆。在面对长文本时,这个局限性就变得尤其明显,因为模型可能需要引用远早于当前位置的信息,例如长篇文章的摘要或对话式互动的记忆。当上下文超出这个窗口时,模型性能通常会显著下降,因为它不能充分捕捉文本的全局结构和意义。
扩大上下文窗口的必要性
在许多真实世界的应用中,LLMs 需要处理长度远超当前上下文窗口的文本。例如,阅读法律文件、书籍或长篇的科学论文时,理解全文的前提是要能够记忆和关联全篇的内容。这种能力对于执行细致的内容分析、复杂的问答和维持长时间的对话至关重要。因此,扩展上下文窗口大小,使之能够处理更长的序列,是提升 LLMs 性能和应用范围的关键步骤。
现实挑战
尽管扩大上下文窗口听起来很直观,但实际上这一过程涉及多方面的挑战。首先,随着上下文窗口的扩大,模型需要更多的内存来存储位置信息,计算量也随之增加。其次,现有的训练数据集中长文本数量有限,而且训练这样长的文本需要极其昂贵的计算资源。因此,为了有效利用 LLMs 并克服上下文窗口的限制,研究者们开始探索不同的技术途径,LongRoPE 便是其中一项创新的尝试,它通过技术创新扩展了上下文窗口,而不需要过多的细调和额外的训练资源。
LongRoPE 方法概览
LongRoPE 方法旨在显著提升大型语言模型(LLMs)的上下文窗口,这一突破性进展依靠以下三项核心技术创新实现:
1. 识别并利用位置插值中的非均匀性
问题阐述:在传统的位置编码方法中,随着输入序列长度的增加,位置信息的增加导致新出现的位置编码与模型训练时的分布不匹配,从而影响模型的理解和生成能力。
解决方式:LongRoPE 方法通过精细化地分析和识别不同维度和位置之间的非均匀性,为每个维度和位置的旋转角度找到最合适的重缩放因子。
技术实施:利用进化算法搜索最优的重新缩放因子组合,来最小化信息损失,同时允许无需昂贵的细调过程即可实现多达 8 倍的上下文扩展。
2. 渐进式扩展策略的实施
策略构思:直接在极长的文本上进行细调是资源消耗极大的,特别是在面对上百万甚至更长的文本序列时。
策略细节:首先,通过上述的非均匀插值方法对预训练模型进行扩展到中等长度(如256k)。然后,使用该中等长度的模型作为基础,再进行第二轮的位置编码搜索和插值操作,最终实现对极长上下文(如2048k)的支持。
效果展示:这种策略大大节约了细调成本,同时确保模型能够适应及处理超长文本信息。
3. 短上下文窗口性能的恢复
出现问题:在极大地扩展模型上下文窗口的过程中,会发现原有较短上下文窗口的性能有所下降,这是由于模型学习到的位置编码分布范围发生变化所致。
恢复措施:对于这一问题,LongRoPE 方法在完成长上下文窗口的扩展后,通过进一步的搜索调整,寻找适合短上下文窗口的RoPE重新缩放因子,以恢复模型在短上下文窗口内的性能。
实际应用:该方法确保了扩展后的模型不仅可以处理前所未有的长文本,同时在处理短文本时仍保持高效能,这一点在进行常规长度评估任务时尤为重要。
通过这三项技术创新,LongRoPE 成功地扩展了 LLMs 的上下文窗口,不仅提升了模型处理超长文本的能力,同时也保持了在短文本上的性能,这对于实现更加复杂和灵活的语言理解与生成任务具有重要意义。
非均匀位置插值
让我们来谈谈位置编码。想象一下,你有一串珍珠项链,每一颗珍珠代表一个字或一个词。为了告诉别人珍珠的具体位置,你可能会说:“这颗珍珠是第五个。”在语言模型中,我们也需要某种方式来告诉模型每个字或词的“位置”。这就是位置编码的作用,它是告诉模型单词顺序的一种方式,帮助模型理解文本的流畅性和语境。
那么,位置插值又是什么呢?继续使用珍珠项链的比喻,假设你想要在项链上加入更多的珍珠,但是珍珠之间的空间有限,你需要某种方法来“扩展”现有的空间,使其能够容纳更多珍珠。在 LLM 中,位置插值就是这样的一种技术,它通过在现有位置编码之间插入新的位置编码,来扩展模型能够处理的文本长度。
通常情况下,位置插值是均匀进行的,就像是在项链上均匀地插入相同数量的珍珠。然而,LongRoPE 方法采用的是一种非均匀的插值方法。为什么要这么做呢?原因在于,不同的位置和维度在文本理解中的重要性是不一样的。有些词(珍珠)在句子(项链)中的位置比其他词更加重要,可能是因为它们是关键词,或者是因为它们在语句中处于特殊的位置,比如句子的开头或结尾。因此,LongRoPE 通过识别这种重要性的非均匀性,对每个位置和维度的旋转角度进行定制化调整,以最大程度地保留重要信息。
为了实现这一点,LongRoPE 使用了一种高效的进化算法来搜索最优的重新缩放因子。这就像是精心设计项链的样式,决定在哪些地方添加珍珠,以及如何调整珍珠的间距,以创造出最佳的视觉和实用效果。具体到 LLM,这意味着算法会不断尝试不同的插值方案,然后选择那些使模型在理解和生成任务上表现最佳的方案。通过这种方法,LongRoPE 成功地实现了模型在长达 2048k tokens 的上下文窗口内的有效工作,同时还保持了在原始的短上下文窗口内的性能。
通过这样的非均匀位置插值,LongRoPE 不仅能够处理更长的文本输入,而且还能够在长文本和短文本之间进行有效地切换,为各种复杂任务提供了更加强大的模型支持。
渐进式扩展策略
在介绍 LongRoPE 渐进式扩展策略之前,让我们用一个例子来理解“渐进式”的概念。想象你正在爬一座大山,直接从山脚跳到山顶显然不可能,你需要逐渐攀升,通过一系列的中转站来最终到达山顶。在技术领域,特别是在 LLMs 的上下文窗口扩展上,渐进式扩展策略也遵循着相似的逻辑,它意味着我们不是直接进行大幅度扩展,而是分步骤地进行,每次微调和优化使得模型适应更长的文本长度,然后继续下一步扩展。
首先,我们考虑为什么 LongRoPE 选择先将模型微调至 256k 的长度。在大幅度增加模型的上下文窗口时,我们面临着两个挑战:一是如何维持模型性能不下降;二是如何处理计算资源的限制。显著增加上下文长度可能会导致模型难以收敛,并增加对计算资源的需求。通过先将模型微调至 256k 长度,我们实质上是在为模型建立一个中间“营地”。这一步不仅可以让模型有机会适应更长的文本,还允许我们评估模型在更长上下文窗口中的初步性能,并据此作出进一步微调的决定。
在微调至 256k 长度之后,LongRoPE 如何实现从 256k 到 2048k 的扩展呢?这一步是通过对已微调模型进行二次位置插值来完成的。这里的“位置插值”是指在模型原有的位置编码中插入新的编码,以便模型可以处理更长的上下文。记得我们之前提到过,这不是简单地在所有位置均匀插入,而是需要精心设计的非均匀插值。为了最大限度减少信息的损失,LongRoPE 使用进化算法搜索寻找最优的非均匀插值方案。在这一过程中,我们不再需要大规模的微调,因为模型已经在 256k 的上下文长度上有了良好的表现。通过这种方法,我们可以实现高效的扩展,而不会对模型的性能产生太大的负面影响。
在实现了巨大的上下文窗口扩展后,我们面临着另一个挑战:如何保证模型在原始较短上下文窗口中的性能不下降。随着上下文长度的增加,模型在处理较短文本时可能会出现性能下降,因为位置编码变得过于密集。因此,LongRoPE 再次利用进化搜索算法,对模型在短上下文窗口(例如 4k 和 8k)中的 RoPE 重新缩放因子进行调整。通过这种调整,模型能够根据输入序列的实际长度动态地更新位置编码,从而恢复在原始较短上下文窗口中的性能。
总体来说,LongRoPE 渐进式扩展策略是一种有效的方法,它使得模型能够处理更长的文本输入,同时保持了原始较短上下文中的性能。这种策略为在资源受限的条件下扩展大型语言模型的能力提供了一条可行的路径,并为未来的研究提供了新的思路。
短上下文窗口性能恢复
通过 LongRoPE 扩展后的模型,在处理长文本时的表现确实令人印象深刻。但我们不能忽视的是,保持原始短上下文窗口中的性能同样重要。为什么这么说?想象一下,你在使用智能手机时,虽然它能完成很多复杂任务,但如果它不能快速地处理简单的文本消息,这显然会影响用户体验。同样,即使语言模型能处理超长文本,如果它在简短对话或快速回答问题时表现不佳,其实用性也会大打折扣。
为了解决这一挑战,LongRoPE 采用了一种独特的策略来调整模型的位置编码(RoPE)。具体来说,它在将模型扩展到长上下文窗口之后,会进行一轮额外的搜索,找到适合短上下文窗口的 RoPE 重新缩放因子。这样做的效果如何呢?我们可以用一个简单的例子来理解:当你在调整放大镜的焦距以看清远处的景物时,若想再看清近处的细节,你需要重新调整焦距。同理,LongRoPE 调整 RoPE 重新缩放因子,就像是在调整焦距,以确保模型既可以观察远处(即长上下文),也能清晰看到近处(即短上下文)。
RoPE 重新缩放因子的调整过程
首先,进行一次搜索以识别和调整模型的位置编码,使其更适合于较短的上下文窗口。
搜索考虑到了 RoPE 维度的非均匀性以及 token 位置的非均匀性,以获得最优的重新缩放因子组合。
搜索使用了进化算法,并针对短上下文窗口的特点对搜索空间和搜索参数进行了特别设计,比如降低最大允许的缩放因子搜索范围,以鼓励更少的位置插值。
为了快速找到适合短上下文的 RoPE 编码,算法对起始 token 的插值进行了特别优化,减少了在最初的几个位置上的插值量,这有助于保留更多的原始位置信息。
效果评估
在实验中,调整后的模型在短上下文窗口上的困惑度(perplexity)明显降低,表明模型在辨识接近的 token 位置上能力提升,从而保持了较好的语言建模性能。
在标准的基准测试中,调整后的模型在短上下文窗口的准确度与未扩展前的模型相比较,并无显著差异,甚至在某些任务上表现得更好。这表明,模型在进行长上下文任务时的能力提升,并未以牺牲处理短文本的效率为代价。
通过以上措施,LongRoPE 成功地解决了在扩展模型处理长文本能力的同时,依然能够保持短文本处理的精确度和高效性,这为未来大型语言模型的发展提供了新的思路和可能性。
实验验证
微软研究院在 LongRoPE 方法的论文中提出,该方法成功地将大型语言模型(LLM)的上下文窗口扩展到了惊人的 2048k tokens。为了验证这一点,研究人员在不同的 LLM 和多种长上下文任务上进行了广泛的实验。这些实验的目的是要证明通过 LongRoPE 扩展后的模型不仅能够处理极长的文本,而且在原始短上下文窗口中的性能也得以保持。具体的实验细节和结果将在下文中进一步介绍。
实验设置
实验任务:研究人员选取了包括困惑度测试、Passkey 检索任务以及标准 LLM 基准测试等多项任务来评估模型的性能。
选取模型:实验中对比使用了 LLaMA2 和 Mistral 这两种 LLM,它们都是广泛使用的预训练模型。
困惑度评估
数据集选择:为了评估模型在不同上下文长度下的语言建模能力,研究人员使用了 Books3 数据集。
实验过程:通过滑动窗口方式,在不同长度(如 4k 到 2048k tokens)上测量模型的困惑度。
结果分析:实验结果显示,通过 LongRoPE 扩展的模型在各个上下文长度上的困惑度都保持在较低水平,证明了该方法的有效性。
Passkey 检索任务
任务说明:在这个任务中,模型需要从包含大量无关文本的长文档中检索出一个隐藏的 Passkey(例如一个五位数)。
实验操作:研究人员在一个非常长的上下文中随机放置了 Passkey,要求模型检索出这个密钥。
观察结果:尽管从百万级的 tokens 中检索一个五位数的 Passkey 是非常具有挑战性的,LongRoPE-LLaMA2-2048k 在从 4k 到 2048k 的上下文长度上仍然保持了高达 90% 以上的检索精确度。
标准 LLM 基准测试
测试内容:研究人员在标准的 LLM 基准测试中,包括 ARC-Challenge 和 HellaSwag 等数据集上评估了 LongRoPE-2048k 模型。
性能评定:即便是在为小型上下文窗口设计的基准测试中,通过 LongRoPE 扩展的模型也取得了与原始 LLaMA2 和 Mistral 相媲美的成绩。
实验细节
细调学习率:在细调过程中,LLaMA2 模型使用了 2e-5 的学习率,并采用了线性衰减策略。
GPU 资源使用:实验使用了 A100 GPU 资源来处理高达 256k 上下文长度的细调和推理过程。
效率提升:研究人员还利用了 Flash Attention-2 技术来加速训练和推理。
实验结果
困惑度表现:在长达 2048k 的评估长度上,LLaMA2-7B 和 Mistral-7B 的困惑度优于使用 PI 和 YaRN 等其他扩展方法的基线模型。
Passkey 检索:实验结果显示,在长上下文任务中,模型表现出了卓越的检索能力,证明了 LongRoPE 方法确实使模型得到了有效的上下文窗口扩展。
基准测试准确度:在原始上下文窗口设计的标准基准测试中,通过 LongRoPE 扩展的模型在 TruthfulQA 上甚至超越了原始 Mistral。
以上结果表明,LongRoPE 方法不仅能显著扩展 LLMs 的上下文窗口,并且还保持了在短上下文窗口中的性能。这些发现为未来语言模型的开发提供了有益的见解和数据支持。