Hallucination ≠ Attention Dilution

大模型「幻觉」与「长上下文注意力分散」
是同一个问题吗?

很多人把「上下文太长 → 模型答错」直接说成「模型又幻觉了」。它们症状相似,但一个是知识的真实性出了问题,一个是对资料的使用率出了问题。开错药方,问题永远治不好。

01结论先行:不是同一个问题

幻觉(Hallucination):生成内容的真实性坏了——模型凭「参数记忆」脑补,输出和事实对不上。哪怕上下文极短、甚至没有上下文,它照样发生。

长上下文注意力分散(Attention Dilution / Lost in the Middle):模型对给定资料的利用率坏了——答案明明写在上下文里,但因为材料太长、证据埋在中间,模型「没读到、没重视」,于是答错或答漏。

一句话区分:幻觉是「脑子里没有,还要硬编」;注意力分散是「资料就在桌上,却看不见」。

为什么值得单独写一篇:它们经常被混为一谈——长上下文确实是诱发一类幻觉的「扳机」,但那是间接联动,不是同一个机制。把两者分清楚,才懂得:有的问题该「喂更多资料 / 管好上下文」,有的问题该「外接检索 / 校准模型」,两者药方完全不同。
用户的提问 (同一个问题,两种失败方式) 路径 A · 参数型幻觉 参数记忆里「没有」或「记错了」这份知识 为续写流畅,概率补全「听起来合理」的内容 → 一本正经地胡说(编人 / 编数据 / 编出处) 与上下文长度无关 · 短问题也会发生 路径 B · 上下文利用失败 长上下文里明明有正确答案 (但埋在文档中段 / 被上万 token 淹没) 注意力被摊薄,关键证据没被读到 → 答漏 / 答错 / 「文档里没写」 上下文越长越明显 · 与材料长短强相关 B 发生后若模型「看不见就硬编」→ 输出与材料矛盾 = 忠实性幻觉(B 诱发 A 的一种表现)

图:两种失败模式的本质差异。箭头底部虚线 = 二者最常见的「联动」环节(详见第 4 节)。

02先给两个现象下准确定义

🎭 幻觉(Hallucination)

模型输出的内容流畅、自信,但与事实不符、与上下文矛盾、或根本不存在于任何来源。它由「预测下一个 token」的语言建模方式决定——模型在补全一段「像样的文本」,而不是在查询一份「事实数据库」。按输出毛病分成几类:

事实性

编造不存在的人名、日期、数字、论文、法条:与外部世界不符。

忠实性

输出与用户提供的材料相矛盾,或摘要里加了原文没有的信息。

一致性

同一段对话里前后矛盾、自打嘴巴、忘记自己刚说过的话。

完整展开见同目录《大模型幻觉:本质、根因与演进》。这里只需要记住一个锚点:幻觉的病灶在「答案没有可靠来源」。

📏 长上下文注意力分散(Attention Dilution / Lost in the Middle)

上下文窗口拉长后(几十 K ~ 百万 token),模型对每个 token 的平均注意力预算被摊薄,加上位置/深度偏差,出现三种典型退化:

中间遗忘

对长文档前、后段的信息利用好,中间段明显更差(U 型曲线,见下图)。

指令失效

要求放在很靠前的指令容易被淹没;放在结尾的反而记得牢(近因效应)。

证据忽略

即便证据在上下文里,模型仍可能说「材料中未提及」,或给出与材料冲突的回答。

锚点:注意力分散的病灶在「信息给了,但模型没取用」。它是研究「Lost in the Middle」(Liu et al., 2023)与「大海捞针 / Needle-in-a-Haystack」测试要描述的那类退化。

① 短上下文:注意力集中,证据清晰 证据区 注意力预算 → 大块给证据 ~0.6 ② 长上下文:预算摊薄,证据成沧海一粟 证 证据只分到 ~0.02,淹没在噪声里 ③ 「Lost in the Middle」U 型:召回正确率 vs 证据在文档中的位置(示意) 中间差 开头好 结尾好 证据位置 → 越高越准

图为「示意」,非实测数据;LongBench / NIAH 等基准在不同模型上数值各异,但「长 = 更易丢中间」的方向性结论是稳健的。

03底层机制:一个「知识坏了」,一个「提取失败」

🎭 幻觉的机制(参数路径)

  • 知识被有损压缩进参数:模型记的是「统计模式」,不是事实条目。
  • 训练目标是「续写像语料的话」,没有「对/错」约束。
  • 冷门问题 = 参数里信号稀疏 → 只能靠「相似模板」插值硬补。
  • 没有可靠的「我不知道」出口,硬编往往比认怂更像人话。

一句话:答案生成时根本没有可靠来源 → 输出失真。

📏 注意力分散的机制(上下文路径)

  • softmax 注意力要对所有 token 分权重:token 越多,每个分到的平均权重越小。
  • 训练数据以短序列为主,长序列分布训练不足,位置外推靠插值「凑合」。
  • 位置/深度偏差:开头结尾强(原语/近因)、中间弱。
  • 多个注意力头倾向集中在局部词与少数「汇聚 token」,长程证据易被忽略。

一句话:答案明明在资料里,但信号没被提取出来 → 用不上。

幻觉 ≈ 生成真实性失败 = f(参数记忆有损,无真值约束)

注意力分散 ≈ 资料利用失败 = g(注意力预算摊薄,位置偏差,长程训练不足)
关键差异:幻觉的失败点在「来源」(无据可依);注意力分散的失败点在「提取」(有据不取)。这也决定了诊断手段完全不同——幻觉要查「知识有没有」,注意力问题要查「证据给没给到位」。

04为什么常被当成一个问题:它们会「联动」

注意力分散本身不是幻觉,但它是最常见的一类幻觉——忠实性幻觉——的主要触发器。联动链条:

上下文过长 几十K+ token 注意力摊薄 / 中间遗忘 关键证据没被读到 退回参数记忆续写 「看不见就硬编」 忠实性幻觉 输出与材料矛盾

于是你观察到的现象是真实的:「喂的材料越长,模型越容易说出和材料不一致的内容」——这就是很多人把它笼统叫「幻觉」的原因。但注意链条的起点:病根是上下文利用,不是知识记忆。把证据读进来,输出立刻老实。

混淆的代价:若误判为「参数记忆问题」,你会去加大模型、洗数据、调对齐——花大钱却治不到点子上(证据还是读不到);若误判为「长上下文不够长」,你会继续加长上下文——结果注意力更稀释,越长越糟。正确的姿势是先分诊(第 6 节),再决定用哪套方案(第 7/8 节)。

反过来的关系也要说清:并非所有幻觉都源于注意力。绝大多数「事实性幻觉」在没有上下文、甚至闭卷单问时就会发生——那种幻觉加再多上下文、再优化注意力也没用,只能靠检索与外部事实源兜底。

05五维对比表:一张表记住全部区别

维度🎭 幻觉📏 长上下文注意力分散
问题本质生成内容的真实性错误(与事实 / 来源不符)对给定上下文的信息利用失败(有答案却没用上)
失败环节答案「来源」环节:无据可依答案「提取」环节:有据不取
发生条件无需长上下文;短问答、闭卷裸答照样发生需要长上下文才暴露;越长老化越明显
根因参数化记忆有损 + 自回归无真值约束 + 语料噪声/长尾softmax 注意力预算摊薄 + 位置/深度偏差 + 长序列训练不足
典型表现编人名/日期/引用/结论,自信流畅但经不起核验证据在文里却被忽略、中间段遗忘、说「文档没写」
诊断实验短上下文交叉问事实,核验与外部知识是否一致同一证据放开头/中间/结尾 × 不同总长,观察命中率变化
主要解法RAG/工具/引用兜底 + 数据与对齐校准 + 不确定表达少塞多检(RAG 化)+ 信息前置/重复 + 摘要压缩 + 长文训练
关系幻觉 ⊇ 忠实性幻觉;注意力分散是忠实性幻觉的常见诱因之一,二者是「过程失败 → 输出失败」的上下游,而非同一物。

06现场诊断指南:三步分清再开药

  1. 第一步:判断答案是否必须依赖给定材料?

    问的是「世界事实 / 模型常识」→ 大概率是参数记忆路径;问的是「你给的这份文档里写了什么」→ 走上下文路径。

  2. 第二步(上下文路径):做「位置 × 长度」对照实验

    把含答案的同一句话分别放在上下文开头 / 中间 / 结尾,并分别用小上下文与长上下文提问。若「短对长错」「开头对中间错」→ 锁定为注意力 / 上下文管理问题,与知识无关。

  3. 第三步:要求模型「引用证据」再判定

    在 prompt 里要求输出必须带原文位置/引用。若能引用且引用正确 → 知识没问题;若答不上来又不肯引用 → 按第 1 步结论分别处理:短问答错 → 治幻觉;长文答错 → 治上下文。

自测提示词(复制即用):
请严格基于上文回答;每个结论后标注出处段落号。
如果上文没有信息,请直接回答「上文未提及」,禁止自行补充。
如果你发现上文信息彼此矛盾,请指出具体段落号。
模型仍答错时的区别:短上下文也错 → 知识/事实型幻觉;短对长错 → 上下文利用失败。

🧪 交互自测:下面哪个是「幻觉」,哪个是「注意力分散」?(点击选择)

情景 1:无任何资料,直接问「XX 公司 2025 年营收多少?」,模型答出精确数字「327 亿」,但该数字是编的。
情景 2:用户贴入 6 万字合同,答案条款明确写在第 5 万字(中段),模型却回答「合同中未约定该条款」。
情景 3:贴入 6 万字合同后要求总结,模型总结时「补」了一句合同里根本没有的赔偿责任。
情景 4:只问一个冷门事实(无材料),上下文极短,模型自信地给出了 2023 年诺贝尔物理学奖得主「张伟」。(事实错误)

情景 3 是「二者联动」的经典形态:没读到 → 硬编 → 输出与材料矛盾,性质属于忠实性幻觉,药方却要按上下文问题处理。

07治「幻觉」:让答案有可靠来源

幻觉的根在「答案无据可依」。所以方案的主线是给答案找来源 + 让模型学会承认没来源:

🔍 检索增强 RAG(最有效)

从闭卷变成开卷:先检索权威文档,把证据塞进上下文再作答,并要求逐句引用。事实型幻觉通常下降一个数量级。见《RAG 检索增强》。

🛠️ 工具/外部事实源兜底

会算的用计算器、会变的用搜索 API、会查的用数据库/代码执行器——把「记事实」外包给确定性工具。

🎯 训练与对齐侧

高质量清洗数据、RLHF/DPO 把「准确性」写进偏好、教会模型在不确定时表达不确定。

🧊 解码与校验侧

降低温度;self-consistency 多次采样投票;verifier/LLM-as-judge 复核;置信度低时拒答。

提示词侧即时止血:「不知道就说不知道」「只基于给定材料回答」「每条结论给出证据」——三句话能显著压低被迫续写式的幻觉。

完整方法论见同目录《降低幻觉的方法全景》。

08治「注意力分散」:管好喂进去的信息

注意力问题的根在「信号淹没」。方案主线是让关键信号少而靠前 + 降低上下文噪声,而不是一味加长:

✂️ 少塞多检(最有效)

别把 10 万字全塞进去。文档切块 → top-k 检索 → 只把最相关的几段送进上下文。把「10 万字长上下文问题」降级成「几百 token 短上下文问题」,中间遗忘直接消失。

📍 信息位置策略

关键指令与证据放开头或结尾;重要内容可重复一遍;把用户问题同时放在材料之前与之后(双端强化)。

🗜️ 摘要 / 压缩(Map-Reduce)

超长文档先分块摘要、再合并精读;Agent 长对话用历史记忆压缩代替无限追加原文。关联《LLM 为什么没有记忆》。

🏋️ 模型与推理侧

长上下文续训、RoPE/YaRN 外推、GQA 降显存、FlashAttention 提速。注意:「能塞进 100K」≠「中段用得好」,上线前用 NIAH / 长文问答做位置曲线评测。

反直觉提醒:对一个「注意力分散型」错误,继续加长上下文通常是负优化——预算进一步摊薄。正确方向是缩短有效输入:检索、切分、摘要、前置。

底层原理(外推、KV Cache、FlashAttention)见《长上下文 Long Context》与同目录《KV Cache 与提示缓存》。

09统一工程实践:两套手段一起上

现实系统里两类问题同时存在,推荐一套「分诊 → 喂对 → 校验」的统一链路:

用户提问 ① 分诊 事实性问题? 依赖事实/知识 ② 检索/工具取证据 RAG / 搜索 / DB ③ 组上下文(检索结果置顶 + 原文引用标记) 依赖给定文档 (长文档)→ 切块检索 ④ 生成 + 引用校验 要求带证据 · 无据拒答

🧭 该用长上下文还是 RAG?

材料 < 8K 且不追求极致成本 → 直接塞;材料长 / 噪声多 / 频繁变 → 检索化。两者可混合:RAG 取回 top-k 后,把原文片段放上下文开头作答。

🛡️ 引用作为护栏

强制模型输出「证据锚点」(段落号/文件名/URL)。人工或校验模型可核验,无法给出锚点的输出直接拦截——这是同时对治两病的廉价手段。

📈 用评测持续盯

幻觉侧跑事实核验基准;注意力侧跑「位置×长度」命中率曲线。两类指标分开记录,才能确认某次优化到底治好了哪一边。

10速记卡与关联阅读

一句话

幻觉 = 参数脑补(没有还硬编)
注意力分散 = 资料无视(有却看不见)

记忆锚点

幻觉看来源,注意力看提取。前者短问也犯,后者越长越犯。

联动记忆

太长 → 读不到 → 硬编 = 忠实性幻觉。现象是幻觉,病根是上下文。

药方对照

幻觉 → 检索 + 引用 + 校准;注意力 → 少塞多检 + 前置 + 压缩。开反药方反而更糟。

对照实验

同证据放「开头/中间/结尾 × 短/长」——短对长错,即上下文问题。

必考论文

Lost in the Middle(Liu et al. 2023);Needle-in-a-Haystack(NIAH)。