去年我让 GPT-4V 描述一张随手拍的办公桌照片,它说桌上有一支 红色钢笔。我愣了一下——桌上确实有笔,但全是黑色的。更匪夷所思的是,它还说笔帽上刻着字,细节丰富到像真的一样。照片里根本没有这些东西。这件事让我意识到,多模态幻觉不是概率极低的偶然错误,而是 一种系统性的、与架构深度绑定的现象。你可能会想:模型不是直接“看”图片吗?怎么还会无中生有?答案比想象中复杂,也更有意思。

先给个定义:多模态幻觉是指模型在生成与视觉输入相关的文本时,输出内容与图像事实不符——描述了不存在的物体、错误的属性、虚构的场景关系,甚至捏造文字。它与纯文本幻觉共享“生成与事实不符的内容”这一表层特征,但 根因更复杂,因为这里多了一个视觉感知环节。
我最早对多模态模型的理解有一个根本性错误:我以为它是先识别物体,再把这些物体当作“事实”输入给语言模型,语言模型负责组织语言。如果是这样,幻觉应该很少,因为物体识别不准最多是“看不见”或“认错”,而不是凭空捏造。但现实是,多模态模型几乎从不明确区分“视觉事实”和“语言知识”,视觉信号和语言模型内部的先验知识是混在一起的,在一个黑箱里互相拉扯。这就是幻觉的温床。
视觉编码器压缩:它看到的不是你看到的
大多数多模态大模型(如 LLaVA、GPT-4V)的结构是:用视觉编码器(通常是 CLIP ViT)把图片变成一串特征向量,然后把这些向量“塞进”语言模型,让语言模型像读文字一样读这些视觉 token。问题的关键在第一步:视觉编码器输出的不是像素级描述,而是 高度压缩的语义表示。一张 1024×1024 的图片,经过 ViT 后可能只变成 256 个特征向量,每个向量代表一个图块的整体语义,细节会被丢掉。
想象一下:你给朋友看一张照片,但只允许他用 256 个词描述整张图,然后你根据这些词来复述照片内容。你会脑补出多少原本不存在的东西?这就是视觉编码器做的事。很多小物体、文字、细微纹理在压缩过程中直接消失了,而语言模型面对这些“模糊”的 token,会本能地用自己的知识去填充。比如你问“这个手机壳上有什么图案?”,视觉 token 可能只提供了“有图案,颜色鲜艳”这种模糊信息,语言模型根据训练数据里常见手机壳,脑补出“卡通图案”或“花卉纹样”——实际可能根本不是。
我读过一篇论文,专门研究视觉 token 的信息损失:Object Hallucination in Large Vision-Language Models 中,作者发现当图像中的物体很小或被遮挡时,视觉特征无法提供足够的判别信息,模型就会转向语言先验,幻觉率飙升。这不是“看图说话”的 bug,而是 架构级别的一种妥协——用更少的 token 换取效率,代价就是细节丢失和错误填充。
语言模型先验过强:它太会脑补了
纯文本模型出现幻觉,很多时候是因为它在训练数据中学到的统计规律“太强”,看似合理但实际错误。多模态模型继承了这种特性,而且因为视觉信号往往不够强,语言先验更容易占据上风。我做过一个实验:给一张空无一物的白色桌面拍照,问模型“桌上的咖啡杯是什么颜色的?”它回答“白色陶瓷杯,带有简约风格”。桌上根本没有杯子,但模型根据“白色桌面”和“咖啡杯”这个搭配,生成了一个“合理”的答案。在训练数据中,讨论桌面的文本经常伴随咖啡杯,这种关联权重极高,以至于微弱的视觉信号(没有杯子的特征)被淹没了。
这背后的机制是交叉注意力:语言模型在生成每个词时,会同时关注视觉 token 和已生成的文本 token。如果视觉 token 对“杯子”这个概念的响应很弱,而语言 token 里“桌上”和“咖啡杯”的共现概率极高,生成器就会倾向于选择“咖啡杯”。这不是模型“故意”撒谎,而是概率博弈的结果。 更致命的是,模型自己不知道这个博弈的胜负,它只是输出概率最高的序列。
对比纯文本幻觉,你会发现一个有趣的差异:纯文本模型在回答事实性问题时,幻觉来源是训练数据里的错误或过时信息;多模态模型在回答视觉问题时,幻觉来源是 视觉信号与语言先验的冲突,并且语言先验赢了。这解释了一个常见现象:多模态模型在描述具有强烈文化或语言关联的图像时,更容易产生幻觉,比如“中国新年”就比“抽象色块”更易触发虚构的灯笼、鞭炮。
为什么多模态幻觉比纯文本更隐蔽?
纯文本幻觉你还能通过逻辑矛盾或查证来发现,比如一个 AI 说“莎士比亚写了《哈利·波特》”,你立刻知道错了。但多模态幻觉很棘手:它描述的内容往往 看起来极其合理、细节丰富,甚至与图像风格一致。比如描述街景,它会编造一个不存在的广告牌,但内容、配色、字体都符合那条街的整体氛围。你如果不亲自看原图,根本无从判断。
这种隐蔽性源于视觉语言模型的训练数据:互联网上的图文对(比如 alt-text)经常是描述性的,但 描述本身就带有人的主观补全和偏见。一张只拍了一半汽车的图片,alt-text 可能写“红色轿车停在路边”,因为标注者看到了另一半。模型学到的就是:即使视觉信息不完整,也可以(甚至应该)输出完整描述。这使得多模态幻觉内嵌在训练目标里,不是简单的“错误”。
另外,现在的多模态模型大多不支持视觉定位(grounding)——它说不出“我看到杯子在像素坐标 (200, 300) 处”,只是输出文字。你让它指明物体位置,它可能瞎编一个坐标,因为根本没有训练过这种能力。这种不透明性让幻觉更难被检测。
一张表看清幻觉的根源
| 原因层次 | 具体机制 | 典型表现 |
|---|---|---|
| 视觉编码 | 高压缩率损失细节;图块切分破坏物体完整性 | 小物体消失、文字识别错误、颜色不准 |
| 跨模态对齐 | 视觉 token 与语言 token 映射不精确;训练时对齐噪声 | 物体属性张冠李戴(如“红色杯子”说成“蓝色”) |
| 语言模型先验 | 强共现统计压倒弱视觉信号;语言生成的平滑性倾向 | 虚构典型物体(桌上必有杯子)、虚构文字内容 |
| 训练数据偏差 | 图文对描述不完整、标注者主观补全;长尾场景不足 | 对罕见场景过度脑补;对遮挡、模糊图像生成完整描述 |
| 推理时策略 | 温度、top-p 等采样参数放大不确定性;自回归循环错误 | 微小噪声导致描述突变;越长的描述越容易跑偏 |
这张表帮我理清了一个关键认知:幻觉不是单一环节的问题,而是从视觉编码到文本生成的整个流水线上,每个环节都在贡献“合理”的错误。你不可能通过只修一个地方来彻底解决。
我踩过的坑:以为 RAG 能解决,结果更糟
有一段时间我尝试用 RAG(检索增强生成)的思路来缓解多模态幻觉——把图片先用 OCR 或物体检测模型提取出结构化信息,再喂给语言模型。我想,这样语言模型就有“事实依据”了,应该不会瞎编。但测试结果让我大跌眼镜:当我把 OCR 输出的文字和物体检测的标签直接传给语言模型,它反而更容易产生幻觉,因为 这些结构化信息丢失了空间关系和上下文,语言模型会用自己的方式重新“解释”这些离散标签,就像根据关键词猜故事。比如检测到“人、狗、球”,模型可能生成“一个人在和狗玩球”,但实际是狗在远处,人在另一边,球是装饰品。这让我明白,多模态幻觉的解决不能靠绕过视觉理解,而必须增强视觉编码本身的保真度,以及改进跨模态对齐。
缓解幻觉的三条路径,但都不完美
目前学术界和工业界尝试了多种方法,大致可以归为三类:
- 改进视觉编码:使用更高分辨率的编码器、动态分块策略,保留更多视觉 token,减少信息损失。例如 LLaVA-NeXT 引入“高分辨率”模式,把图片切成多个子图分别编码。但代价是计算量暴增,而且依然无法完全消除压缩损失。
- 强化跨模态对齐:在训练时增加更细粒度的损失函数,让模型学习视觉 token 与对应文本片段的精确映射,比如灌注指代数据(referring expression)。不过对齐数据获取成本高,且很难覆盖所有场景。
- 推理时干预:使用物体检测作为辅助信号,在生成过程中强制模型关注检测到的物体,或对生成的描述进行视觉一致性校验。但这类方法增加了推理延迟,并且可能牺牲语言流畅性。
这些方法都有效,但同时也都直指一个更深层的现实:幻觉是当前多模态模型架构的固有属性,就像大型语言模型一定会产生文本幻觉一样。我们只能降低它的频率,无法根除。因为从根本上说,模型在做的事是“根据不完整的、有损的视觉信息,生成一个在统计上合理且有用的文本描述”,而不是“忠实复述视觉事实”。
你可能关心的几个问题
多模态模型能完全避免幻觉吗?
不能。只要有压缩和概率生成,幻觉就必然存在。但我们可以通过工程手段让它在关键场景(如医疗、自动驾驶)的漏报率降到可接受水平,同时保持高召回。
为什么 GPT-4V 比开源模型幻觉少?
一方面,OpenAI 在训练数据规模和质量上投入巨大,更好的对齐数据能减少语言先验的不当干扰;另一方面,他们可能使用了更强的视觉编码器和更长的训练,加上 RLHF 反馈中包含了对幻觉的惩罚。但即便如此,GPT-4V 依然会在小物体和文字识别上产生幻觉,只是频率更低。
纯文本幻觉的解决方法能直接迁移吗?
部分能,但需要调整。比如事实核查(fact-checking)对多模态很难,因为图像事实不像文字那样容易检索。我们能做的更多是设计“视觉事实核查器”,用另一个模型去验证描述与图像的一致性,但这又会引入新的错误。
多模态幻觉和人类的“填补错觉”有相似性吗?
有。人类在视觉快速扫视时也会“脑补”没看到的东西,比如盲点效应。但人脑有更强的现实检验机制,能意识到不确定性。而当前模型缺乏这种元认知,总是以高置信度输出幻觉。
作为开发者,怎么降低幻觉影响?
代码层面,你可以限制生成 token 长度,因为长描述更容易产生幻觉;使用较低的采样温度,减少随机性;在 prompt 中明确要求模型“只描述你确定看到的,不确定的标注‘不确定’”;对关键信息(如文字、数字)进行二次验证。但最终,你需要接受幻觉是系统的一部分,设计应用时留有余地。
# 示例:抑制幻觉的 prompt 策略
prompt = "描述图片中你确定看到的物体。如果某个物体或属性你不确定,直接说‘不确定’。不要添加任何你可能知道但看不见的东西。"
回到开头那张办公桌照片。现在我知道,GPT-4V 说有一支红色钢笔,不是因为“看错了”,而是因为它从模糊的视觉 token 里捕捉到了“笔状物体”的微弱信号,然后语言模型里“办公桌”和“钢笔”的强关联以及“红色”这个常见属性,迅速填满了信息缺口。整个过程发生在几毫秒内,像一场无声的政变——视觉事实被语言先验篡位了。理解这一点,不是为了原谅幻觉,而是为了看清:我们离真正的视觉理解,还有一段很长的路,而这段路不是靠更大的模型就能走完的。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/144.html