为什么大模型读长文档时总「记不住中间」:Lost in the Middle 的几何真相
如果你把最重要的证据材料塞进一份 20 页的报告的正中间,再让大模型去读,它大概率会假装没看到。这不是玄学,是可以用一个二项式公式精确算出来的架构缺陷。
故事从这里开始
假设你在做一个 RAG(检索增强生成)系统。用户问了一个问题,你的检索器找回了 10 篇相关文档,把它们拼接成一个长 prompt 丢给大模型。你测试的时候发现一件奇怪的事:
如果包含正确答案的那篇文档恰好排在检索结果的第 1 位,模型几乎每次都能答对。如果排在最后一位,模型也答得不错。但如果这篇关键文档不巧排在中间——比方说第 5 位——模型的准确率会断崖式下跌,有时候甚至比”完全不给它相关文档”还要差。
你把文档换了个顺序,内容一个字没改,只是挪动了位置,模型的表现却像是换了一个模型。这是 2023 年斯坦福团队(Nelson Liu 等人)在论文《Lost in the Middle: How Language Models Use Long Contexts》里第一次系统性记录下来的现象,后来被简称为”Lost in the Middle”(中间遗忘)。
一开始大家以为这是个”训练数据不够长”或者”检索质量不行”的问题——只要模型见过更多长文本、上下文窗口做得更大,这个问题总会消失吧?
结果恰恰相反。哪怕是专门针对长上下文微调过的模型,U 形曲线依然存在;哪怕把上下文窗口从 4K 扩到 100K,模型也只是有了更大的空间去”丢”东西,U 形的底部并没有被填平。这说明问题的根子可能不在训练数据,而在架构本身。而 2025-2026 年的一系列理论论文,给出了一个相当出人意料的答案:这个”中间遗忘”现象,甚至在模型还没开始训练、权重还是随机数的时候,就已经几何地存在了。
这篇文章要讲清楚三件事:这个现象长什么样、为什么会发生、以及我们能拿它怎么办。
第一部分:现象——U 形曲线是怎么被发现的
问题是什么
Liu 等人设计了两个实验来逼近这个问题。
第一个叫多文档问答:给模型一个问题,再给它 k 篇文档,其中恰好有一篇包含答案,其余是干扰项(distractor)。他们系统性地把”含答案的那篇文档”放在第 1、第 5、第 10……等不同位置,其他条件全部保持不变,只看模型答对率随位置怎么变化。
结果非常一致:不管是 GPT-3.5、Claude,还是 MPT-30B、LongChat 这些专门做长上下文优化的开源模型,画出来的准确率-位置曲线几乎都是同一个形状——两端高、中间低,一个漂亮的 U 字。而且这个 U 形不是浅浅的波动,幅度可以差出十几到二十个百分点。
但这时候还有一个疑点没解决:是不是模型只是”语义上”更难在一堆相似的干扰文档里定位到正确答案,跟”位置”本身没关系,只是巧合地看起来像 U 形?
于是他们做了第二个实验,叫键值检索(key-value retrieval)。这是个彻底剥离了语义难度的任务:给模型一堆随机生成的键值对(比如一串无意义的 UUID 字符串对应另一串 UUID),问模型某个特定 key 对应的 value 是什么。这纯粹是字面查找,没有任何”理解”的成分——理论上模型只要能”看到”整个输入,答案就应该是唯一确定、容易找的。
结果 U 形曲线依然出现了。这个实验排除了”语义太难”的解释,说明这是一个更底层的、跟位置本身绑定的效应。
更让人意外的是
扩大上下文窗口不但没解决问题,反而经常让情况更糟——不是因为模型变笨了,而是因为窗口越大,”中间”这个危险区域就越长,答案掉进这个区域的概率也就越大。换句话说,长上下文能力的宣传语(“支持 100 万 token”)和”能可靠用好这 100 万 token”完全是两件事。
这个发现在当时(2023 年)引发了不小的反思:很多”needle in a haystack”式的长上下文评测,只是简单地把”针”塞进文本里测一下能不能找回来,如果针恰好总是被放在容易的位置(比如开头),测出来的分数会系统性地高估模型的真实长上下文能力。
第二部分:直觉——这到底是为什么
一开始的猜测:softmax 学坏了?
现象被发现之后,第一批解释都聚焦在”训练学出来的坏习惯”上。一个很自然的猜测是:模型在训练时看到的大多数”重要信息”可能天然就靠近句首或句尾(比如摘要、结论段落),导致 attention 学会了”偷懒”,习惯性地把注意力权重堆在两端,而不去公平地扫视中间内容。
这个猜测催生了 2023 年另一篇很有影响力的论文——Xiao 等人的 StreamingLLM,他们观察到几乎所有 Transformer 都会有一小部分”注意力汇聚点”(attention sink),通常是序列最开头的一两个 token,不管这些 token 本身有没有意义,都会吸收掉大量的注意力权重。如果你在做流式生成、需要淘汰旧 token 来省内存,一旦把这几个”汇聚点” token 也淘汰掉,模型的困惑度会瞬间爆炸——哪怕这些 token 语义上毫无价值。
这个发现很重要,但留下一个问题没有回答:为什么偏偏是开头?为什么不是随机分布,或者干脆平均分布?
一个反直觉的答案:这跟”学习”没关系,是几何结构逼出来的
2025-2026 年出现的几篇理论论文给出了一个更彻底的答案:U 形曲线在模型随机初始化、一次训练都没做过的时候,就已经存在了。
这句话听起来有点反直觉——模型还什么都不知道,怎么会”偏爱”某个位置?但如果你换一个角度想,答案其实很朴素:一个 decoder-only Transformer 的信息流动方式,天生就不是”公平”的。它由两个结构性因素共同决定,谁都逃不掉。
因素一:因果掩码,让”越早的词”天生站在越多条路的交汇口
Transformer 是逐层堆叠的,每一层的每个 token 都会去”看”(attention)它前面所有的 token。这意味着,如果你是序列里第 1 个词,你的信息不仅会直接影响第 2 层、第 3 层……的所有后续 token,你还会通过”被间接引用”的方式,渗透进无数条更长的信息路径里。
打个比方:想象一个小镇,只有一条单向公路,所有的路口都只能往前走(这就是因果掩码——后面的词能看前面的词,前面的词看不到后面的词)。镇口的第一个路口,是所有后续路线都必须经过的枢纽;越往镇子深处走,路口的重要性反而越分散,因为车流已经被前面的路口稀释、打散过很多次了。深度越深(层数越多),这种”越靠前越是枢纽”的效应就越被放大——因为每往前叠一层,早期 token 就多了一层被引用的机会。
这个效应在数学上可以精确算出来:如果只考虑因果平均(不考虑残差连接),经过 H 层堆叠之后,某个位置 x(用 0~1 表示在序列里的相对位置,0 是最开头)对最终输出的影响强度会随着 x 趋近 0 而发散——发散的速度是 (ln(1/x))^(H-1) 量级,层数越深,这个发散越剧烈。这就是”注意力汇聚点”更本质的几何来源:不是模型学出来的坏习惯,是因果掩码 + 深度堆叠这套结构,数学上就逼着早期 token 变得格外重要。
因素二:残差连接,给”最后一个词”开了一条绕过所有中间站的高速公路
但只有因素一还不够,因为它预测的是——早期 token 越来越重要,后期 token 越来越不重要,曲线应该是单调下降的一条斜线,不是 U 形。2025 年 Wu 等人(MIT)用图论方法精确证明了这一点:在一个纯 attention、没有残差连接的模型里,随着深度增加,累积注意力会完全坍缩到序列的第一个 token 上——这是纯粹的”首位偏见”,没有任何”末位偏见”的迹象。他们自己在论文里也把这个跟真实观测到的 U 形曲线的差异,列为一个待解决的开放问题。
答案就藏在被他们暂时忽略的那个组件里——残差连接(Residual Connection)。
残差连接的作用是让每一层的输出等于”这一层新算出来的东西”加上”原始输入原封不动地传过来的那一份”。这意味着序列里最后一个 token(也就是模型即将要生成下一个词、最直接影响输出的那个位置)有一条特殊的捷径:它可以完全绕开一层一层被注意力”稀释”平均的过程,直接把自己的信号原封不动地”传送”到最终输出。这就像高速公路旁边专门给最后一站修了一条直达匝道——不需要经过任何红绿灯(注意力平均),直接开到终点。
数学上,这条捷径贡献了一个孤立的、强度为 O(1)的”尖峰”,精确地锚定在序列的最后一个位置上,完全不随深度衰减。
把两个因素叠在一起,U 形就自然出现了:开头因为”因果掩码 + 深度”获得了指数级增长的枢纽地位,结尾因为”残差连接”获得了一条不被稀释的直达通道,而中间的词只能靠”混合路径”——有时候走了残差捷径、有时候又被平均稀释——两头都占不到便宜,影响力被组合数学意义上压缩到了一个很小的量级(量级大约是 1/(层数-1)! ,层数越深,中间越惨)。这篇论文(Chowdhury, 2026)把这个中间区域形象地称为”阶乘死区”(factorial dead zone)。
一个更硬核的证据:跟位置编码没关系
这个理论最有说服力的地方在于,它顺手排除了另一个常见的怀疑对象——RoPE(旋转位置编码)。很多人的直觉是,RoPE 这类”距离越远、相关性衰减越快”的相对位置编码,才是造成远处内容被忽略的元凶。
但 Chowdhury 的分析证明,在随机初始化阶段,query 和 key 向量都是各向同性的高斯分布,而各向同性的高斯分布在做任意角度的旋转(RoPE 本质上就是给 query/key 做一个跟相对距离相关的旋转)之后,分布形态完全不变。这意味着无论你用不用 RoPE,初始化阶段模型算出来的注意力分布在数学期望上是完全一样的——RoPE 根本没有机会去影响这个初始的几何结构。
他们在真实的 Qwen2-0.5B(24 层)和 GPT-2 上做了实验验证:开不开 RoPE,未经训练模型的”输入-输出影响力曲线”几乎完全重合(Spearman 相关系数 0.99)。也就是说,U 形曲线的锅,不能全甩给位置编码——它更早、更深地写在了”因果掩码+残差连接”这套最基础的架构选择里。
那这是不是意味着训练完全没用?
不是。前面说的都是”初始化时刻”的几何先验——模型还没见过任何数据的时候就已经带着这个偏见出生了。真实的、训练完成的模型,attention 权重当然不再是随机的,模型确实会学到一些”非线性路由”(query 和 key 学会互相关联,不再是均匀分布)去主动补偿这个偏见。
2026 年另一组研究者(Herasimchyk 等人)专门研究了这个”训练之后会怎样”的问题:他们把残差连接纳入到经典的”attention rollout”(逐层追踪信息流)框架里,并且直接拿真实训练好的模型去验证,结果发现——理论预测的 U 形结构,跟真实训练模型里测到的注意力/影响力分布,相关系数高达 0.88~0.98。换句话说,训练虽然确实调整了很多东西,但那个由架构决定的 U 形骨架,基本原封不动地保留了下来——优化器在跟一个天生不公平的几何结构”讨价还价”,但没能把它彻底掰直。
这也跟另一组来自认知科学背景的研究者(Rutgers 大学)的发现相互印证:他们从零开始训练小模型去做类似人类”自由回忆记忆实验”的任务,发现 U 形曲线会自然地从”局部预测靠近期上下文”和”某些任务需要均匀记住整段历史”这两种训练压力的博弈中涌现出来——跟人类记忆里经典的”首位效应+末位效应”惊人地相似。这提示我们:U 形也许不完全是”缺陷”,某种程度上也是模型在给定架构约束下,对训练目标做出的一种”合理但不完美”的适应。
第三部分:这意味着什么
把这几条线串起来,我们大概可以画出一幅完整的图景:
- 架构决定基线:decoder-only Transformer 的因果掩码 + 残差连接这套最基本的结构选择,几何上就决定了序列开头和结尾会天然获得更多影响力,中间会天然被压制——这个偏见在模型出生(随机初始化)的那一刻就已经存在,跟位置编码方案(RoPE、ALiBi 还是绝对编码)基本无关。
- 训练加固而非消除:大规模预训练会用学到的、内容相关的注意力去努力对抗这个几何偏见,但优化目标里没有专门针对”公平对待中间内容”的强激励,所以这个 U 形骨架基本被完整保留了下来,只是被内容相关的信号叠加、修饰。
- 它不是绝对不可逾越的:多篇论文都强调,这是一个”架构先验”(architectural prior),不是数学上的死锁。像 Hsieh 等人的”found-in-the-middle”校准方法,直接在推理时把这个纯位置性的偏差成分从注意力分数里减掉,就能让 RAG 任务的准确率提升最多 15 个百分点——说明只要精准定位到机制,是可以工程化地绕过去的。
对于实际做应用的人,这几条结论能直接翻译成行动:
- 不要迷信”上下文窗口越大越好”这句营销话术。窗口大只代表模型技术上能塞下更多 token,不代表它能公平地”看到”每一个 token。评测长上下文能力时,一定要把关键信息放在不同位置分别测试,而不是只测”放在开头能不能找到”。
- 在 RAG 里主动利用/对抗这个 U 形。既然模型天然更信任开头和结尾,那就把重排序(rerank)之后置信度最高的文档,刻意排到 prompt 的最前面和最后面,而不是按检索分数简单地从高到低排列。业界已经有现成的做法(比如 LangChain 的 Long Context Reorder)专门干这件事。
- 压缩比堆砌更有效。与其把 20 篇文档一股脑塞进 prompt、指望模型自己在中间大海捞针,不如先用便宜的模型或重排序器筛掉大部分低价值内容,让真正重要的信息离两端更近、离危险的中间区域更远。
下一篇预告
这篇文章讲的是”为什么长上下文里位置本身会造成偏见”——一个几何/结构层面的答案。但架构偏见只是故事的一半:模型还会在语义层面产生另一种更隐蔽的失真,比如把两个语义相近但方向不同的事实混为一谈,或者在多步推理中因为”锚定”了错误的中间结论而全盘出错。这些跟”位置几何”无关,却同样让模型在长文本、多步任务里显得不够可靠——这会是我们接下来要拆开来看的下一块拼图。