大模型幻觉入门讲解
一.大模型初步了解
LLM(GPT、LLaMA、Gemini 等)已经在理解、生成、推理上表现很强,被广泛用在搜索、问答、推荐、聊天机器人等信息检索场景中。但它们会产生“看起来一本正经、实际瞎编”的内容,也就是“幻觉”,而且因为回答很像人说的话,非常难被普通用户识别,这直接影响现实决策(比如医疗、法律问答)。
LLM的训练流程包括预训练+对齐
预训练:在海量文本上做自回归/语言建模,学一般语言规律 + 世界知识。
对齐(Alignment):
SFT(监督微调):用人类标注的 “指令—回答” 样本,让模型学会听指令。
RLHF / 其它对齐方法:让模型更符合人类偏好,不瞎说、有礼貌、更有用。
RHLF例子讲解:
第1步:收集人类偏好数据
向微调后的模型输入一个问题,让它生成多个不同的回答(例如A、B、C、D)。
请人类标注员对这些回答进行排序或打分。标注员不需要写出好答案,只需要判断哪个更好。例如:“A比B好,C比D差”。
关键:这里收集的不是“答案”,而是人类的“比较性偏好”。
第2步:训练一个“奖励模型”
目标:训练一个单独的、相对较小的神经网络,作为“人类偏好模拟器”。
方法:用上一步的人类偏好数据训练它。输入一个“问题-回答”对,RM输出一个标量分数(奖励值)。训练目标是让RM对高质量回答的打分,高于低质量回答。
结果:这个RM就学会了量化“人类喜欢什么”。它替代了耗时的人类,可以快速给任何回答打分。
第3步:使用强化学习优化语言模型
设定环境:
运动员:我们需要优化的语言模型(称为“策略”)。
教练/评分裁判:上一步训练好的“奖励模型”。
游戏规则:模型生成一个回答,RM就给它打一个分。
训练过程:
模型尝试生成各种回答,目标是使RM给出的期望奖励分数最大化。
为了避免模型“钻空子”(比如只生成一些讨好RM但无意义的短句),通常会加入一个“惩罚项”,让生成的回答不要过分偏离原始的基座模型(即保持原有知识和语言能力)。
结果:通过大量试错,语言模型自我调整其内部参数,逐渐学会生成那些能获得RM高分的回答,也就是更符合人类偏好的回答。

二.幻觉分类
第一大类:Factuality Hallucination(事实幻觉):输出的内容与现实世界事实不一致,或者无法被任何事实验证,是 LLM 最典型、最危险的幻觉类型。
1.实体错误(Entity Error)
与真实世界的实体不一致。
例:
问:“Who invented the telephone?”
答:“Thomas Edison.”
而真实答案是:Alexander Graham Bell
2.关系错误(Relation Error)
实体对了,但实体之间的关系错了。
例:
“Edison invented the light bulb.”
实际上:他是“改良者”,不是“发明者”。
3.不可验证幻觉(Unverifiable Hallucination)
模型编造了不存在、不可查证的内容。
4.过度主张(Overclaim)
模型把不确定的内容说成确定的。
例:
“某偏方一定能治病”
“某未证实事件确实发生过”
5.错误归因(Incorrect Attribution)
例如:
把某观点归到错误的作者
错给错误的年份、错误的会议
6.错误来源引用(Incorrect Citation)
生成不存在的 DOI、书籍、期刊号等。
第二大类:Contextual Hallucination(上下文幻觉)
模型输出与“输入上下文 / 检索资料 / 指令要求”不一致。
7.不遵循指令(Instruction Inconsistency)
模型没有按指令做。
例:
指令:“Translate the sentence.”
LLM 却直接回答问题而没有翻译。
8.上下文矛盾(Context Contradiction)
LLM 输出的内容与输入给定文档矛盾。
例:
给文档:Nile 河来源于 Great Lakes
模型总结成:来源于 mountain ranges
9.未使用必要上下文(Context Omission)
模型忽略了输入中的关键信息,导致错误生成。
例:
文档明确写了结论,但模型自己编了另一个结论。
10.无关上下文混入(Context Intrusion)
模型使用了不应使用的上下文,添加额外错误信息。
例:
问 A 文档内容,却引用了 B 文档的信息。
11.任务形式错误(Task Format Error)
任务要求输出 JSON
模型输出自然语言段落
任务要求 “只输出数字”
模型却解释一大段
第三大类:Logical Hallucination(逻辑幻觉):LLM 的推理过程不一致、自相矛盾、逻辑错误。在 CoT(Chain-of-Thought)中非常常见。
12.步骤逻辑不一致(Step Inconsistency)
推理链前后矛盾。
例:
Step 1:2x = 8
Step 2:x = 3
13.无效推理步骤(Invalid Deduction)
步骤之间没有逻辑联系,却得出了结论。
例:
“因为巴黎是法国首都,所以它的 GDP 大于东京。”
14.推理跳步(Reasoning Jump)
模型跳过关键推理步骤直接得出结论,导致错误。
例:
数学推理没有列式子直接输出错误答案。
15.自我矛盾(Self-Contradiction)
同一次回答中出现相互矛盾的陈述。
例:
第一句:“The capital of Australia is Canberra.”
下一句:“Sydney is the capital of Australia.”
三.幻觉产生的原因
幻觉不是一个点出问题,而是整个流水线:数据 → 训练 → 推理
1.来自数据
1.1错误信息 & 社会偏见(Misinformation & Biases)
1.2知识边界(Knowledge Boundary)
对“没见过的事实”“最新事件”“长尾领域”(冷门实体、小语种术语等),模型只能“根据统计模式瞎猜”。
1.3对齐数据质量差(Bad Alignment Data)
2.来自训练
2.1预训练阶段:单向自回归(unidirectional)
只能看左边预测右边,长距离依赖不容易捕获,容易在复杂推理中“丢条件”。Soft attention 的“注意力稀释”:序列很长时,注意力摊得很散,重要信息被稀释,引发推理幻觉。Exposure bias(暴露偏差):训练时看真答案,推理时看自己前面预测 → 一旦前面错了,后面全跟着错,像滚雪球。
2.2预训练本身有“能力边界”。
SFT 如果让模型去“装懂边界之外的东西”,会显著提高幻觉。论文的一个结论:SFT 新增知识学得并不好,但却会让模型更爱瞎编。
2.3RLHF / Alignment 阶段:
如果奖励模型偏好“流畅、肯定、乐于回答”,会诱导模型在不确定时编造。
3.来自推理
3.1Prompt / 指令设计
诱导性问题、暗含错误前提、过于复杂的问题都能明显提高幻觉率。
3.2解码策略
高温度、top-k / nucleus 采样会更“有创造力”,但也更容易产生事实错误。
3.3不确定性处理(uncertainty)
模型往往“过度自信”,即使概率不高,也说得很肯定。(4)长上下文问题(lost in the middle):使用 RoPE 的 LLM 容易对“上下文中间的信息”注意力变弱,导致只看前几段 or 最后几段。
四.幻觉检测办法
1.基于外部知识 / 检索的对比
把 LLM 输出拿去对照
知识库(Wikipedia、KG)和检索到的网页,然后用一些“事实一致性 / NLI 模型”判断是否支持该回答(如 SummaC、FEQA 系列)。
2.基于不确定性的检测
看模型的概率分布、多个采样结果是否一致、多模型 ensemble 一致性;如果模型自己都“犹豫”,就标记为有潜在幻觉。
3.LLM 自评 & LLM-as-a-judge
让同一个或者另一个 LLM 来判断:“这个回答是不是可信 / 是否有幻觉?”也可以让模型执行“自我批评 + 修改”(self-critique, verify-and-edit)。
4.专门训练一个小模型当“幻觉检测器”
输入是“问题 + 文档 + LLM 输出”,输出是“是否有幻觉 / 属于哪一类幻觉”。优点:推理快、易部署;缺点:需要标注数据。
五.幻觉缓解方法
1.数据相关缓解
1.1数据过滤 / 清洗
过滤假新闻、低质量文本;构建高质量的专业数据集(比如法律领域的 Pile of Law)。
1.2偏见缓解
在训练前后做 bias filtering、对敏感属性做去偏、平衡。
1.3更好的对齐数据
更高质量的人类指令 & 回答;引入“拒绝答复”的示例,让模型学会说“不知道”。
2.训练阶段缓解
2.1 改模型架构 / 训练目标
使用 双向自回归架构 BATGPT,让模型在预测下一个 token 时更好利用上下文。对自注意力加 regularizer,做“attention sharpening”,避免注意力太散 → 减少推理幻觉。
2.2调整 SFT & RLHF
分析发现:SFT 注入的新事实越多,越容易幻觉 → 需要控制 SFT 的“知识更新方式”。RLHF 可以设计“更重视真实性”的 reward,比如对事实错误严厉惩罚。有工作提出 “Self-Alignment for Factuality”,通过自评 + 自改的方式,把 factuality 写入对齐过程。
2.3模型编辑(Model Editing)
在不重训大模型的情况下,编辑某些参数来修正错误知识。优点:针对性强;缺点:难以大规模更新,多次编辑会损害全局知识。
3.推理阶段缓解(Inference-level)
常见思路:
3.1Prompt 设计
要求模型:先列出推理步骤,再验证每一步;
使用 context-faithful prompting,明确要求“答案必须仅来源于上面的文档”。
3.2自我一致性 / 多样化采样 + 投票
多次采样 CoT,然后做投票,减少随机幻觉。
3.3自我验证(Self-Verification / Chain-of-Verification)
代表作:Chain-of-Verification、Verify-and-Edit 等。
流程:先生成一个答案 + 推理链、再让同一个或另一个 LLM 针对关键事实提问 / 检索、最后修正原来的推理链和答案
3.4不确定性驱动的“拒答/求助”
如果置信度低,就“拒绝回答”或“去查资料”。
4.RAG(Retrieval-Augmented Generation)缓解
核心思想:把“外部知识”从模型参数中解耦出来,问问题时再去检索。
常见三种模式:
One-time Retrieval:先检索一次,把结果拼接到 prompt 里,一起喂给 LLM。
Iterative Retrieval:在生成过程中多次检索,每一步推理都可以查文献。
Post-hoc Retrieval:先给出答案,再根据答案去检索 & 校对,必要时修正。
优点:很适合补 知识边界 的洞;
缺点:一旦检索错/召回噪声,反而把模型带偏;检索与生成的交互还比较浅,有待更紧密结合。
六.RAG 里的幻觉(Retrieval Failure + Generation Bottleneck)
1.Retrieval Failure(检索阶段的问题)
三大来源:
1.1用户 Query 本身有问题
盲目检索:明明是常识题(“海平面水的沸点”),硬要去检索,结果检索到“高海拔 95°C”,模型就答错了。
歧义 Query:比如“the fastest mile run on track”,到底是人跑得快,还是车跑得快?检索可能拉来赛车纪录。
复杂 Query:文档只写了“弗莱明发现青霉素”,没写“在哪里毕业”,模型无法从文档中找到信息,就开始瞎编。
1.2检索源的问题
知识库本身不全 / 含有错误信息 / 没更新。
1.3检索器本身的问题
embedding 不准、召回不完善、排序不理想,导致没把最相关文档找出来。
2.Generation Bottleneck(生成阶段的问题)
即使检索到对的文档,也可能因为 LLM 利用上下文的方式有问题而幻觉。
2.1Lost-in-the-middle
文档太长时,模型忽略中间的信息,只看开头和结尾。RoPE 的长距离衰减是重要原因之一。
2.2Contextual Alignment(上下文对齐)问题
没有做到“从上下文中忠实生成”,而是混入了自身 parametric knowledge;Source Attribution 做不好:模型说了一些事实,却不知道到底来自哪个文档。
七.参考文献
A Survey on Hallucination in Large Language Models: Principles, Taxonomy, Challenges, and Open QQestions
更多推荐


所有评论(0)