你的眼睛看到的世界,和它真正的样子可能不是一回事
那位画师叫林姐,城里没人比她更会认人。
她是怎么做到的,谁也说不清。她从小看了几万张人脸,只要给她一张照片,她能告诉你这是谁、住哪、什么时候来过这条街。城里的官府请她做"识人"的事——抓逃犯、找失散的人、辨认无名尸——她从来没出错过。整个城没有一个人质疑过林姐的眼睛。
那天早上,有个外乡的旅人推开她的门,带着一张照片。
"林姐,这是谁?"
林姐看了一眼:"老阿明,城东卖豆腐那家。"
"对。"旅人点头。然后从袖子里又掏出一张照片,和第一张几乎一模一样——同一个人,同一个角度,同一种光线。"那这一张是谁?"
林姐看了一眼,脱口而出:"老张,城西打铁的。"
她说完之后,旅人没有说话,只是把两张照片并排摆在桌上。
林姐凑近看。两张照片几乎完全一样——同一张脸的同一个角度。她甚至能数出眼角的褶子、嘴边的痣、左耳上一颗小痘印——两张照片这些细节全部对应。
但她就是看到了两个人。
她揉揉眼睛,再看。第二张里某个微妙的地方——也许是脸颊那一片阴影的边缘、也许是鼻梁那一道光的方向,有几笔几乎看不见的修改——但这些修改,在她那一双经过几万张训练的眼睛看来,已经把这个人变成了另一个人。
她转头让她的小学徒来看。学徒看了两张照片很久,说:"师父,我看着……完全一样啊。这两张都是老阿明。"
林姐又喊了路过的几个邻居。每个人都看不出区别。对所有正常的眼睛,这两张照片,无差别地都是老阿明。
只有林姐——这个全城最会认人的眼睛——在这第二张照片上斩钉截铁地看到了另一个人。
旅人收起照片,在桌上放下三两银子,说:
不是你眼睛差。正是因为你眼睛太好,你才会被这种东西骗。一双普通的眼睛只看个大概,看不到那些被悄悄改动的地方,所以骗不到他们。但你——你那双眼睛看的是常人看不见的细节。如果有人专门去研究你看的是哪些细节,然后只去改那些细节,你就成了全城最容易被骗的人。
林姐坐在那里很久没说话。
她这一辈子第一次怀疑她的眼睛。她以前以为眼睛越好就越接近真相。她现在明白了:眼睛越好,你看到的越是"那双眼睛建构出来的世界",而不是世界本身。这个世界是什么样子,和你的眼睛认为它是什么样子,可能从来就不是一回事。
学徒听不懂这些话,问:"师父,那以后你还认不认人?"
林姐想了想,说:
认。但是从今天起,我不再相信我看到的。每一张照片,我会问自己一句:会不会有人专门改了这张,让我看错?
这一句话,我以前不知道要问。
寓言之外
这就是 Adversarial Examples(对抗样本)——现代深度学习里最让人不安的发现之一,直到今天仍然没有彻底的解决办法。
2013 年,Christian Szegedy 在 Google 做实验时偶然发现了一件事:对一张能被神经网络百分百正确分类为"熊猫"的照片,只要对每个像素加上一点点几乎肉眼看不见的扰动,模型就会以 99% 的把握把它分类成"长臂猿"。
人眼看上去,两张照片完全一样——是同一只熊猫。但模型——这个在 ImageNet 上训练得极其精准的模型——彻底地、以高度自信地搞错了。
更可怕的是后来的发现:
- 这种扰动可以被算法精确地求解——只要你能访问模型(或者它的某种近似),你就能算出"对每个像素该加多少"才能让模型出错。这叫 FGSM、PGD 等"白盒攻击"。
- 扰动可以被打印到物理世界——研究者把对抗扰动打印成贴纸贴在停车标志上,自动驾驶系统就会把它识别成限速标志(Eykholt et al. 2018)。在眼镜上贴一种花纹,人脸识别系统会把你认成另一个人(Sharif et al. 2016)。
- 扰动可以跨模型迁移——用模型 A 算出的对抗样本,对模型 B 也常常有效。这意味着即使你不知道目标系统的内部细节,也能攻击它(黑盒攻击)。
- 几乎所有深度学习模型都易受攻击——图像、语音、文本、强化学习的策略,无一例外。
为什么会这样?这是个仍在争论的问题,但有几个被广泛接受的解释:
线性假说(Goodfellow et al. 2015)——神经网络虽然非线性,但在每个局部其实接近线性。在高维空间里,很小的扰动经过线性放大,就足以跨越分类边界。一张图像有几十万维像素,每个维度只动一点点,累积起来对线性的输出可能产生巨大变化。
特征不对齐——模型学到的"特征"和人类视觉系统认为的"特征"根本不是同一回事。模型可能用某种我们意识不到的低层统计模式去分类,而那些模式对人眼是不可见的。修改这些模式,我们看不出区别,但模型彻底换了视角。
高维数据的几何性质——在几百万维的空间里,任何一个数据点周围都有大量的"邻居"在分类边界的另一侧。即便扰动很小,只要方向选对,就能跨过边界。
寓言里旅人说的那句话,可能是最深的解释:正是因为林姐眼睛太好,她才会被骗。一个分类不那么精准、判断比较粗糙的模型,反而对小扰动更鲁棒——它根本注意不到那么细的差别。一个把所有细节都"用上"的精准模型,对那些细节的任何一点点扰动都会响应。精准与脆弱,是同一枚硬币的两面。
这件事的影响远远超出学术圈:
自动驾驶的安全性——如果有人在路标上贴一张特制的贴纸就能让自动驾驶车辆误识,那这是一个严重的攻击面。 人脸识别——能被对抗眼镜骗过的人脸系统,在安防场景的可信度大打折扣。 内容审核——经过对抗扰动的违规图片可以躲过 AI 审核;经过对抗修改的虚假新闻可以躲过 AI 检测。 金融风控——欺诈检测模型可能被对抗化的交易模式绕过。 军事侦察——对抗扰动可以让卫星图像识别系统看错目标。
我们的应对手段不少,但没有一种是根本性解决:
对抗训练(Adversarial Training)——在训练数据里加入对抗样本,让模型学会对它们鲁棒。有效但代价高——训练慢几倍,而且只对训练时见过的攻击鲁棒,新的攻击仍可能突破。
输入预处理——对输入做去噪、压缩、随机化,破坏对抗扰动的精细结构。但聪明的攻击者可以绕过预处理,设计"对预处理也鲁棒"的对抗样本。
模型集成 + 拒绝识别——多个模型投票;不一致时拒绝输出。增加攻击难度,但不能根除。
Certified Robustness(可证明的鲁棒性)——给模型一个数学证明:在某个范围内任何扰动,模型的输出一定不变。能给出强保证,但当前只对小模型可行。
在 LLM 时代,问题以新形式出现——Prompt Injection、Jailbreak、对抗提示词——本质上都是对抗样本在文本空间的体现。攻击者构造一段精心设计的文字,让模型违反训练时学到的对齐规则。这是当今所有大模型公司都在头疼但没解决的问题。
最后一句话——对抗样本告诉我们一件深刻的事:当我们说"模型理解了图像"时,我们错了。模型学到的是某种统计映射——它能在大多数自然分布的数据上工作得很好,但它的"理解"和我们的"理解",是两套不同的东西。两套理解大部分时候吻合,所以我们以为是一回事;但在边缘情况下它们分道扬镳,这时模型可以毫无察觉地完全错掉。
林姐的故事,就是今天每一个深度学习系统的真实处境。
在 AI 史的位置
对抗样本的发现可以追溯到 2013 年 Christian Szegedy 等人的论文 "Intriguing properties of neural networks"——一个本来想研究神经网络几何性质的项目,意外捅出了一个安全漏洞。2014 年 Goodfellow(也是 GAN 的发明者)等人的 FGSM(Fast Gradient Sign Method)给出了一个简单可怕的攻击算法:只要一次反向传播,你就能算出该怎么扰动。
2017-2019 是对抗样本研究的黄金时期。物理世界攻击(贴纸、眼镜)、迁移攻击、可证明鲁棒性——一系列工作让人意识到这不是学术玩具,而是 AI 系统部署到现实世界时的真正威胁。
2022 年起,随着大语言模型的兴起,问题以新形式重新登场——Prompt Injection 和 Jailbreak。攻击者用精心设计的文本让模型说出本来被对齐训练禁止的内容。Anthropic、OpenAI 都把这个问题列为长期研究优先级,但截至今天没有任何完美的防御。
这一切都印证了那个 2013 年的偶然发现指向的真相:深度学习的"理解",和我们以为的"理解",可能永远是两件事。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:11. 一张照片骗过所有人的眼睛
本文链接:https://www.sshipanoo.com/blog/ai/ai-fables/11-一张照片骗过所有人的眼睛/
本文最后一次更新为 天前,文章中的某些内容可能已过时!