Szegedy 对抗样本 — 图片只改一点点,模型却会彻底看错
待复核Szegedy 这篇论文第一次系统展示:深度神经网络可以被肉眼几乎看不出的微小扰动骗到任意误分类。日常类比:像你在门禁照片上只多贴一层透明胶,人看还是你,门禁却把你认成别人。
它有两个发现:第一,神经网络高层里的“单个神经元”并没有想象中那么像一个独立概念;随机方向也能挑出有语义相似性的图片。第二,也是后来影响最大的发现:只要沿着模型最脆弱的方向稍微推一下输入,模型就会把一张本来分类正确的图看成完全错误的类别。
这类被故意构造出来的输入,论文称为 adversarial examples,中文常叫“对抗样本”。它不是随机噪声,而是专门针对模型损失函数找出来的最坏小改动。
换句话说,这篇论文把一个很朴素的问题摆到台面上:
- 人类判断图片时,主要看物体本身有没有变
- 模型判断图片时,可能被高维像素空间里的某个方向牵着走
- 安全评估要同时关心这两套判断标准之间的缝隙
不理解这篇论文,下面这些事会很难解释:
- 为什么一个 ImageNet 模型看起来很准,却可能把一张几乎没变的图判成“鸵鸟”
- 为什么机器学习安全不能只看平均准确率,还要看“有没有人故意找漏洞”
- 为什么后来的 FGSM、PGD、DeepFool 都在研究“怎么更快找到骗模型的小扰动”
- 为什么模型可解释性不能只盯单个神经元,很多语义可能藏在整个向量空间里
-
对抗样本是“最坏方向的小推力”。类比:桌子平放时很稳,但你如果正好推到最容易翻的角,力不大也能出事。论文用优化方法找一个很小的
r,让x + r仍像原图,却被模型判成目标标签。 -
脆弱性会跨模型迁移。类比:一把钥匙不只开一把相似的锁,而是能开一串同类锁。作者发现,用一个网络生成的对抗样本,换到不同层数、不同正则、甚至不同训练集训练出的网络上,也常常还能骗过。
-
语义不一定在单个神经元里。类比:合唱的意思不一定属于某一个人的声音,而在整个和声里。论文比较了单个高层单元和随机线性组合,发现两者都能挑出语义相近的图片,说明“一个神经元一个概念”的说法太简单。
案例 1:把“找漏洞”写成一个优化问题
Section titled “案例 1:把“找漏洞”写成一个优化问题”target = "ostrich"r = random_small_noise()while model(x + r) != target: r = update_to_increase_loss(x, r, target) r = keep_pixels_between_0_and_1(r)逐部分解释:
x是原始图片,r是要加上去的小扰动model(x + r) != target表示还没有骗到指定类别update_to_increase_loss不是乱改像素,而是顺着模型更容易出错的方向改keep_pixels_between_0_and_1对应论文里的盒约束,保证图片像素仍在合法范围
案例 2:为什么随机噪声不是同一件事
Section titled “案例 2:为什么随机噪声不是同一件事”clean = load_digit("7")random_noise = clean + gaussian_noise(std=0.1)adversarial = clean + optimized_noise(std=0.06)print(model(random_noise), model(adversarial))逐部分解释:
gaussian_noise像随手摇晃相机,方向随机,很多能量浪费在无关像素上optimized_noise像专门按模型痛点下手,幅度更小也更有效- 论文在 MNIST 上对比过:随机噪声很大时还常能认对,而对抗扰动很小时能把对应模型打到 0% 准确率
案例 3:迁移性为什么让它变成安全问题
Section titled “案例 3:迁移性为什么让它变成安全问题”attack = make_adversarial(model_a, image)print(model_a(attack))print(model_b(attack))print(model_c(attack))逐部分解释:
model_a是攻击者手里的模型,用来生成对抗样本model_b可以是结构不同、超参数不同的模型model_c甚至可以是用另一半训练数据训练出来的模型- 如果三者都容易受影响,攻击者就不必完全知道线上模型细节,这就是“迁移攻击”的雏形
-
把对抗样本当随机噪声:随机噪声没有目标,而对抗扰动是沿损失函数专门优化出来的,所以小得多也更危险。
-
以为只要测试集准确率高就安全:测试集通常不是攻击者构造的最坏输入,所以平均表现好不等于局部没有洞。
-
以为单个神经元就等于一个概念:论文发现随机方向也能激活有语义关系的图片,说明概念常分布在整个表示空间里。
-
以为换模型就能躲开攻击:跨模型、跨训练集实验说明,对抗样本不是某一次训练的偶然毛刺,而可能来自数据和模型共同形成的脆弱方向。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 解释对抗机器学习的起点:为什么“人看没变,模型看错了”会发生
- 评估图像分类模型的安全性,尤其是有攻击者参与的场景
- 理解后续 FGSM、PGD、DeepFool 等攻击方法在解决什么问题
- 反思神经网络可解释性:不要把全部语义寄托在单个神经元上
不适用:
- 想要最快生成攻击样本时,这篇的 L-BFGS 方法太慢,后续 FGSM / PGD 更常用
- 想证明所有模型都会被攻击时,这篇主要给出经验发现,不是完整定理
- 想直接防御攻击时,这篇只有初步的对抗训练想法,不是成熟防御方案
- 想研究文本或语音攻击时,这篇主要实验材料是图像任务
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2012 年:AlexNet 在 ImageNet 上大幅刷新成绩,大家开始相信深度网络真的能“看懂”图片。
- 2013 年:Szegedy 等人反过来问:这些网络到底在看什么?单个神经元可靠吗?局部输入空间平滑吗?
- 2014 年 ICLR:论文展示 L-BFGS 构造的对抗样本,开启“对抗样本”这一研究方向。
- 2014 年底:Goodfellow、Shlens、Szegedy 提出 FGSM,用线性解释和一次梯度符号攻击把这条线推向主流。
- 之后:攻击、迁移、防御、鲁棒训练、认证鲁棒性成为机器学习安全的一条长期主线。
- 高准确率不是高可靠性:模型在普通测试集上表现好,仍可能在输入附近存在极窄但密集的错误口袋。
- 安全要看最坏情况:对抗样本把评估从“随机样本平均怎样”推进到“有人故意找茬会怎样”。
- 表示空间比单个神经元更重要:语义可能存在于方向、子空间和整体几何结构中。
- 迁移性是关键威胁:如果一个模型的漏洞能迁移到另一个模型,黑盒攻击就变得现实。
- 论文 PDF:Szegedy et al. 2013 — Intriguing Properties of Neural Networks
- goodfellow-fgsm-2014 —— 用一次梯度符号生成对抗样本,并提出线性解释
- deepfool-2016 —— 更精细地估计离分类边界最近的小扰动
- madry-pgd-2017 —— 把 PGD 对抗训练变成鲁棒优化的标准基线
- carlini-wagner-2017 —— 展示许多早期防御会被更强优化攻击绕过
- dropout-2014 —— 同期常用正则化方法,但它解决过拟合,不直接解决最坏扰动
- batchnorm-2015 —— 让深层网络更好训练,却不自动保证输入局部平滑
- resnet —— 更深的图像模型后来也必须面对对抗鲁棒性问题
- word2vec —— 论文借用“语义在向量空间方向中”的直觉来理解高层表示
- trustrank-2004 —— 搜索排序里的对抗思想,和机器学习安全同样关注恶意输入
- sleeper-agents —— 都提醒我们:模型表面表现好,不代表隐藏行为已经安全
- carlini-wagner-2017 —— C&W 攻击 — 用强优化检验神经网络鲁棒性
- deepfool-2016 —— DeepFool 2016 — 用最小扰动量出模型边界有多近
- goodfellow-fgsm-2014 —— Goodfellow FGSM — 用一次梯度就能造出对抗样本
- madry-pgd-2017 —— Madry PGD — 把对抗训练变成最坏情况演练