要解决的问题
长上下文需要同时考察两点:模型是否能利用远处的信息,以及计算和显存成本是否可以接受。名义窗口很大不保证有效利用;效果可能受信息位置影响,例如对中间位置的利用弱于开头和结尾。
核心方法
- 位置插值:把超出训练长度的位置按比例压缩回训练时见过的范围,再做少量微调。
- RoPE 重标定:调整旋转位置编码(RoPE)的频率基数或按频段区别对待,例如 NTK 感知缩放及其改进。
- 分阶段扩窗:先在较短长度上训练,再逐步拉长,降低成本。
- 长上下文持续预训练:用长文档数据继续预训练,让模型学会真正使用长距离信息。
代表工作
- Position Interpolation(2023):对 RoPE 做线性位置插值,少量微调即可把 LLaMA 的窗口扩展到 32K。
- YaRN(2023):结合按频段插值与注意力温度调整,用很低的训练成本扩展窗口。
- LongRoPE(2024):通过搜索非均匀的位置插值方案,把窗口扩展到 200 万 token 以上,并尽量保持短上下文性能。
入门
用 passkey retrieval(在长文本中找出一串随机密码)或「大海捞针」(needle-in-a-haystack)测试,区分「名义窗口」与「有效利用」。
开放问题
- 长距离多跳推理与精确召回,远比简单检索困难。
- 扩窗后如何不损失短上下文上的能力。
- 与检索增强生成相比,长上下文是互补还是替代。
参考资料
相关专题
- 稀疏注意力与局部注意力:从注意力结构上降低长序列的计算量。
- KV缓存压缩与注意力变体:长上下文推理的主要显存开销来自 KV 缓存。
- 高效序列架构:用亚二次复杂度的架构绕开注意力的长度瓶颈。
- 持续预训练:长上下文能力通常通过持续预训练获得。
- 检索增强生成:与长上下文互补或替代的另一条路线。