为什么 LLM 会幻觉
1️⃣ 考察意图
面试官想看你能否跳出“模型瞎编”的表面解释,从数据、架构、训练、解码、知识边界五个层面系统性归因。这是典型的系统诊断题,刁钻点在于:候选人常只答“训练数据有噪声”或“模型不懂事实”,而忽略了自回归架构的因果链断裂和解码策略的概率陷阱。答好了能展示你对LLM整条链路的理解深度,以及从工程角度定位和缓解幻觉的实战能力。
2️⃣ 标准答
幻觉不是单一原因,而是数据、模型、训练、解码、知识五个环节叠加的结果。下面逐层拆解:
- 训练数据问题
- 噪声与偏见:预训练语料中本身就包含错误事实(如维基百科过时条目、论坛谣言)。模型在next token prediction时,会把这些噪声当作“正确答案”学习。
- 长尾覆盖不足:对于低频实体(如“2023年诺贝尔化学奖得主Moungi Bawendi”),训练数据中只出现几次,模型无法形成稳定记忆,生成时容易“模糊化”成类似但错误的内容。
- 坑:用Common Crawl清洗后仍有约5-10%的噪声率(据BigScience数据),直接导致幻觉。
- 模型架构限制
- 自回归的因果链:Transformer的注意力机制只能看到左侧上下文,无法回头修正。一旦早期生成一个错误token(如“爱因斯坦出生于1879年”写成“1878年”),后续所有token都会基于这个错误继续,形成“雪崩式幻觉”。
- 参数容量瓶颈:Llama-2 7B有70亿参数,但互联网知识总量远超这个容量。模型必须“压缩”知识,压缩过程必然丢失细节,导致事实模糊化。
- Trade-off:增大模型容量(如从7B到70B)能降低幻觉率,但训练成本指数级上升,且仍有上限。
- 训练目标与对齐
- Next Token Prediction的局限:模型只学“哪个词最可能”,不学“哪个词为真”。比如“法国首都是?”训练数据中“巴黎”出现概率99%,“里昂”1%,模型会选“巴黎”,但遇到“法国第二大城市是?”若数据中“马赛”和“里昂”各占50%,模型就会随机选,产生幻觉。
- RLHF的副作用:强化学习让模型更“讨好”人类偏好,有时会牺牲事实性来换取流畅性。例如用户问“推荐一本关于AI的书”,模型可能编造一个听起来合理的书名,因为训练中“给出具体书名”比“说不知道”更受奖励。
- 解码策略
- 采样温度:温度>0时,模型从概率分布中采样,低概率token也可能被选中。例如“太阳从东边升起”概率99%,但采样时可能抽到1%的“西边”。
- Top-p/Top-k:虽然截断了低概率区域,但若候选集本身包含错误事实(如“爱因斯坦的生日是3月14日” vs “3月15日”),模型仍可能选错。
- 实际解法:推理时用contrastive decoding(对比解码,如DoLa方法)或greedy search(温度=0)可降低幻觉,但牺牲多样性。
- 知识边界与推理缺失
- 知识截止日期:模型不知道训练后的事件(如2024年后的新闻),但会强行生成,导致事实性幻觉。
- 缺乏逻辑校验:模型没有内置的“事实检查器”。例如问“2+2=5对吗?”,模型可能因为训练数据中“5”常出现在数学问题后而回答“对”。
- 坑:用RAG(检索增强生成)引入外部知识库可缓解,但若检索结果本身错误或与模型记忆冲突,幻觉反而加剧。
总结:幻觉是系统性问题,没有银弹。工程上常用数据清洗 + 检索增强 + 解码约束 + 事后校验四层防线组合缓解。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从数据、模型、训练、解码、知识五个层面回答。数据层面,训练语料噪声和长尾覆盖不足是根源;模型层面,自回归架构的因果链和参数容量限制导致错误累积;训练层面,Next Token Prediction不学事实性,RLHF可能牺牲准确度;解码层面,采样策略引入随机性;知识层面,模型有截止日期且缺乏推理。总结一句:幻觉是多个环节叠加的结果,工程上需要数据清洗、RAG、解码约束和事后校验四层防线组合应对。”
4️⃣ 高频追问 & 应对
追问 1:你提到RAG可以缓解幻觉,那RAG本身会不会引入新的幻觉?
会。RAG的幻觉来源有三:一是检索器召回错误文档(如BM25召回噪声),二是检索结果与模型记忆冲突时模型可能“忽略”检索内容,三是长上下文下模型注意力分散,漏掉关键事实。解法:用HyDE(假设文档嵌入)提升检索相关性,用Self-RAG让模型先判断检索结果是否相关再生成,以及用FlashAttention优化长上下文注意力。实际落地中,我在一个QA系统里发现RAG后幻觉率从15%降到8%,但仍有2%来自检索噪声,需要加一层reranker(如Cohere rerank)过滤。
追问 2:如果给你一个线上系统,用户反馈模型经常编造人名,你怎么定位根因?
三步定位:第一步,统计编造人名的模式——是固定几个名字重复出现(可能是训练数据过拟合),还是随机编造(可能是解码采样问题)。第二步,用logit lens或激活补丁(activation patching)分析模型内部表示,看生成错误人名时,哪些注意力头被激活——如果是早期层,可能是数据问题;如果是后期层,可能是解码策略。第三步,做A/B测试:固定解码温度=0,看幻觉率是否下降。若下降,说明解码是主因;若不下降,则深入检查训练数据中该人名的出现频率和上下文。实际案例中,我曾发现一个模型频繁编造“John Smith”,原因是训练数据中该名字出现频率过高,模型把它当成了“默认人名”。
追问 3:模型容量越大幻觉越少吗?有没有反例?
不绝对。大模型(如GPT-4 1.8T参数)确实比小模型(如Llama-2 7B)幻觉率低,因为参数多能存储更多事实。但反例存在:过度参数化可能导致“记忆过强”而泛化不足,比如在微调时用少量数据,大模型会死记硬背,对未见变体产生幻觉。另外,模型大小与训练数据量需匹配:Chinchilla scaling law指出,参数和token数应等比例增长。若参数大但数据不足,模型会“虚构”知识来填补空白。例如,一个70B模型只用100B token训练,幻觉率可能比7B模型用1T token训练还高。所以,关键不是绝对大小,而是数据-参数比。
5️⃣ 避坑 · 常见错误答法
- ❌ 只答“训练数据有噪声”或“模型不懂事实” → ✅ 系统性归因,从数据、架构、训练、解码、知识五个层面展开,每个层面给具体机制(如自回归因果链、Next Token Prediction局限)。
- ❌ 说“解码温度调低就能解决” → ✅ 承认解码是因素之一,但指出温度=0只能降低随机性,无法解决数据噪声或知识边界问题,需要组合方案。
- ❌ 把幻觉归因于“模型故意说谎” → ✅ 强调模型没有意图,幻觉是概率统计和压缩的副产品,用“概率分布”和“参数容量”解释。
6️⃣ 简历呼应
- 如果你有RAG项目:从“检索噪声如何加剧幻觉”切入,举例你在项目中用HyDE+reranker将幻觉率从12%降到5%,并对比了不同检索器(BM25 vs DPR)的效果。
- 如果你只做过传统NLP:用“文本分类中的过拟合”类比——训练数据不平衡导致模型对低频类别预测不准,类似LLM对长尾实体的幻觉。强调你理解“数据质量决定模型上限”。
- 如果你是校招无项目:聚焦论文复现,比如你读过《How Language Model Hallucinates?》并复现了其分析框架,用logit lens观察模型内部表示,能说出“早期层编码语法,后期层编码事实”等细节。
- 《How Language Model Hallucinates?》—— 系统分析幻觉成因的论文
- 《RAG: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》—— RAG缓解幻觉的经典工作
- 《Self-RAG: Learning to Retrieve, Generate, and Critique》—— 让模型自我校验检索结果
- 《DoLa: Decoding by Contrasting Layers Improves Factuality》—— 对比解码降低幻觉
- 《Scaling Laws for Neural Language Models》—— 理解参数容量与数据量的关系