本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

通过细微干扰就能让最先进的深度学习模型产生严重误判,对抗样本揭示了AI系统脆弱的一面

人工智能和深度学习系统虽然在诸多领域表现出色,但却面临着一个看似微小却极具威胁的挑战——对抗样本(Adversarial Examples)。这些经过精心构造的输入样本,通过在原始数据上添加人眼难以察觉的细微干扰,就能使深度学习模型以高置信度给出错误输出。

1 什么是对抗样本?

对抗样本是由 Christian Szegedy 等人在2014年首次提出的概念,指的是在数据集中通过故意添加细微的干扰所形成的输入样本,导致模型以高置信度给出一个错误的输出。

这些样本对人类观察者来说与正常样本几乎没有区别,但却能完全迷惑深度学习模型。如下图所示,在图像分类任务中,对一张熊猫图片添加少量噪声后,人类仍然识别为熊猫,但模型却以高置信度将其分类为长臂猿。

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

往期文章推荐:

2 对抗样本的历史与原始论文

对抗样本的概念最早由 Christian Szegedy 等人在2013年的论文《Intriguing properties of neural networks》中提出。该论文发现包括卷积神经网络(CNN)在内的深度学习模型对于对抗样本都具有极高的脆弱性。

原始论文出处

  • 论文标题:Intriguing properties of neural networks
  • 作者:Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow, Rob Fergus

这篇开创性工作发现,在许多情况下,在训练集的不同子集上训练得到的具有不同结构的模型都会对相同的对抗样本实现误分,这意味着对抗样本成为了训练算法的一个盲点

3 为什么会产生对抗样本?

3.1 高维线性解释

Ian Goodfellow 等人在后续论文《Explaining and harnessing adversarial examples》中提出,对抗样本的产生主要原因之一是深度神经网络的过度线性。神经网络主要是基于线性块构建的,因此它们实现的整体函数被证明是高度线性的。

在高维空间中,通过对输入进行许多无穷小的改变,这些微小的变化会累积起来,导致输出有大的变化。可以通过调整相应权重的符号变化来最大限度地发挥许多小变化对其的影响,这也是一种产生对抗图像的快速方式。

3.2 盲区假说与线性假说

对于对抗样本的存在原因,目前尚无统一解释,但主要可以从盲区假说线性假说两个维度加以理解:

  • 盲区假说:认为对抗样本位于模型决策边界附近且远离训练数据流形的点,模型在这些区域的行为未受到充分约束。
  • 线性假说:认为神经网络的线性特性在高维空间中足以导致对抗样本的产生,即使模型在训练数据上表现良好。

4 对抗攻击的类型

对抗攻击可以根据攻击者的知识和目标进行分类:

4.1 白盒攻击与黑盒攻击

# 白盒攻击示例:基于梯度的攻击
def white_box_attack(model, input_image, target_label, epsilon=0.01):
    """
    白盒攻击:攻击者完全了解模型结构和参数
    """
    # 生成对抗扰动
    perturbation = generate_adversarial_pattern(model, input_image, target_label)

    # 添加扰动到原图像
    adversarial_image = input_image + epsilon * perturbation
    adversarial_image = tf.clip_by_value(adversarial_image, 0, 1)  # 保持图像范围

    return adversarial_image

# 黑盒攻击示例:基于查询的攻击
def black_box_attack(original_image, target_label, max_queries=1000):
    """
    黑盒攻击:攻击者不知道模型内部结构,只能通过查询获取输出
    """
    # 初始化一个随机扰动
    perturbation = np.random.uniform(-0.1, 0.1, original_image.shape)
    adversarial_image = np.clip(original_image + perturbation, 0, 1)

    # 通过多次查询迭代优化扰动
    for i in range(max_queries):
        # 获取当前对抗样本的预测结果
        prediction = model.predict(adversarial_image.reshape(1, 224, 224, 3))
        current_label = np.argmax(prediction)

        if current_label == target_label:
            break  # 攻击成功

        # 根据预测结果调整扰动(无需梯度信息)
        # 这里使用随机搜索方法,实际中会更复杂的优化方法
        new_perturbation = perturbation + np.random.normal(0, 0.01, perturbation.shape)
        new_adversarial = np.clip(original_image + new_perturbation, 0, 1)

        # 如果新扰动更有效,则替换
        new_pred = model.predict(new_adversarial.reshape(1, 224, 224, 3))
        if np.max(new_pred) > np.max(prediction):
            perturbation = new_perturbation
            adversarial_image = new_adversarial

    return adversarial_image

4.2 有针对攻击与无针对攻击

  • 有针对攻击:试图使模型将输入分类为特定目标类别
  • 无针对攻击:只需使模型产生错误分类,不考虑具体错误分类为何

5 著名的对抗攻击方法

5.1 快速梯度符号法(FGSM)

Goodfellow 等人提出的 FGSM 是最著名的对抗攻击方法之一,它利用模型的梯度信息生成对抗样本。

5.2 投影梯度下降(PGD)

Madry 等人提出的 PGD 攻击是一种迭代攻击方法,比 FGSM 更强大且有效。

6 对抗样本的防御技术

面对对抗样本的威胁,研究人员提出了多种防御方法:

6.1 对抗训练

对抗训练是最直接有效的防御方法之一,通过在训练过程中加入对抗样本,提高模型的鲁棒性。

6.2 防御性蒸馏

Defensive distillation 是 Papernot 等人提出的一种防御技术,通过使用概率分布作为目标训练,大大降低网络对抗扰动的脆弱性。

6.3 基于检测的方法

另一种思路是检测对抗样本而不是直接对它们进行分类。

7 对抗样本在实际中的应用与挑战

7.1 物理世界中的对抗样本

研究表明,对抗样本不仅存在于数字世界,也能在物理世界中实现。Goodfellow 等人展示了即使打印对抗图像并重新拍摄,这些图像仍然能欺骗分类器。

7.2 对抗伪装

段然杰等人在CVPR2020中提出了对抗伪装(Adversarial Camouflage)的概念,通过结合风格迁移和对抗攻击的框架,可以将对抗样本的风格进行个性化伪装,使攻击在现实世界中更难以察觉。

7.3 对抗样本对AI安全的影响

对抗样本的存在对AI系统的安全部署提出了严峻挑战,特别是在自动驾驶、医疗诊断、安全监控等安全关键领域。研究表明,即使是最先进的深度学习模型,也存在被对抗样本攻击的风险。

结论

对抗样本揭示了深度学习系统的一个重要安全漏洞,也促进了关于机器学习鲁棒性和安全性的广泛研究。尽管已经提出了多种攻击和防御方法,但这仍然是一个活跃的研究领域,尚未得到完全解决。

理解对抗样本不仅有助于开发更鲁棒的AI系统,也提供了关于深度学习决策过程的宝贵见解,有助于解释这些"黑盒"模型的工作原理。随着AI系统在关键领域的应用日益广泛,对抗样本的研究将变得越来越重要🔥。

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐