大语言模型(LLM)正变得越来越贪婪,对 上下文 的需求也日益增长。OpenAI 的 GPT-4 Turbo 如今支持高达 128k tokens,Anthropic 的 Claude 3.5 系列更是超过 200k。表面上看,如此庞大的 上下文 窗口应该能有效减少 幻觉(捏造或不正确的响应),但事实往往恰恰相反。这是为什么?尽管扩展 上下文 提升了潜在的输入范围,但也放大了自回归模型在架构上的弱点和认知超载问题。本文将深入探讨为何 幻觉 会随着 上下文 的增大而加剧,以及在压缩、架构和优化方面有哪些进展可以对抗这一趋势。简而言之,我们需要的不仅仅是更多的 上下文,而是更好地利用 上下文。
上下文 的本质:模型如何理解输入?
在基于 Transformer 的 LLM 中,“上下文”指的是输入模型的所有 token 序列,包括系统消息、用户 prompt、检索到的文档以及聊天记录。Transformer 将这个序列视为一个扁平的、位置编码的流,并不区分语义重要性。LLM,包括 LLaMA 3 和 GPT-4,会将这个 上下文 tokenize 为子词单元,并使用自注意力机制将每个 token 与序列中的所有其他 token 相关联。
举个例子,假设用户输入以下内容:
“总结用户上条消息的要点,忽略那些格式化的声明。”
这段文本会被 tokenize 成如下形式 (数字为token ID示例):
[5232] 总结 [262] 的 [2214] 主要 [4841] 要点 [286] 的 [262] 用户’s [2197] 上条 [4487] 消息 [290] 和 [6245] 忽略 [262] 的 [24974] 格式化 [10277] 声明 [13] .
这些 token ID 作为一个序列输入 Transformer:
[5232, 262, 2214, 4841, 286, 262, 1064, 2197, 4487, 290, 6245, 262, 24974, 10277, 24263, 13]
这种扁平化的处理方式,加上对所有token一视同仁,成为了后续 幻觉 产生的一个潜在原因。模型无法天然区分哪些信息是核心,哪些是冗余的,导致在超长 上下文 中容易迷失。
自注意力机制:记忆与遗忘的跷跷板
自注意力(Self-Attention)机制是 Transformer 推理能力的核心。它使每个 token 都能“关注”所有其他 token,并根据相关性分配权重。然而,随着序列长度的增加,会出现两个问题:
-
平方成本(Quadratic Cost):注意力计算的复杂度随着输入长度呈平方级增长(O(n²))。传统的自注意力机制具有平方复杂度。每个 token 必须关注每个其他 token,导致 n² 次运算。对于长序列来说,这变得非常昂贵。例如:8K tokens = 64M 次运算。这意味着处理更长的 上下文 会消耗更多的计算资源,效率降低。
-
注意力稀释(Attention Dilution):随着 token 数量的增加,相关性变得难以计算。由于平方级增长,每个 token 必须计算跨指数级增长的位置的注意力权重,这使得专注于真正相关的信息变得越来越困难。这会产生一个信噪比问题,重要的关系在处理无关 token 对的计算开销中丢失。可以理解为,注意力资源被大量无关信息分散,导致模型无法有效聚焦关键信息,进而产生 幻觉。
例如,一个包含10万token的长篇法律文件,模型在回答“被告的辩护理由是什么?”时,需要从这10万个token中找出与辩护相关的部分。如果注意力机制被稀释,模型可能错误地关注到其他无关条款,导致答案错误甚至捏造。
幻觉 的根源:虚构、误导与架构瓶颈
幻觉 是 LLM 自信地输出在语法上正确但事实上不正确的内容。这些现象通常在以下情况下出现:
-
推断不存在的实体:
- 例子:用户询问 ChatGPT,“Python++ 编程语言的创始人是谁?”
- 产生 幻觉 的回应:“Python++ 是 Jonathan Kramer 于 2012 年创建的,作为 Python 的面向对象增强版本。”
- 事实:“Python++ 不存在。Jonathan Kramer 在这种情况下也不存在。该模型推断出一种不存在的语言,并根据合理的模式虚构了一个身份。”
-
捏造引用:
- Prompt:“给我三篇关于 LLM 处理长 上下文 的论文。”
- 产生 幻觉 的回应:“当然!这里有一些参考文献:\n1. Chen, Y. et al. (2023). ‘Long Attention in Language Models.’ NeurIPS.\n2. Kumar, S. et al. (2022). ‘Token-Aware Transformers.’ ACL.\n3. Wang, L. et al. (2023).’Context Memory Models.’ ICML.”
- 事实:这些论文不存在——标题、作者和会议都是模型为了匹配查询的语气和领域而编造的。
-
错误地归因事实:
- Prompt:“哪个公司开发了 LLaMA 语言模型?”
- 产生 幻觉 的回应:“LLaMA 是由 OpenAI 开发的,作为 GPT 的轻量级版本。”
- 事实:LLaMA 是由 Meta AI 开发的,而不是 OpenAI。
-
创建看似合理但不准确的推理链:
- Prompt:“你能解释一下 Transformer 是如何通过模仿大脑神经元来学习的吗?”
- 产生 幻觉 的回应:“Transformer 通过模仿突触放电模式并使用尖峰时间依赖可塑性 (STDP) 来模拟大脑神经元,使它们能够以类似于生物系统的方式发展记忆。”
- 事实:Transformer 不使用 STDP 或以这种直接的方式模仿生物神经元。它们依赖于矩阵运算、注意力机制和优化函数,这些函数并非在生物学层面上受到启发。
架构限制:长上下文为何崩溃
- 位置编码漂移和分辨率损失:Transformer 需要位置编码 (PE) 来跟踪 token 的顺序,但大多数编码(如绝对或正弦 PE)并没有经过超出原始 上下文 窗口的训练,并且在推断时变得不精确。例如,在RoPE(旋转位置编码)中,由于有限的浮点精度,高频正弦分量对于非常大的 token 位置变得无法区分。这导致模型对输入位置的感知模糊。
- 结果:即使信息在技术上适合 上下文 窗口,较远的信息也会“模糊不清”。
- 注意力衰减和距离碎片化:自注意力具有天然的近因偏见:token 倾向于关注附近的邻居,而不是远处的邻居,尤其是在生成过程中。即使使用 RoPE 或 ALiBi,注意力权重也会随着距离衰减,导致早期或中间 上下文 token 在长输入中的影响降低。注意力头会专门化和碎片化:每个注意力头可能只关注 上下文 的一部分,这种划分削弱了对完整序列的理解。
- 结果:即使理论上可以全局访问,但在实践中,LLM 会“忘记”长输入的中间部分,或者忽略关键的远处事实。
- 自回归单程生成和漂移:LLM 逐个生成 token,没有修正,这使得早期的错误不可逆转——如果生成了一个不正确的事实,它就会被“锁定”并在此基础上构建。暴露偏差会放大分歧:由于模型是在真实序列上训练的,但会根据自己过去的的输出进行推断,因此随着序列的进行,生成质量会下降。近因偏见加剧了 幻觉:上下文 的后面部分(或之前的模型输出)占据主导地位,通常会覆盖之前出现的实际信息。
- 结果:模型会产生连贯但不正确的内容,尤其是在处理长文档或多轮交互时。
- 二次复杂度和稀疏利用:自注意力随着 上下文 长度呈二次方增长,这迫使架构做出妥协(如稀疏注意力或分块),从而限制了对长输入的充分利用。许多 token 没有得到充分利用:注意力在许多位置上被“稀释”,降低了任何单个 token 的有效贡献,尤其是在中间位置。检索行为崩溃:Transformer 头无法线性扩展,以保持对 100K+ token 的敏锐关注;检索效果趋于稳定。
- 结果:增加 上下文 长度通常会增加成本,但不会提高性能,导致计算浪费和收益递减。
- 基准测试失败暴露了系统性弱点: “大海捞针”任务表明,只有当查询的信息靠近开头或结尾时,模型才能成功,这证实了衰减和偏差的综合影响。LongBench 结果表明,仅凭 上下文 大小并不能保证理解——如果没有微调或架构调整,模型在基本的问答任务中会失败。像 MemGPT 这样的内存增强设计正在涌现,专门用于克服这些缺陷,这进一步证实了原生 Transformer 限制是结构性的。
- 结果:长 上下文 模型不仅仅是“更大”——它们需要更智能的机制来使用额外的空间。
如果模型可以访问整个输入,为什么不能简单地“推理”来消除噪声并找出正确的信息?为什么不“更努力地”寻找正确的信息?答案在于更深层次的算法限制。
算法壁垒:长 上下文 推理的阿喀琉斯之踵
除了架构约束之外,Transformer 模型还面临算法限制,这使得它们无法可靠地处理长 上下文 任务,尤其是那些需要结构化推理、递归或算法模式匹配的任务。
-
缺乏真正的计算或控制流:Transformer 在固定大小中不是图灵完备的 (Hahn, 2020),虽然它们可以近似训练期间看到的模式,但它们很难模拟长序列上的算法。例如,计数、迭代和递归只是近似的,并且准确性在训练分布之外会急剧下降。匹配括号、复制序列或排序等任务(都是简单的算法任务)会随着输入长度超出训练范围而崩溃。这意味着即使模型保留了完整的 上下文,如果没有明确的支架(例如,思维链提示或外部工具),它可能无法有效地操纵或推理它。
-
固定注意力容量作为有界的计算预算:自注意力使每个 token 都能看到完整的输入,但每个头每层只有一个加权平均值。随着 上下文 的增长,注意力成为计算的瓶颈:您不能“循环”数据或重复关注输入的不同部分,而不堆叠更多层(这会增加成本)。即使关注了远处的信息,模型也没有以结构化方式验证或迭代它的机制。这个瓶颈可以被看作是无法对任意长度的输入执行多步计算,这对于长 上下文 推理尤其具有限制性。
-
记忆与泛化的权衡:Transformer 通常依赖于来自训练数据的记忆启发式方法,而不是学习通用算法。这对于短输入效果很好,但在较长的 上下文 中会崩溃:模型无法将解决方案的“形状”(例如,“比较所有项目并选择最大值”)泛化到更长的序列。相反,它应用浅层统计模式,当需要更长距离的推理时,这些模式会失效。
长 上下文 架构:正在尝试什么?
为了解决 LLM 中长 上下文 推理日益增长的难题,研究人员和行业从业者已经提出了几种架构和训练层面的解决方案。以下四种方法因其在实践中被广泛采用且受到最新研究的强烈支持而脱颖而出:
-
NTK-Aware 位置嵌入缩放(例如,YaRN、YuRN):这些技术通过重新缩放或插值来扩展旋转位置嵌入 (RoPE),允许像 LLaMA 这样的模型推断超出其原始 上下文 长度。
- 重要原因:在最小的重新训练下非常有效,并且几乎用于基础模型的所有扩展 上下文 版本(例如,128K+ token 的 LLaMA 2/3)。
- 应用:YuLan (阿里巴巴), Mistral-Long
- 关键论文:YaRN (Peng et al., 2023)
-
检索增强生成 (RAG):添加一个外部检索器(例如,向量数据库),该检索器在推理期间查找相关的信息块。模型永远不必“记住”所有内容——它可以根据需要查找信息。
- 重要原因:保持 上下文 大小较小,同时保留对大量外部知识的访问。
- 应用:具有工具使用的 GPT(例如,ChatGPT + RAG),Perplexity.ai,许多生产 QA 系统。
- 关键论文:RAG (Lewis et al., 2020), REALM (Guu et al., 2020)
-
稀疏 / 局部 + 全局注意力(例如,Longformer、BigBird、Mamba 变体):用局部注意力和全局 token 的混合代替二次方的完全自注意力。
- 重要原因:可以有效地扩展到长输入,而无需从头开始重新训练整个模型。
- 应用:Longformer (Allen AI), BigBird (Google), Mamba (2024), 和基于 FlashAttention 2 的模型。
- 关键论文:BigBird (Zaheer et al., NeurIPS 2020)
-
内存扩展 Transformer(例如,MemGPT、Transformer-XL):添加显式内存层,用于跨信息块或会话存储和检索信息。模拟 LLM 的 RAM/页面文件——让模型根据需要调入/调出知识。
- 重要原因:通过小窗口实现长期对话、文档理解或工具使用。
- 应用:MemGPT,Claude 的情景记忆,Google 的 Gemini 原型。
- 关键论文:MemGPT (Packer et al., ICML 2023)
结论:在规模化 上下文 中避免混乱
对于现实世界的 AI 用例来说,大型 上下文 窗口是必不可少的,无论是代码库、法律文件还是长时间的对话。但是,更多的输入意味着更多的出错空间。除非我们使模型更具 上下文 感知能力,否则 幻觉 仍将是不可避免的代价。
前进的道路不仅仅是向模型输入更多的数据;而是要让它们更具辨别力。未来的 LLM 必须有目的地压缩 上下文,优先考虑意义而不是邻近性,并以修改和推理的能力进行解码。
更大的窗口是不够的。我们需要的是更好的 上下文 智能。