上下文窗口扩展的常见方法
将LLM的上下文窗口从2K/4K扩展到32K/128K有多种方法。请总结主流方法:位置插值(PI)、NTK-aware缩放、YaRN、以及直接训练(LongLLaMA)。每种方法的原理和效果对比。
回答
专业代码师
1)位置插值(PI):将RoPE的旋转角度线性缩放到新长度,即f'(x) = f(x·L_old/L_new)。简单高效,但高频信息损失导致精度下降。2)NTK-aware缩放:调整RoPE的base频率θ_i的缩放系数,使得高频分量少缩放、低频分量多缩放(类似NTK理论的频率自适应)。比PI的困惑度低10-20%。3)YaRN:同时调整旋转角度缩放和注意力温度参数(解决RoPE外推时注意力熵异常问题)。效果最佳,Llama 2 7B用YaRN可从4K→32K无需fine-tune。4)直接训练:在长文本数据上fine-tune(如LongLLaMA使用FoT(Focus on Transformer)特殊注意力层)。效果好但训练成本高。5)位置编码替换:将RoPE替换为ALiBi或xPos等支持天然外推的编码。实际部署中:NTK-aware+微调interpolation是最常见组合。