如何扩展模型的上下文长度
Thu Jun 05 2025 · 15min
如何扩展模型的上下文长度
扩展大型语言模型 (LLM) 的上下文长度是研究和开发的一个重要领域,旨在使模型能够处理和理解更长的信息序列。这使得在文档摘要、长篇问答和复杂推理等任务中能够做出更连贯、更具上下文意识的响应。为了应对这一挑战,人们开发了各种技术,从架构修改到创新的训练和微调策略。
架构修改
扩展上下文长度的主要瓶颈之一是标准 Transformer 体系结构中自注意力机制的二次复杂性。随着序列长度的增加,计算和内存需求呈二次方增长。为了解决这个问题,人们提出了几种架构修改:
稀疏注意力: 稀疏注意力机制不是计算每对标记的注意力分数,而是限制每个标记只关注其他标记的有限子集。这可以通过各种模式来实现,例如块状或跨步注意力,这将计算复杂度从 O(n²) 降低到 O(n log n) 甚至 O(n)。Longformer 模型是利用滑动窗口(局部)注意力和特定标记上的全局注意力相结合的一个著名例子。
FlashAttention: 这是一种内存高效的注意力算法,可优化 GPU 内存不同级别之间的数据移动。通过平铺和重新计算中间结果,FlashAttention 显着减少了内存访问开销,从而实现更快、更节省内存的精确注意力机制计算,尤其适用于长序列。
位置编码修改: 标准位置编码可能难以推广到比训练期间看到的序列更长的序列。为了解决这个问题,人们开发了几种替代方法:
- 旋转位置嵌入 (RoPE): RoPE 通过根据查询和关键向量的绝对位置旋转它们来编码位置信息。该方法在推断更长序列方面表现出优异的性能。
- 带线性偏差的注意力 (ALiBi): ALiBi 不会将位置嵌入添加到词嵌入中。相反,它会向注意力分数添加一个与键和查询之间距离成比例的偏差。这使得模型能够推广到更长的序列,而无需对其进行明确的训练。
- 位置插值 (PI): 该技术涉及在对更长上下文进行微调时缩小位置索引以匹配原始上下文窗口大小。这使得在较短上下文中预训练的模型能够有效地适应较长的上下文。
微调和推理策略
除了架构更改之外,一些技术还侧重于调整现有模型以在微调或推理期间处理更长的上下文:
长度外推和内插: 这些方法旨在使模型能够处理比其训练数据更长的序列。如前所述,位置插值是此处的一项关键技术。另一种方法是“短时训练,长时测试”,即模型在较短的序列上进行训练,但旨在在推理时推广到更长的序列。
上下文窗口分段和滑动: 这种方法涉及将长输入序列分解为更小的、重叠的块,这些块适合模型的原始上下文窗口。模型按顺序处理每个块,并且可以将输出组合起来形成一个连贯的整体。
LongLoRA 和 PoSE: LongLoRA 是一种高效的微调方法,可以以最小的计算成本扩展预训练模型的上下文窗口。位置跳跃式 (PoSE) 训练通过在固定上下文窗口内操纵位置索引来模拟长输入,与全长微调相比,这可以显着减少内存和时间开销。
输入预处理和检索
另一类技术在输入到达模型之前对其进行管理:
分块和摘要: 对于极长的文档,一种常见的方法是将文本分成更小的块,并为每个块生成摘要。然后可以将这些摘要提供给模型,以提供整个文档的简明概述。
检索增强生成 (RAG): RAG 是一种将检索系统与生成器模型相结合的强大技术。检索系统不是将整个文档放入上下文窗口,而是首先从大型文档语料库中识别最相关的段落。然后将这些段落作为上下文提供给 LLM,LLM 根据检索到的信息生成响应。这种方法允许模型访问大量信息,而不受其上下文窗口大小的限制。
扩展 LLM 上下文长度的领域正在迅速发展,不断引入新的技术和模型。使用哪种技术的选择通常取决于具体的应用、可用的计算资源以及性能和效率之间的权衡。