引言
想象一下,你在读一本悬疑小说,但当你读到最后一章时,却完全忘记了前几页提到的线索。这就是许多大型语言模型 (LLM) 面临的现实。虽然像 LLaMA-2 这样的模型功能强大,但它们通常是在固定的“上下文窗口” (例如 4,000 个 Token) 下训练的。如果让它们处理一份 10,000 个 Token 的文档,它们就会束手无策。
为了解决这个问题,研究人员不想从头开始重新训练这些庞大的模型——那太昂贵了。相反,他们试图在推理过程中“扩展”模型现有的能力以处理更长的文本。涉及位置内插 (Position Interpolation, PI) 或像 YaRN 这样的常用技术已经取得了很大进展,但它们往往依赖于启发式方法或对参数调整的“直觉”。
在这篇深度文章中,我们将探讨一篇引人入胜的论文: “Extending Context Window of Large Language Models from a Distributional Perspective” (从分布视角扩展大型语言模型的上下文窗口) 。 研究人员提出了一种基于理论的方法,通过分析模型嵌入层内部的旋转角度分布来扩展上下文窗口。
结果如何?这是一种扩展上下文窗口的更聪明的方法,它在长文本基准测试中优于现有方法,同时保持了模型在短文本任务上的敏锐度。
背景: 语言的几何学
要理解这种新方法是如何工作的,我们需要先了解 LLM 如何知道一个词在句子中的“位置”。与人类线性阅读不同,Transformer 并行处理 Token。它们需要一个坐标系。
旋转位置编码 (RoPE)
大多数现代 LLM (包括 LLaMA) 使用旋转位置编码 (Rotary Position Embedding, RoPE) 。 RoPE 不是简单地将数字加到 Token 上来标记其位置,而是在几何空间中旋转 Token 的向量表示。
从数学上讲,对于位置为 \(m\) 的 Token,其向量旋转角度为 \(m\theta\)。旋转矩阵如下所示:

这里,\(\theta_i\) 决定了嵌入中不同维度的旋转频率。有些维度旋转得非常快 (高频) ,而另一些维度旋转得非常慢 (低频) 。
扩展困境: 内插 vs. 外推
当我们希望模型读取比训练时更长的长度 (例如从 4k 增加到 8k Token) 时,我们在这些旋转角度上面临着两难选择。
- 直接外推 (Direct Extrapolation): 我们让位置索引 \(m\) 继续增长 (\(4001, 4002...\)) 。
- *问题: * 模型在训练期间从未见过这些更高的旋转值。它会感到困惑,性能也会崩溃。
- 位置内插 (Position Interpolation, PI): 我们“压缩”新的位置,使它们适应旧的范围。如果我们想将长度加倍,我们就将位置索引除以 2。
- 问题: * 虽然这保持了位置有界,但它改变了 Token 之间的距离*。它引入了模型在训练期间学到的角度之间的旋转角度。
研究人员通过下图清晰地展示了这种权衡。

在下方的图 (内插) 中,你可以看到“交叉点”——这是模型在预训练期间从未遇到过的新的旋转角度。这些是分布外 (Out-Of-Distribution, OOD) 角度。
核心洞察: 分布视角
像 YaRN 这样的现有方法试图基于启发式规则 (例如,“高频维度应该外推,低频维度应该内插”) 来混合使用内插和外推。但这篇论文的作者提出了一个更深层的问题: 我们能从数学上证明哪些维度更适合哪种策略吗?
他们通过观察旋转角度分布来解决这个问题。
在预训练期间,模型看到的是一组有限的旋转角度。如果我们把这些角度视为概率分布,我们就可以可视化模型“知道”什么。当我们扩展上下文窗口时,我们改变了这种分布。
作者发现不同的维度对扩展的反应是不同的。

仔细观察上面的图 1 :
- 左图 (a): 在这个维度中, 外推 (红色点线) 与预训练分布 (绿色实线) 完美对齐。内插则产生了一个模型不习惯的混乱、密集的分布。
- 右图 (b): 在这个维度中, 内插 (橙色虚线) 更好地保留了结构,而外推则引入了混乱。
这种视觉证据表明,不存在“一刀切”的策略。我们需要针对每个维度选择最佳策略。
方法: 最小化扰动
研究人员制定了一种方法,可以自动为模型中的每一个维度选择最佳策略。目标是最小化分布扰动 (Distributional Disturbance) ——实际上是让新的上下文窗口看起来尽可能像预训练模型熟悉的样子。
第 1 步: 角度离散化
首先,他们估计角度的分布。由于角度是连续的,他们将圆 (\(0\) 到 \(2\pi\)) 切成 \(b\) 个离散的区间 (桶) 。

然后,他们计算预训练与扩展期间落入这些桶中的角度频率。

这给了他们一个概率密度函数 (\(P_L\)) ,代表模型在训练期间学到的内容。

第 2 步: 可视化偏移
为了看到这些数学运算的实际效果,请看下面的频率图。“预训练”线 (橙色/绿色) 有特定的尖峰——这些是模型知道的“安全区”。

- 上图 (第 6 维度) : 内插分布 (虚线) 与预训练的尖峰对齐得相当好。
- 下图 (第 22 维度) : 内插引入了预训练模型频率为零的频率 (OOD 角度) 。这对模型的稳定性是个坏消息。
第 3 步: 计算扰动 (KL 散度)
为了量化某种扩展策略对特定维度到底“有多糟糕”,他们计算了扰动 (\(\mathcal{D}\)) 。 他们使用 KL 散度 (KL Divergence) ,这是一种衡量一个概率分布与另一个概率分布差异程度的标准统计量。

如果 \(\mathcal{D}\) 很高,意味着新策略 (内插或外推) 迫使模型处理它很少或从未见过的角度。
第 4 步: 选择策略
最后,算法做出选择。对于嵌入中的每个维度 \(i\):
- 计算使用外推时的扰动。
- 计算使用内插时的扰动。
- 选择获胜者。

这产生了一个混合模型,其中一些维度被拉伸 (内插) ,而另一些维度被延长 (外推) ,这是通过数学优化而非猜测得出的。
实验与结果
理论听起来很扎实,但在实际中有效吗?研究人员在 LLaMA-2 系列模型上将他们的方法与最强的基线方法 (包括 PI (位置内插) 和 YaRN) 进行了测试。
1. 长上下文性能 (LongBench-E)
他们在 LongBench-E 上评估了模型,这是一个旨在测试长文档理解能力的基准。

如表 1 所示,提出的方法 (“Ours”) 始终获得最高的平均分。
- 扰动减少 72%: 当将 LLaMA2 扩展到 8k 时,与基线相比,他们的方法大幅减少了分布偏移。
- 最先进水平 (SOTA): 它优于 YaRN 和 PI,特别是在“8k+”类别中,证明它能更好地处理极长的长度。
2. “大海捞针”测试
对长上下文模型最严苛的测试之一是密钥检索 (Passkey Retrieval) 。 模型阅读大量无用文本,其中隐藏着一个 5 位数的密钥。然后要求模型检索它。

图 4 (上图中上方的图表) 的结果令人震惊。
- 绿线 (Ours, 16k) 几乎无限期地保持在 100% 的准确率 。
- 基线模型 (蓝色/橙色) 一旦文本过长,准确率就会暴跌至 0%。
这证明模型不仅仅是在处理文本;它有效地在长距离上关注特定信息,而没有被扩展位置的“噪音”搞混。
3. 比较扰动
为什么它的表现更好?分析证实,性能与最小化我们在前面定义的“扰动”指标直接相关。

在图 8 中,绿线代表提出的方法。你可以看到,与 YaRN (橙色) 和 PI (蓝色) 相比,它在各个维度上始终保持较低的扰动。
4. 它会破坏短上下文能力吗?
上下文扩展的一个常见故障模式是模型在正常的短任务上变得“更笨”。研究人员使用标准的 Hugging Face Open LLM Leaderboard (TruthfulQA, MMLU 等) 检查了这一点。
他们的方法显示出可忽略的性能波动 (-0.12 到 +0.22) 。本质上,你在获得长上下文能力的同时,没有牺牲模型的核心智能。
意义何在
这篇论文代表了 LLM 世界从经验主义工程向理论理解的转变。
- 可解释性: 我们不再问“哪个超参数效果最好?”,而是在问“嵌入的数学分布是什么?”
- 泛化性: 由于该方法依赖于分布分析,它不需要为每个新模型架构进行手动调整。它根据数据进行适应。
- 性能: 它的效果就是更好。通过尊重预训练模型的几何结构,我们允许它更自然地泛化到未见过的长度。
结论
对无限上下文窗口的追求远未结束,但“Extending Context Window of Large Language Models from a Distributional Perspective”提供了一块关键的垫脚石。通过可视化和最小化旋转角度的分布偏移,作者为我们提供了一种稳健、数学上合理的方法,让 LLaMA 能够阅读更长的书籍,分析更大的报告,并记住更深层次的对话。
对于 NLP 领域的学生和研究人员来说,结论很明确: 当有疑问时,请观察分布。答案往往隐藏在嵌入的几何结构中。
](https://deep-paper.org/en/paper/2410.01490/images/cover.png)