长上下文外推
LLaMA 2 训练时只见过 4096 个 token 长度的文本。但今天的模型能处 理 128K 甚至 1M——同样的架构,训练时从没见过的长度,推理时居然能用。
答案在位置编码的外推技术里。这一节从 Attention 的长度瓶颈出发,逐步理解 RoPE 为什么能外推、PI 做了什么、NTK 和 YaRN 又改进了什么,最后学会测试长上下文能力。
长上下文外推(Length Extrapolation)要解决的问题是:模型在训练时只见过位置 0 到 4095 的编码,推理时却要处理位置 10000——这个位置的编码对模型来说是完全陌生的。
解决方案不是重新训练,而是让训练时学到的位置编码规律在更长的序列上继续生效。具体方法取决于位置编码本身的设计:RoPE 用旋转矩阵编码相对位置,天然具备一定的外推能力;PI 压缩位置编号;NTK 调整频率基;YaRN 对不同频率维度做差异化处理。这四种方法构成一条递进的优化路径,也是这一节的主线。
1. 什么是外推
外推(Extrapolation)= 用已知范围的规律,推测范围之外的情况。
举个生活中的例子:
- 你测过水温 0°C → 冰,50°C → 液体,100°C → 沸腾
- 现在问你:200°C 的水会怎样?你虽然没测过,但根据规律能推断 → 还是气体
- 这就是「外推」
LLM 面临同样的问题:
- 训练时:模型学习了位置 0 到 4095 之间的 attention 规律
- 推理时:用户给了一篇 10000 token 的文章
- 问题:位置 4096~9999 这些位置的 token,模型训练时从没见过,它能正确处理它们吗?
答案取决于你用什么位置编码。