视觉因果推理:从图片中推断因果关系——「地面是湿的,所以刚才下过雨」

「地面是湿的,所以刚才下过雨。」

AI technology illustration

这句话有一个诡异的性质:它是对的,反过来「刚才下过雨,所以地面是湿的」也是对的。但你绝对不能说「地面是湿的,所以待会儿要下雨」——因果的箭头只指向一个方向:是雨弄湿了地面,不是地面招来了雨。

三岁小孩都懂这个方向。可你拿一张雨后地面的照片,去问最强的多模态模型:「这摊水,是雨水浇的,还是水管爆了?」它的回答基本靠猜。

这事让我困惑了很久。模型明明「看」到了地面和雨,为什么就是学不会谁导致了谁?直到我读了 Judea Pearl 的《为什么》,才算真正想通。

「数据本身,无论多大,在面对因果关系时都是极其迟钝的。」——Judea Pearl

Pearl 不是否定数据,而是在说:无论你给模型多少张「下雨」和「湿地」的照片,P(湿地|下雨) 和 P(下雨|湿地) 只是两个可以用贝叶斯公式互相换算的数字,它们本身不携带因果方向的信息。数据能告诉你「这两件事经常一起出现」,但「经常一起出现」既可能是雨弄湿了地,也可能是某个共同原因同时导致了雨和地湿。数据不表态。

模型看到的不是「因果」,是「共现」

你训练一个卷积网络识别「湿地」,它学到的是像素模式到标签的映射:把「地面是湿的」和「刚才下过雨」绑在一起。靠的不是对降雨、渗透、蒸发这些物理过程的理解,而是统计共现——训练集里两者同时出现的频率太高了。

这不是推理,这是背诵。

因果的阶梯上,视觉模型站在第一级

Pearl 把因果能力分成三个层级,他称之为「因果之梯」:

层级 核心问题 用「湿地」举例 视觉模型现状
关联 看到了什么 地面湿不湿? 接近人类
干预 如果我动手会怎样 我把地面泼湿,天会下雨吗? 基本不会
反事实 如果当时没那样呢 假如没下过雨,地面还会湿吗? 几乎不会

「地面是湿的,所以刚才下过雨」看起来只涉及第一层的关联,其实它是从结果反推原因,也就是溯因。溯因要求你想象一个「没下雨」的替代世界,并判断在这个世界里地面会是什么样——这是第三层的能力。机器在关联层已经接近人类,但在干预层和反事实层,缺口是断层级的。

为什么这么难:三个原因叠在一起

  • 图片是快照,因果是过程。雨落下来、渗进路面、再蒸发,都需要时间箭头。一张静态图片把时间压扁了,只剩一个状态。你无法从「湿」这个像素状态里读出它经历了什么——就像看一张房子的照片,你看不出它是三个月盖完的还是三年盖完的。
  • 观察数据的因果方向在原则上不可识别。两个变量 X、Y 服从某个联合分布,这个分布既可能由「X→Y」产生,也可能由「Y→X」产生——某些条件下,两种因果结构生成的数据一模一样。不加额外假设,你永远分不清。单张图片连时间轴都没有,只能更糟。
  • 没有因进,就没有因出。训练数据里只有共现,没有「被干预」的样本——同一个场景,「有雨」和「没雨」两个版本并排摆着。模型从来没机会看到「改变一个变量如何改变另一个变量」,它凭什么学会因果?

还有一个常被忽视的细节:照片本身有选择偏差。摄影师为什么拍这张图?因为下雨了?因为想拍积水?「为什么拍照」是一个看不见的变量,横插在所有统计关系中间,当一个隐形的混淆因素。

一上反事实,机器就崩

光讲理论有点虚,看实验。MIT 团队在 CLEVRER 基准里构造了一个 3D 虚拟世界:小球互相碰撞,录成两万个合成视频,配四类问题——描述性的(红球撞到黄球了吗)、解释性的(绿球为什么动了)、预测性的(接下来蓝球会动吗)、反事实的(如果红球没撞到黄球,绿球还会动吗)。

结果很扎心:最强模型在描述性问题上已经接近人类,一到反事实问题,准确率大幅跳水,远低于人类水平。CLEVRER 真正的贡献不是出了一道难题,而是第一次干净地测出了这个缺口:机器在反事实推理上的短板,是台阶式的,不是几个百分点。

另一个方向是 VisualCOMET,给静态图片标注「因为…所以…但是…」事件关系,训练模型补全「这个人摔倒了,因为___」。模型能生成很像样的原因:地滑、没看路、被人推——但仔细看,它在套语言先验。这些原因在训练文本里出现过,它只是按概率把候选原因排序,并不理解在这个具体场景里是否真的成立。

我曾经的误解:把「预测」当成「理解」

我很长时间都以为,模型只要够大、见过的场景够多,因果能力会像魔法一样自己长出来。后来我想通了一件事:这就像教鹦鹉说话。鹦鹉可以完美复述「下雨会弄湿地面」,但它不知道,如果它拧开水龙头,天不会因此变阴。

预测下一个状态,和知道「哪个动作会改变下一个状态」,是两种截然不同的能力。前者只需要学习条件概率 P(下一个状态|当前状态),后者需要干预分布 P(状态|do(动作))——do 算子表示「人为干预」,它和「观察到」在数学上是两种不同的操作。

现在真正靠谱的三条路

对象中心表示。先把场景拆成对象(球 A、球 B、地面),再学对象之间的关系。CLEVRER 里表现最好的 DCL 就是这条路:先追踪对象,再在对象层面做逻辑推理。缺点是现实世界不会好心到把对象给你分好。

反事实监督。CoPhy 在训练时直接给模型看成对的「当前场景」和「干预后的场景」,让模型预测如果改了某个初始条件会怎样。模型确实能学出一些物理直觉,但前提是:监督数据里已经有人把因果结构标好了。

因果表示学习。Schölkopf 等人的综述系统阐述了独立因果机制(ICM)原理:如果 X→Y 是真正的因果方向,那么「X 的分布」和「X 到 Y 的机制」应该互相独立;方向猜反了,这两件事通常会缠在一起。这个不对称性可以被算法利用来猜方向,但在真实图片上很脆弱,因为照片的生成过程太复杂。

补充:ICM 原理到底在说什么

直观理解:如果降雨量 X 由气象系统决定,湿地 Y 由「降雨量 X+地面透水性」决定,那么「气象系统的分布」和「降雨→湿地的机制」可以分开研究。但反过来假设「湿地 → 降雨」,你会得到「湿地分布」和「湿地→降雨机制」纠缠在一起的怪东西,拆不开。因果发现算法就利用这种不对称性猜方向。注意:这个原理需要「没有混淆变量」等假设,现实数据里很难满足。

我的判断:不干预,无因果

你可能会问:那 ChatGPT 呢?它明明能回答「地面湿是因为下雨」。但它靠的是语言先验——在它读过的文章里,「地面湿」和「下雨」共现太频繁,它只是在复述统计规律。把场景换成一张缺乏文本关联的图片,它立刻开始编故事。这叫「说得像」,不叫「想得明白」。

我的判断很直接:从单张静态图片做通用因果推理,在原理上是不可能的。图片是被动观察的样本,而被动观察不足以识别因果方向。任何宣称「看一眼图就知道因果」的系统,要么偷偷用了语言先验,要么把特定领域的物理规则硬编码进了训练数据——在特定环境好用,换个环境就失灵。

真正可靠的出路只有一条:让机器能动手。像机器人那样推一下积木、按一下开关、往地面倒一杯水,在干预中收集数据,因果方向才会从数据里浮现。Pearl 把这层意思说得很直白:没有干预,就没有因果。所以,「地面是湿的,所以刚才下过雨」对 AI 的真正难点从来不是「看见」,而是「想象另一种可能」——而这恰好是今天所有视觉模型最不擅长的。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/790.html

(0)
上一篇 3小时前
下一篇 2小时前

相关推荐