VQA 的对抗样本:改图片一个像素,模型的答案就完全变了——鲁棒性问题

假设你在开发一个医疗影像问答系统。医生上传一张肺部 CT,输入问题:"这个病人有没有结节?" 模型回答:"没有。" 你很高兴,准备上线。但有一天,有个人把这张 CT 图片放大了 400 倍,找到右下角一个像素,把它的 RGB 值从 (128, 128, 128) 改成 (130, 128, 128)——你的模型突然回答:"有结节,建议立即手术。" 图片在任何人眼里都毫无变化,但模型的答案彻底变了。这不是科幻,这是 VQA 的对抗样本问题。

AI technology illustration

先弄清楚 VQA 是怎么工作的

VQA 是 Visual Question Answering 的缩写,任务是让模型根据一张图片回答一个自然语言问题。它不是单纯的图像分类,也不是单纯的 NLP,而是两者的交叉。

一个典型的 VQA 模型有四条流水线:

  • 视觉编码器:把图片切成 patch,转成视觉向量。早期用 CNN,近年用 ViT。
  • 文本编码器:把问题变成 token 向量。
  • 融合模块:通过 cross-attention 让视觉和文本向量互相"看",生成联合表征。
  • 分类头:从候选答案中挑一个概率最高的输出。

注意一个关键事实:模型从头到尾处理的都是数字矩阵,不是"图像"。图片在它眼里是像素值的网格,再经过卷积或注意力变成高维特征向量。这个本质决定了后面的一切。

多模态融合:两条信息流的碰撞

融合是 VQA 的核心,也是它的软肋。以 LXMERT 这类模型为例,交叉注意力让每个图像 patch 去"观察"每个文本 token,同时让每个文本 token 去"观察"图像 patch。这个操作本意是让视觉信息和语义信息在共享空间里对齐,但它也为对抗攻击提供了完美的杠杆。

为什么?因为交叉注意力会把一个 patch 的影响传播到所有 token 上。攻击者只需要让少量图像 patch 的特征发生偏移,经过交叉注意力后,这种偏移会扩散到所有文本 token 的表示里。一个像素的改动,乘上 patch 数、token 数和注意力头数,最终影响被成百上千倍放大。

你可能觉得我在夸张。那就看一个真实的实验:2017 年,Su、Vargas 和 Sakurai 发表了 One Pixel Attack for Fooling Deep Neural Networks。他们用差分进化算法做黑盒攻击——不访问模型内部梯度,只观察输出,反复"变异"单个像素的颜色值。结果是在 CIFAR-10 上,约 68% 的测试图像都能被单个像素骗过,模型把飞机认成鸟,把猫认成狗。这篇论文做的是图像分类,但思路完全适用于 VQA。

高维空间里的一小步,是决策边界上的一大步

我最早以为对抗样本是因为模型"太敏感",像神经质一样对任何变化大惊小怪。直到我仔细想了一个问题:模型和人,到底谁对"相似"的判断更合理?

人类看图片走的是语义通道:一只猫,不管它坐在沙发上还是地板上,不管光线明暗,它都是猫。模型看图片走的是数值通道:一张 224×224 的彩色图片,是一个 15 万维空间里的点。模型在高维空间里画了很多决策边界,把不同类别的点分开。

一个像素的改动,在像素空间里是极小的一步,但如果这一步恰好跨越了决策边界,模型的输出就会从"是"翻成"否"。更麻烦的是,高维空间中"跨越边界"这件事比低维空间容易得多。你在一维实轴上移动一个点,可能需要移动很远才能越过边界;但在 15 万维空间里,有一万五千个方向可以走,其中总有几个方向能让你快速越界。

VQA 比纯图像分类更糟,因为它的决策边界在一个视觉-语言联合空间里。图像向量和文本向量融合后,再被分类头映射到答案空间。攻击者既可以攻击图像侧,也可以攻击文本侧,甚至同时攻击两侧,让模型朝指定错误答案移动。

为什么 VQA 的攻击者这么容易得手?

我后来实际测试 VQA 模型时发现一个规律:对文本的攻击比对图像的攻击更致命。把问题里的"左"改成"右",模型可能完全找不到目标;把"开心"改成"难过",模型就会掉转方向。这还不算对抗样本,只是正常输入的变化。模型之所以这么脆弱,是因为它没有人类那种"像素级变化不影响语义"的常识。

更扎心的是,VQA 的答案空间往往是离散的,模型只是从几百个候选词里挑一个。这给了攻击者明确的靶子:把答案改成某个特定词。相比图像分类需要在几千类里改目标,VQA 的候选答案更少,攻击成功率自然更高。

防御为什么这么难?

最常见的防御是对抗训练:把攻击样本混进训练集,让模型见过这些陷阱,从而对类似的扰动更鲁棒。这种方法有效,但有根本性局限——它只能防御训练时见过的攻击方式。攻击者换个扰动策略,模型又被骗。

有人统计过,在鲁棒性领域的攻防竞赛里,防御方案的平均生命力只有几个月。攻击方永远在暗处,防御方在明处,这不是公平的游戏。真正的鲁棒性需要模型像人类一样理解语义,而目前的模型只是在训练分布内寻找统计捷径。

FAQ:你可能有的疑问

一个像素就能攻击,那模型是不是在"死记硬背"?

在某种程度上是。你可以做个简单实验:把 VQA 测试集所有问题里的"没有"替换成"有",模型的表现会大幅下降。这说明模型在很多任务上依赖的是统计相关性,而不是真正的理解。单像素攻击只是把这种相关性利用到了极致。

对抗攻击需要完全访问模型吗?

不需要。单像素攻击是黑盒攻击,攻击者只需要获得模型的输出概率,不需要梯度。差分进化算法每次随机修改几个候选像素,保留最有效的那个,像盲人摸象一样逐步演化出攻击样本。摸的次数足够多,总能找到那个关键像素。

对抗训练能根治吗?

目前不能。对抗训练让模型在特定扰动预算内更鲁棒,但多个研究发现,换一种攻击方法,模型照样被骗。对抗训练本质上是在绕开训练时见过的陷阱,而不是让模型真正理解图像语义。如果你要部署 VQA 系统,请把对抗鲁棒性当作与准确率同等重要的指标来评估。

什么时候你会真正遇到这个问题

如果你只是在 Colab 里跑 demo,这个问题看起来像猎奇。但如果你在做自动驾驶、医疗影像或审核系统,这不是学术游戏。真实世界的图片有噪声、遮挡和光照变化,这些自然扰动同样可能让模型出错。对抗样本只是把这个问题极端化、显性化了。

我研究这个主题后最大的转变是:不再用准确率来评价一个多模态模型。准确率衡量的只是模型在特定数据分布上的表现,而不是它"认识"世界的能力。VQA 模型看到的不是一张图,而是高维空间中的一个点;你改一个像素,那个点就可能从悬崖的一侧跳到另一侧。而悬崖之间,没有护栏。

进阶阅读

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

(0)
上一篇 4天前
下一篇 4天前

相关推荐