上下文长度扩展是模型在短短两年内从 4K 发展到 128K 再到 1M+ 上下文窗口的原因。从头开始在百万 token 序列上训练模型的成本将高得令人望而却步。扩展技术通过适配在较短序列上训练的模型使长上下文模型变得实用,只需原始训练计算的一小部分。
核心挑战:RoPE(旋转位置嵌入)使用旋转角度编码位置。在超出训练长度的位置,这些角度变成模型从未见过的外推值,导致注意力模式崩溃。扩展技术修改位置到旋转角度的映射方式,使更长的序列产生在模型训练范围内的角度。
NTK 感知插值(神经正切核)不均匀地调整 RoPE 频率:高频分量(对局部模式重要)被保留,而低频分量(与位置相关)被插值。这保留了模型处理局部模式(词序、语法)的能力,同时扩展了其全局位置编码的范围。这是一个一行代码的修改,却能显著改善长度外推。
YaRN(Yet another RoPE extensioN)将 NTK 感知插值与注意力温度校正和在扩展长度数据上的少量微调(通常几百步)相结合。这产生了能够处理原始上下文长度 4–8 倍的模型,质量退化最小。大多数开源的长上下文模型(如长上下文 Llama 或 Mistral 变体)使用 YaRN 或类似技术。微调步骤至关重要——仅缩放在一定程度上有效,但在目标长度上微调可以显著提高质量。