我最早以为,视觉推理就是“更难一点的图像识别”。模型既然能认出猫、狗、汽车,那回答“猫和狗谁在左边”这类问题应该顺理成章——毕竟“左边”这个词又不难理解。

直到我在一个视觉问答(VQA)数据集上跑通第一个模型,才发现自己错得离谱。模型对着“红色方块在绿色方块左边吗?”这种问题,表现得像个刚学会看图的婴儿。图片它明明“看”了,结论却完全不着调。
后来我才想通:识别是“这是什么”,推理是“为什么、凭什么、接下来会怎样”。这两种能力,后者恰好是当前绝大多数视觉模型最薄弱的地方。
CLEVR 的问题是怎么“造”出来的?
每个问题由程序化函数调用生成。模板随机套用颜色、形状、位置等属性,生成器保证每个问题在场景图中只有唯一答案。研究者因此能精确控制难度:这个问题难在一步定位,还是三步组合。
- 视觉问答(VQA)
- 输入一张图片和一个自然语言问题,输出答案的任务。
- 语言先验
- 模型只凭问题文本就能猜中答案的模式,比如“这是什么颜色”往往可以盲答“白色”。
- 组合泛化
- 模型面对训练中没出现过的“零件组合”时,能否把已学概念重新组装起来给出正确答案。
一个为推理打造的“无菌实验室”
要研究推理,必须先有干净的测试场。真实照片杂乱无章,模型可以靠整体统计蒙混过关。2017 年,Johnson 等人发布了 CLEVR 数据集:用 Blender 渲染出 10 万张几何场景图,每张图只有 4 到 6 个物体,物体属性被严格限定为 3 种形状、8 种颜色、2 种材质和 2 种尺寸。
关键问题不是人写的,而是程序生成的。生成器把问题拆成无数变体:“大红色方块右侧的绿色小球是什么材质?”“有多少个物体不是金属材质?”这种问题天然需要多步推理:定位、过滤、比较、计数。整个数据集有超过 85 万个问题,大致分为以下几类,每一类都对应一种“从图像中组织证据”的方式。
| 问题类型 | 示例问题 | 它在测什么 |
|---|---|---|
| 属性查询 | 红色物体是什么材质? | 筛选目标并识别属性 |
| 存在性判断 | 有大球吗? | 在场景中确认类别是否存在 |
| 计数 | 有几个绿色方块? | 枚举符合条件的所有物体 |
| 比较 | 球比方块多吗? | 对数量做大小判断 |
| 空间关系 | 红色方块左边的球是什么颜色? | 用位置关系锁定目标 |
| 逻辑组合 | 非金属的且在大球右边的物体有几个? | 多条件联合过滤 |
为什么这么繁琐?因为真实世界的照片里有太多无关干扰,模型可以表面作弊。CLEVR 剔除了这些干扰,才能把“推理能力”单独抽出来测量。
模型根本没在“想”,它只是在“猜”
CLEVR 出现之前,VQA 领域已经埋下一个大坑。
2016 年,Agrawal 等人做了一个“令人不适”的实验:他们不看图片,只把问题文本喂给模型,看能答对多少(Don't Just Assume; Look and Answer)。结果,盲模型在 VQA 全量数据集上答对了约 29% 的问题,在答案偏差最大的子集上准确率直接窜到 54.1%——比当时不少纯视觉模型还强。
原因很简单:数据集里一大半问题在问颜色,答案又被少数几个常用颜色垄断。模型根本不需要看图,只需要按高频答案“猜”。这就是语言先验。后来的 VQA 2.0 用互补图像对重新收集了数据,同一问题在不同图上答案不同,试图让模型不能只靠语言先验答题。
但模型总会找到新的捷径。Geirhos 等人在 2020 年给这类行为起了个名字——捷径学习:模型不做理解,只找训练集上碰巧有效的统计规律(Shortcut Learning in Deep Neural Networks)。
在 CLEVR 早期,一个端到端的 CNN+LSTM 基线只能答对 68.5% 的问题。这 30 分的差距,几乎全折在“多步推理”上。模型可能把“红色”“方块”都识别对了,却在“左边”这个空间关系上栽了跟头。
把推理结构直接写进模型,行得通吗?
2016 年,Andreas 等人提出了一个大胆的想法:与其让网络自己悟出推理步骤,不如把推理结构直接写进模型(Neural Module Networks)。
思路是把问题解析成一棵分析树,树上每个节点对应一个“模块”——“找红色物体”“找左边的物体”“计数”。小模块按树形结构组合,前一个的输出接后一个的输入。比如“红色方块左边是什么颜色”,先调用“找红色方块”,再调用“找左边”,最后“回答颜色”。
这个设计最大的优点是可解释:每一步都看得见模型在干什么。缺点也明显:依赖问题解析器,解析一错,整棵推理树就垮了。真实世界的提问充满省略和歧义,解析器很难扛住。
2018 年的 MAC 网络换了一个折中方案:不显式解析问题,而是用循环注意力网络,让问题“一步一步”引导模型读图(MAC: Compositional Attention Networks for Machine Reasoning)。每一步,网络读一条问题线索,去图像对应区域“看一眼”,把结果写进记忆。这种设计在 CLEVR 上做到 98.9% 的准确率,逼近人类。
但别高兴太早。2019 年,GQA 把这些推理任务搬到了真实照片上(GQA 论文)。人类在 GQA 上能答对 89.3%,而当时基于 MAC 思路的最佳模型只有 54.06%。
"The best model achieves 54.06%, substantially lower than the 89.3% achieved by humans."
—— GQA 论文摘要
CLIP 的全局向量里,没有“左边”的位置
2021 年,CLIP 横空出世,零样本在 ImageNet 上做到 76.2% 的 top-1 准确率。它像一个真正“读懂”了图片的模型。
但 CLIP 学的本质是“全局语义对齐”:把整张图压成一个向量,再把对应文本压成一个向量,让二者靠近。图像编码器用的是 ViT 式 patch token 架构——图像先被切成语义块,经过注意力交互,最后通过池化输出单个全局向量。位置信息在压缩过程中被大幅抹平。
这意味着CLIP 擅长回答“这是什么”,却不擅长回答“它在哪里”“有几个”“谁在谁右边”。官方评估大多用线性探针:把全局向量喂给线性分类器测准确率。这只能证明“分类器可以从向量里读出类别”,完全测不出空间关系。分类成绩再漂亮,也证明不了视觉推理。
一个直观的检验:拿一张“左猫右狗”的图,问 CLIP“猫在左边吗”。它可以从语义上匹配“猫”和“狗”,但“左边”这个位置概念在全局向量里没有明确出口。更别提“红色方块右侧有几个球”这种需要枚举和定位的组合推理。
为什么 GPT-4V 数图里的小球,总是数错?
计数要求先把每个同类物体精确分隔开,再逐一枚举。视觉 token 化擅长捕捉“这里有球”这种语义,却不擅长把相近物体一个个分开,注意力还可能重复扫到同一个物体。OpenAI 在 GPT-4V 系统卡里就列出过模型在计数、空间推理上的失败案例。
CLEVR 上模型已经 98.9% 了,视觉推理算解决了吗?
远远没有。CLEVR 是无菌实验室:几何物体、固定光照、程序化问题,每个变量都被控制住。真实世界是露天菜市场:遮挡、阴影、纹理、语言歧义,一步一坑。GQA 上 54% 对 89% 的差距,才是现实视觉推理的真实水位。
让 LLM 写程序来做视觉推理,可行吗?
确实有人这么干过。Visual Programming 让 LLM 把问题翻译成代码,再调用现成的检测器、分割模型执行。好处是推理结构清晰,坏处是上限被底层视觉 API 卡住——工具找不到“左边”,程序再完美也白搭。
我的判断
视觉推理的瓶颈,从来不是“看得够不够清楚”,而是“会不会把看到的东西组织成结论”。
CLEVR 告诉我们,在人工约束的世界里,组合式推理可以训练出来;GQA 告诉我们,把任务放到真实照片里,模型立刻露馅;CLIP 告诉我们,全局表征能做好识别,却天然缺失空间细节。当前最强的视觉-语言模型,本质上依然是“识别增强”,而不是“推理突破”。
下次看到某个模型号称“能看图写文章”,先别急着惊叹它“懂”了图片。问它一句:“图里的猫在左边还是右边?”答案通常会让你冷静下来。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/768.html