一句话定义:对抗样本(adversarial example)是被人为加工过的输入——通常只在原图上改动极小的一层扰动,人眼几乎察觉不到,却能让机器学习模型以很高的置信度给出错误答案。
它为什么能骗过模型
把一张图片看成一大串数字:每个像素的 RGB 值都是一个数。模型做的事情,是在一个非常高维的空间里画出一条条"分界线",把不同类别分开。对抗攻击的思路是:沿着让模型损失变大的方向,给每个像素都挪一点点——比如把某些像素调亮 2%,另一些调暗 1%。单看某个像素,这点变化毫无意义;但成千上万个微小改动叠加起来,就足以把整张图推过分界线,落到"错误类别"那一侧。
打个比方:你在咖啡里加了一撮盐,舌头尝不出来,但一台精密的成分分析仪立刻报出"这不是咖啡,是汤"。人的感知是粗糙的、稳定的,模型的感知却是精确而脆弱的。更麻烦的是,模型给出的置信度往往还很高——它不是说"我有点犹豫",而是说"我有 99% 把握这是限速 80"。
常见做法是沿着梯度方向做微调,比如快速梯度符号法(FGSM)、投影梯度下降(PGD),核心都是"扰动要小到人看不出来,效果要大到模型翻车"。
和几个相邻概念的区别
| 概念 | 发生在哪一步 | 被改的是什么 | 人的感受 |
|---|---|---|---|
| 对抗样本 | 推理阶段 | 输入本身 | 几乎无感 |
| 数据投毒 | 训练阶段 | 训练数据 | 因场景而异 |
| 后门攻击 | 训练时埋、推理时触发 | 模型 + 特定触发输入 | 平时一切正常 |
| 普通噪声 | 推理阶段 | 输入 | 通常能看出模糊失真 |
关键差别在于:对抗样本是"算"出来的,不是随机的,也不是自然存在的;它专门针对模型,而不是针对人。
对从业者和普通人的意义
对做模型的人:准确率不是安全指标。人脸识别、自动驾驶感知、内容审核、语音助手,只要输入可被外部控制,就要考虑对抗鲁棒性。对抗训练是常见缓解手段——把对抗样本掺进训练数据——但通常代价不小,而且不保证对所有攻击都有效。
对普通人:有两点值得记住。第一,模型的"高置信度"不等于"正确",它只是一个数字。第二,网上有些"加一层看不见的扰动就能防止图片被人脸识别抓取"的说法,实际防护效果有限、容易被绕过,别把它当成可靠保险。对抗样本提醒我们:机器看到的,和你看到的,可能根本不是同一个世界。
