深度学习的阿喀琉斯之踵:对抗样本如何攻破高精度AI防线

高准确率的AI也可能被“补丁”欺骗?本文揭示对抗样本如何攻击深度学习模型,并探讨其内在原因与防御手段。

原文标题:小心,那些看似聪明的AI,其实眼里只有“补丁”?

原文作者:数据派THU

冷月清谈:

本文深入探讨了深度学习模型,特别是图像分类模型,在面对对抗样本时的脆弱性。即使模型在ImageNet等数据集上达到了很高的准确率,仍可能被细微的、人眼难以察觉的扰动所欺骗。文章通过FGSM(快速梯度符号法)演示了如何生成对抗样本,并解释了神经网络容易受到攻击的原因,包括高维几何、局部线性以及对非泛化特征的依赖。文章还提到了自动驾驶、人脸识别和医疗诊断等领域中对抗攻击可能造成的严重后果,强调了高准确率并非高安全性,并讨论了对抗训练和输入预处理等防御策略,但同时也指出这些策略需要在准确率和泛化性之间进行权衡。最后,文章强调对抗样本存在的问题并非简单的bug,而是深度学习架构的内在属性,呼吁将泛化性作为重要的工程需求,以避免高准确率带来的虚假安全感。

怜星夜思:

1、文章中提到,对抗样本利用了模型学习到的“捷径特征”,而不是真正的语义理解。那么,我们应该如何设计模型,才能使其更关注图像的本质特征,而非这些容易被攻击的统计模式?
2、文章提到对抗训练是一种防御手段,但也会牺牲准确率。那么,在实际应用中,我们应该如何在准确率和鲁棒性之间进行权衡?针对不同的应用场景,最佳的平衡点是什么?
3、文章中提到,物理世界的对抗样本(比如贴纸)也可以欺骗视觉系统。那么,我们应该如何应对这种更具挑战性的攻击?

原文内容

图片
来源:DeepHub IMBA
本文约2300字,建议阅读5分钟

本文介绍了对抗样本如何轻易欺骗高准确率的图像分类模型,揭示深度学习在安全性上的脆弱本质。


下图展示了一个有趣的现象:在法国斗牛犬的图像上添加一小块对抗性补丁后,VGG分类器竟然以极高的置信度将其判定为足球。Grad-CAM可视化清楚地显示,模型的注意力完全从狗身上转移到了那块补丁——一个精心构造的小扰动就足以劫持整个决策过程。


95%准确率的模型可能不堪一击


ResNet、VGG、EfficientNet这些主流架构在ImageNet上动辄90%以上的准确率,看起来已经相当可靠。但这些模型隐藏着一个被多数工程师忽视的致命缺陷:它们极易被对抗样本愚弄。


改变一个像素,可能肉眼完全看不出区别,但分类器会彻底崩溃。本文会用FGSM(快速梯度符号法)演示如何制作对抗样本,并解释神经网络为何如此脆弱。


对抗样本到底是什么


简单说,对抗样本就是专门设计来欺骗模型的输入。和随机噪声不同,这种扰动是经过精确计算的——目标是在人眼察觉不到的前提下,最大化模型的预测误差。


这里存在一个悖论:模型可以正确识别成千上万张图片,但只要加上一点经过数学优化的噪声(像素值变化不到1%),它就会完全判断失误


对抗攻击绝非学术界的自娱自乐。自动驾驶汽车可能把停车标志识别成限速标志;人脸识别系统可能被绕过;放射科AI可能给出错误诊断;有害内容可能躲过审核系统的检测。


问题的根源在于:分类器学到的是统计层面的捷径,而非真正的语义理解。高准确率和高安全性是两回事。


FGSM:简单却致命的攻击方法


Ian Goodfellow等人在2015年提出的FGSM至今仍是最经典的对抗攻击之一。它的原理出奇地简单,但恰恰暴露了深度神经网络的根本弱点。


数学原理

给定分类器和输入图像,FGSM计算一个扰动把图像推向错误分类的方向。具体做法是沿着损失函数梯度的方向移动每个像素,用epsilon参数控制扰动幅度,确保改动在视觉上不可察觉。


FGSM为何有效

深度网络虽然有非线性激活函数但在局部表现出近似线性的特性。每个像素上的微小变化会在高维空间中累积,最终在输出空间产生巨大偏移。梯度恰好指明了这个最有效的攻击方向——随机噪声做不到的事情,梯度对齐的噪声可以轻松做到。



上图就是是Goodfellow等人最初展示的结果:在熊猫图像上叠加梯度符号计算得到的微小扰动,模型就会以极高置信度将其误判为长臂猿。两张图片在人眼看来毫无差别,但神经网络的判断却天差地别。


Python实战:构建你的第一个对抗样本


下面用PyTorch和预训练的ResNet-50从零实现一个对抗样本。


先安装依赖:


 pip install torch torchvision matplotlib numpy pillow


导入必要的库:


 import torch  
 import torch.nn.functional as F  
 import torchvision.models as models  
 import torchvision.transforms as transforms  
 import matplotlib.pyplot as plt  
 import numpy as np  
 from PIL import Image


第一步:加载分类器


用ResNet-50作为目标模型。这个架构在生产环境中很常见,而且支持梯度计算:


 model=models.resnet50(pretrained=True)  
 model.eval()


第二步:准备图像


按ImageNet标准预处理输入图像:


 transform=transforms.Compose([  
    transforms.Resize((224, 224)),  
    transforms.ToTensor(),  
])
img=Image.open("your_image.jpg").convert("RGB")  
x=transform(img).unsqueeze(0)  
 x.requires_grad=True


注意requires_grad=True这行。没有它就无法计算梯度,对抗攻击也就无从谈起。


第三步:获取原始预测


跑一次前向传播,看看模型本来会给出什么分类:


 logits=model(x)  
 pred=logits.argmax(dim=1)  
 print(f"Original prediction: {pred.item()}")


正常情况下模型应该能正确分类。


第四步:FGSM攻击


核心代码如下:


 label = pred  
loss = F.cross_entropy(logits, label)  
loss.backward()
epsilon = 0.01  # perturbation budget
perturbation = epsilon * x.grad.sign()  
x_adv = x + perturbation  
 x_adv = torch.clamp(x_adv, 0, 1)


这段代码做了什么?计算损失对输入像素的梯度,取符号得到方向,乘以epsilon控制幅度,加到原图上就得到对抗样本。最后用clamp保证像素值在合法范围内。


第五步:检验效果


用同一个模型测试对抗图像:


 logits_adv=model(x_adv)  
 pred_adv=logits_adv.argmax(dim=1)  
 print(f"Adversarial prediction: {pred_adv.item()}")


大多数情况下预测结果会完全不同。图像看起来一样,分类却天壤之别。


第六步:可视化


把原图、对抗图、噪声模式放在一起对比:


 def show_adversarial_attack(original, adversarial, perturbation):  
    fig, axes = plt.subplots(1, 3, figsize=(15, 5))  
      
    axes[0].imshow(original)  
    axes[0].set_title("Original Image")  
    axes[0].axis("off")  
      
    axes[1].imshow(adversarial)  
    axes[1].set_title("Adversarial Image")  
    axes[1].axis("off")  
      
    axes[2].imshow(perturbation, cmap="gray")  
    axes[2].set_title("Noise Pattern (10x Amplified)")  
    axes[2].axis("off")  
      
    plt.tight_layout()  
    plt.show()
orig_np = x.detach().squeeze().permute(1, 2, 0).numpy()  
adv_np = x_adv.detach().squeeze().permute(1, 2, 0).numpy()  
noise_np = (adv_np - orig_np) * 10
 show_adversarial_attack(orig_np, adv_np, noise_np)


噪声模式放大10倍后看起来像电视雪花。人眼根本分辨不出两张图的区别,但神经网络却认为它们是完全不同的物体。


神经网络为何如此脆弱


理解这个问题需要从三个角度切入。


高维几何:一张224×224的RGB图像有150,528个维度。在这么高的维度里每个维度上的微小扰动累加起来就是巨大的距离。


局部线性:尽管激活函数是非线性的,深度网络在数据点附近的小邻域内表现得非常线性,这让基于梯度的攻击特别有效。


非泛化特征:研究发现模型大量依赖那些与标签相关、但与人类感知无关的统计模式。对抗样本正是在利用这些"捷径特征"。


一个令人不安的事实:深度学习模型优化的目标是训练集上的准确率,而不是对扰动的泛化性。


一些限制需要说明


FGSM只是单步攻击算比较弱的。迭代方法如PGD和Carlini-Wagner攻击力更强也更难防御。


本文的演示假设攻击者能拿到模型权重和梯度,属于白盒场景。现实中攻击者可能只能观察模型输出,需要用黑盒攻击技术或者利用对抗样本的迁移性。


数字扰动只是一种形式。物理世界的对抗样本——比如贴在物体上的特制贴纸——可以在不同光照和角度下持续欺骗视觉系统。


防御手段确实存在:对抗训练、输入预处理、集成方法、认证防御等等。但这些方法往往要牺牲准确率,而且没有哪个能提供完全的保护。


防御策略


几种主流防御思路:


对抗训练把对抗样本混入训练数据,让模型学会应对扰动。输入变换用JPEG压缩、随机缩放、降低位深等预处理来破坏对抗扰动。集成防御结合多个模型的预测或引入随机性来增加攻击难度。认证防御用随机平滑等技术在一定范围内提供数学上的泛化性保证。检测方法则训练专门的模型来识别对抗样本。


每种方法都有代价,在泛化性、准确率、计算开销之间做权衡。


总结


对抗样本揭示的是统计优化和人类感知之间的根本鸿沟。深度学习擅长模式匹配,但它并不理解图像的语义。


对抗样本不会消失。这不是可以修复的bug而是当前深度学习架构的内在属性。随着AI在关键基础设施中的应用越来越广,理解和缓解对抗脆弱性变得愈发重要。


泛化性应该和准确率、公平性、效率一样,成为一等公民级别的工程需求。否则,高准确率带来的只是虚假的安全感。


作者: Sarthakvyadav


编辑:于腾凯
校对:林亦霖



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。




新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

从风险管理的角度来看,可以参考ISO 26262等功能安全标准,对AI系统的潜在风险进行评估,并根据风险等级选择合适的防御措施。例如,对于高风险的自动驾驶系统,可以采用多重冗余设计,结合激光雷达、毫米波雷达等多种传感器信息,降低对抗攻击的影响。同时,可以定期对模型进行安全性测试,及时发现和修复潜在的漏洞。

咱就说,有没有一种可能,这些AI模型其实就是“学霸”?考试的时候各种刷题背公式,考场上遇到没见过的题就抓瞎。要解决这个问题,是不是得让它们多做“素质拓展”,别光死记硬背?比如,可以尝试用GAN生成更多样化的训练数据,让模型见多识广,提高应对未知情况的能力。

这个问题问的好!我觉得这完全取决于应用的具体场景。如果是高风险场景,比如自动驾驶或者医疗诊断,那么鲁棒性肯定比准确率更重要,毕竟安全第一。可以适当牺牲一些准确率,采用更强的对抗训练方法,确保模型在各种极端情况下都能做出正确的判断。但是,如果是一些低风险场景,比如商品推荐或者广告投放,那么准确率可能更重要,毕竟要保证用户体验和商业利益。可以采用一些轻量级的防御方法,在不牺牲太多准确率的前提下,提高模型的鲁棒性。

咱就说,物理世界的对抗样本,本质上就是一种视觉欺骗。要解决这个问题,是不是得让AI模型也学会“怀疑”?可以借鉴人类的视觉心理学,让模型能够识别图像中的不一致性,比如物体形状的突变、光照的异常等。就像我们看到一个悬浮在空中的物体,会觉得很奇怪一样,AI模型也应该能够识别出那些不符合常理的图像。

从工程实践的角度来看,可以在图像采集阶段进行一些预处理,比如增加随机噪声、调整对比度等,来干扰对抗样本的生成。同时,可以采用一些检测方法,识别图像中是否存在异常的贴纸或者物体。但是,这种方法可能会影响图像的质量,需要在准确率和鲁棒性之间进行权衡。此外,加强对AI系统的物理安全防护,防止恶意攻击者篡改图像采集设备或者在图像中添加对抗样本,也是一个重要的方面。

我觉得这是一个很有意思的问题!从工程角度来看,可以尝试引入更多的先验知识,比如在模型中加入对物体形状、纹理等信息的约束,类似于人类视觉的认知过程。或者,可以尝试使用更鲁棒的特征提取方法,减少模型对细微扰动的敏感性。不过,感觉这方面还有很长的路要走,需要结合认知科学和机器学习的理论,才能真正解决这个问题。

物理世界的对抗样本更难防御,因为它涉及到光照、角度、遮挡等多种因素。一个可能的解决方案是,提高模型的空间感知能力,让其能够更好地理解图像中的几何信息。可以尝试使用3D卷积神经网络或者结合其他传感器信息,比如深度相机,来增强模型的鲁棒性。另外,可以研究基于物理模型的对抗攻击方法,模拟真实世界中的攻击场景,从而更好地训练模型。

从学术角度来说,这涉及到模型的可解释性和泛化能力。我们需要开发新的训练方法,让模型不仅能在训练集上表现良好,而且在面对未知扰动时也能保持稳定。例如,可以研究基于因果推断的机器学习方法,让模型学习到数据背后的因果关系,而不是简单的相关性。另外,加强对模型的认证防御,从数学上保证模型在一定扰动范围内的鲁棒性,也是一个重要的研究方向。