上下文旋转机制解析:为何长输入会降低大语言模型的准确率
了解旋转位置嵌入和softmax为何会导致长提示词中的准确率下降,以及哪些习惯能保持上下文的有效性。
将较长的提示词输入到2025年测试过的任何前沿模型中,答案质量都会下降,即便所询问的内容就存在于文本中。Chroma在2025年对18种此类模型进行的测试显示,那些隐藏在输入内容中间的事实的准确率会下降30%以上。其原因与所谓的“注意力持续时间”并无太大关系,而是源于变换器对词元位置编码的方式。
人们将这种现象称为上下文衰退,它与达到上下文长度限制是不同的问题。2023年斯坦福大学的一项实验解释了其中原因:给模型提供20份检索到的文档,大约4,000个标记,这一数量与现代系统的上限相比微不足道。如果相关事实位于最开头,模型的正确率可达70-75%;而将该事实移到中间位置后,准确率则降至55-60%。信息依然存在且正确,只是模型赋予它的权重降低了。
衰退现象的成因
大多数电流互感器都使用旋转位置嵌入(RoPE)来标记词元顺序。已知RoPE存在长期衰减现象:两个词元之间的距离越远,理论上一个词元能够关注另一个词元的程度上限就越低,而与这两个词元实际含义无关。Softmax会进一步加剧这一问题。它会将注意力引向那些得分已经较高的词元,从而偏向上下文的开头和结尾,形成研究人员所称的“中间缺失”的U形曲线。
你可以通过一个简单的脚本查看这种衰减的形态。该脚本仅基于RoPE的频率结构构建,并未使用任何真实模型的权重,因此仅作为示例阅读。它唯一需要的库是numpy:
import numpy as np
以下则是用于衡量相似度上限随距离增加而缩小的函数:
def rope_similarity_decay(distances, dim=64, base=10000):
freqs = 1.0 / (base ** (np.arange(0, dim, 2) / dim))
decays = []
for d in distances:
bound = np.mean(np.cos(freqs * d))
decays.append(bound)
return np.array(decays)
当令牌距离逐渐增大时,结果如下:
Token distance | Relative similarity bound
1 | 0.9662
10 | 0.6579
50 | 0.4898
100 | 0.5586
500 | 0.2006
1000 | 0.2789
5000 | -0.1309
10000 | 0.0494
50000 | -0.0898
相距1到10个位置的令牌,其关联度仍接近1.0。而当令牌间距达到数千个时,该关联度会降至接近零的水平,甚至在某些点上低于零,因此相距甚远的令牌之间的几何关系已无法可靠地表明“这两个令牌存在关联”。需要注意的是,这一变化并非平滑过渡,而是一个呈下降趋势的曲线,并在其中包含真实的振荡现象。这些测试并未针对特定模型,但确实解释了为何这个问题具有结构性,仅仅通过训练更大的模型是无法解决的。
更大的窗口也无法解决这个问题
研究人员现在将宣传中的上下文窗口长度与最大有效上下文窗口(MECW)区分开来,后者才是模型实际能保持良好性能的极限长度。根据2025年针对这一差异的研究,在复杂任务中,实际有效上限可能比规格表上的数值低多达99%。所谓百万标记窗口,仅意味着模型在处理一百万个标记之前不会出错,并不能说明它能否有效利用所有这些标记。
为何编程智能体受影响最严重
对于编程智能体而言,上下文恶化被视为核心故障模式,这属于输入数据质量问题而非能力缺陷。在处理长期任务时,智能体会不断搜索、探索并回溯,而每一个死胡同都会在历史记录中留下“噪声”。这些噪声会拖累后续的每一步操作,尽管使用相同模型在全新上下文中就能轻松完成任务。因此,即使令牌数并未耗尽,长时间会话仍可能失败:第一轮的指令在第五十轮时依然存在于对话中,但模型的注意力可能已无法再覆盖到它们。
有哪些帮助措施
RAG与长窗口并非可以互相替代。检索技术的价值在于能从海量数据中筛选出相关部分,因为一次性将所有内容都纳入处理会直接导致前述的位置衰减问题。在检索之后,所有的解决方案都指出同一个要点:保持工作上下文简洁清晰,而非庞大完整。
- 对过时的对话记录进行总结或删除。
- 将决策所依赖的内容放在提示语的开头或结尾,绝不能置于中间。
- 要记住,“内容合适”与“模型会使用它”是两个不同的概念。
快速解答
什么是上下文衰减? 即即使窗口未满且所需信息存在,随着输入长度的增加,输出质量也会下降。
为什么中间部分最差? RoPE的设计初衷就是削弱远处标记之间的关联,而softmax则会将注意力集中在那些得分已经较高的位置上,这些位置通常就是最开头和最后的那些。
增大限制值就能解决这个问题吗? 不能。实际可用的上下文长度往往远小于宣传的数值,尤其是在处理复杂的多步骤任务时。
只是空间不足导致的吗? 不是。在仅有几千个标记时,准确率就会明显下降,这远低于前沿模型所能处理的数十万个标记的数量。
关于上述代码需要说明的一点是:它只是一个简化的频率模型。实际表现取决于建立在这个几何基准之上的训练得到的注意力权重,因此该基准只能解释部分效应,而非全部。