目录

题目

解答

1. 背景与挑战

2. 基础概念回顾

2.1 自注意力机制

2.2 位置编码

3. 主要技术路线分类

4. 关键方法详解

4.1 改进位置编码以实现外推

4.1.1 RoPE及其扩展

4.1.2 ALiBi

4.1.3 xPOS

4.2 注意力机制优化

4.2.1 稀疏注意力

4.2.2 滑动窗口注意力

4.2.3 哈希与聚类

4.3 分段与记忆机制

4.3.1 Transformer-XL

4.3.2 Memorizing Transformer

4.3.3 RMT (Recurrent Memory Transformer)

4.3.4 Unlimiformer

4.4 检索增强(RAG)

4.5 训练策略与微调

4.5.1 长上下文微调

4.5.2 渐进式训练

4.5.3 位置插值

4.6 状态空间模型(备选)

5. 实际应用与代表性模型

6. 挑战与展望

7. 总结


题目

如何扩展大模型的上下文长度?

解答

扩展大语言模型(LLM)的上下文长度是近年来研究和工程的热点,因为长上下文能力对于处理长文档、多轮对话、代码生成等任务至关重要。然而,Transformer架构在长序列上存在两大挑战:自注意力的计算复杂度随序列长度呈平方增长,以及位置编码的外推能力有限。本文将系统介绍当前扩展上下文长度的主要技术路线,涵盖位置编码改进、注意力机制优化、记忆增强、训练策略等多个方面,并梳理关键方法与最新进展。

1. 背景与挑战

标准的Transformer模型(如GPT、BERT)通常预训练在固定长度的序列上(如512、1024、2048)。当推理时遇到超出训练长度的序列时,模型性能会急剧下降。其原因包括:

  • 计算开销:自注意力机制的计算量和内存占用与序列长度 L 呈 O\left ( L^2 \right ) 关系,长序列导致显存爆炸。

  • 位置编码外推失败:大多数绝对位置编码(如正弦编码)或相对位置编码(如RoPE)在超出训练长度时无法有效泛化,注意力分布混乱。

因此,扩展上下文长度需要同时解决效率外推问题。

2. 基础概念回顾

2.1 自注意力机制

对于长度为 L 的序列,自注意力计算所有token之间的注意力分数,复杂度为 O\left ( L^2\cdot d\right )(d为隐层维度)。直接计算长序列不可行,需要稀疏化或近似。

2.2 位置编码
  • 绝对位置编码:为每个位置分配一个固定的向量(如正弦编码),或作为可学习参数。外推能力弱,因为未见过的位置没有训练。

  • 相对位置编码:建模token之间的相对距离,泛化性更好。代表有Transformer-XL、RoPE(旋转位置编码)、ALiBi等。

3. 主要技术路线分类

扩展上下文的方法可以分为以下几类:

  1. 改进位置编码:使模型在训练长度之外仍能保持合理的注意力分布。

  2. 优化注意力计算:通过稀疏、滑动窗口、哈希等方式降低复杂度。

  3. 分段与记忆机制:将长序列分段处理,并通过记忆单元传递信息。

  4. 检索增强:从外部知识库或文档中检索相关片段,不依赖全部上下文。

  5. 训练策略:通过在更长序列上微调、渐进式训练或位置插值来适应长上下文。

下面分别详细介绍各类方法。

4. 关键方法详解

4.1 改进位置编码以实现外推
4.1.1 RoPE及其扩展

RoPE(Rotary Position Embedding)是一种相对位置编码,通过旋转矩阵将位置信息融入query和key,实现相对位置的衰减。但它在外推时仍会出现注意力分数异常。

  • Position Interpolation (PI):直接将位置索引缩小到预训练范围。例如将4096的位置除以2,映射到2048内。缺点是会丢失高频信息,需微调。

  • NTK-aware scaling:受神经正切核启发,不线性缩放所有维度,而是对高频维度保留更多信息,即高频不缩放或缩放因子小,低频缩放因子大。这样无需微调也能较好外推。

  • YaRN:结合PI和NTK,并调整注意力温度的缩放,进一步改善外推效果。

  • 动态NTK:在推理时根据当前序列长度动态调整缩放因子,实现零样本外推。

4.1.2 ALiBi

ALiBi(Attention with Linear Biases)直接在注意力分数上添加与距离成正比的偏置(负值),使模型更关注近邻。它不需要位置嵌入,且天然支持外推,因为偏置随距离线性增长,不会出现位置索引未定义的问题。许多长上下文模型(如MPT、BloombergGPT)采用ALiBi。

4.1.3 xPOS

xPOS(extended Positional Encoding)是一种广义的位置编码,通过调节旋转角度的缩放来增强外推能力,常用于RWKV等模型。

4.2 注意力机制优化
4.2.1 稀疏注意力
  • Longformer:使用滑动窗口+全局token的稀疏注意力模式,将复杂度降至 O\left ( L \cdot w \right )(w为窗口大小)。

  • BigBird:结合滑动窗口、随机注意力和全局注意力,理论上可达线性复杂度。

  • Sparse Transformer:通过固定稀疏模式(如步长模式)或学习模式。

4.2.2 滑动窗口注意力
  • StreamingLLM:提出“注意力汇聚”现象,发现初始token(sink tokens)在长序列中依然能吸引大量注意力,通过保留初始token和滑动窗口,无需微调即可处理无限长文本。

  • Infini-Transformer:结合滑动窗口局部注意力和长期记忆压缩机制,实现无限上下文。

4.2.3 哈希与聚类
  • Reformer:使用LSH(局部敏感哈希)将相似query-key分到同一个桶,近似计算注意力。

  • Routing Transformer:通过聚类将token分组,组内计算注意力。

4.3 分段与记忆机制
4.3.1 Transformer-XL

首次引入片段级递归和相对位置编码,将历史片段的隐状态传递给当前片段,使上下文长度理论上无限。但受限于存储开销,实际仍是分段处理。

4.3.2 Memorizing Transformer

在Transformer层中加入一个kNN记忆模块,存储历史key-value对,检索相关记忆辅助注意力。

4.3.3 RMT (Recurrent Memory Transformer)

将Transformer与递归网络结合,通过特殊记忆token在片段间传递信息。

4.3.4 Unlimiformer

为编码器-解码器模型设计,将所有输入token的key-value索引到外部向量库,解码时检索最相关部分,实现无限输入长度。

4.4 检索增强(RAG)

对于长文档问答等任务,可以先将文档分块并建索引,推理时检索相关块作为上下文输入,这样模型实际处理的长度远小于全文。RAG(Retrieval-Augmented Generation)已广泛应用于实际产品。

4.5 训练策略与微调
4.5.1 长上下文微调

直接在长序列上继续训练(continue pretraining)或指令微调。例如:

  • LongLoRA:采用shifted sparse attention(S²-Attn)近似全注意力的效果,并结合LoRA高效微调,使7B模型能扩展到100k上下文。

  • LongAlpaca:通过长指令数据微调,提升长文本指令跟随能力。

4.5.2 渐进式训练

逐步增加训练序列长度,让模型平滑适应更长上下文。例如,从2k开始,逐渐到8k、32k。

4.5.3 位置插值

如4.1.1所述,通过缩放位置索引微调模型,是目前最常用的方法之一。Meta的Llama 2长上下文版本就采用了位置插值。

4.6 状态空间模型(备选)

虽然不直接基于注意力,但像Mamba、RWKV等模型通过状态空间机制实现线性复杂度,天生支持长序列,也是扩展上下文的重要方向。

5. 实际应用与代表性模型

  • Claude(Anthropic):支持200k上下文,其技术细节未完全公开,但可能结合了稀疏注意力和位置编码改进。

  • GPT-4 Turbo:128k上下文,推测采用了类似位置插值和优化的注意力实现。

  • Gemini 1.5:宣称支持1M token,可能综合了MoE、高效注意力、记忆检索等多种技术。

  • Llama 2 Long(Meta):通过位置插值和长数据微调将上下文扩展到32k。

  • 开源模型:如LongChat、YaRN微调的Llama、Mistral的滑动窗口机制(Mistral 7B默认支持8k,通过滑动窗口实际可处理更长)。

6. 挑战与展望

尽管已有诸多进展,长上下文仍面临以下挑战:

  • 推理效率:即使采用稀疏注意力,长序列推理仍然慢,且KV缓存巨大。需要硬件支持和工程优化(如FlashAttention-2、PagedAttention)。

  • 长距离依赖性:模型是否能真正利用长距离信息?一些研究表明,即使上下文变长,模型可能仍关注局部。需要更好的评估基准和训练目标。

  • 注意力坍塌:过长序列可能导致注意力分布均匀化或集中在少数token,信息丢失。

  • 评估指标:现有基准(如LongBench、L-Eval)覆盖有限,缺乏对真实长程推理能力的全面衡量。

  • 多模态长上下文:视频、音频等模态的引入使问题更复杂。

未来,可能的方向包括:更高效的线性注意力、神经记忆与检索的结合、动态上下文管理等。

7. 总结

扩展大模型上下文长度需要多管齐下:

  • 位置编码改进(如ALiBi、RoPE+插值)解决外推问题。

  • 注意力优化(稀疏、滑动窗口、聚类)降低计算开销。

  • 记忆与检索机制突破固定长度限制。

  • 训练策略(长数据微调、渐进式学习)增强模型适应能力。

目前,通过位置插值和稀疏注意力微调,开源社区已能将数十亿参数的模型扩展到百万级token。随着研究和工程的不断进步,未来模型将能够更高效、更准确地处理任意长度的上下文,为复杂应用打开新的可能。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐