对抗训练综述学习笔记

本文基于这篇综述进行讨论学习:《Bai T, Luo J, Zhao J, et al. Recent advances in adversarial training for adversarial robustness[J]. arXiv preprint arXiv:2102.01356, 2021.》

对抗训练主要目的是让模型能够对于对抗样本做出正确的判断。常见的对抗样本的生成方式(或者说是对抗攻击)是 Fast Gradient Sign Method (FGSM)。

1. 对抗攻击

Fast Gradient Sign Method (FGSM) 是一种用于生成对抗样本的攻击算法,由 Ian Goodfellow 等人在 2014 年提出。FGSM 是一种非常经典且简单的对抗攻击方法,主要用于评估模型对对抗攻击的鲁棒性。下面是 FGSM 的简单介绍:

1.1 FGSM 的原理

FGSM 利用模型的梯度信息,通过对输入样本施加微小的扰动来生成对抗样本。其基本思想是通过梯度下降的方式找到能使模型产生错误预测的最小扰动。

FGSM 的步骤

  1. 选择损失函数: 选择一个损失函数$L$,该函数衡量模型的预测与真实标签之间的差距。常用的损失函数是交叉熵损失。
  2. 计算梯度: 对输入样本$\mathbf{x}$计算损失函数相对于输入的梯度$\nabla_{\mathbf{x}} L(\mathbf{x}, y)$,其中$y$是真实标签。
  3. 生成对抗扰动: 使用梯度信息生成对抗扰动。扰动的公式为: \(\mathbf{x}*{\text{adv}} = \mathbf{x} + \epsilon \cdot \text{sign}(\nabla*{\mathbf{x}} L(\mathbf{x}, y))\) 其中,$\text{sign}(\cdot)$表示符号函数,$\epsilon$是一个小的正数,表示扰动的幅度。
  4. 生成对抗样本: 将扰动添加到原始样本中,得到对抗样本$\mathbf{x}_{\text{adv}}$。

例子

假设你有一个图像分类模型,目标是生成一个对抗样本,使模型错误地将一个猫的图像分类为狗。使用 FGSM,你会:

  1. 选择损失函数: 使用交叉熵损失来衡量模型预测的错误程度。
  2. 计算梯度: 对猫的图像计算交叉熵损失相对于输入图像的梯度。
  3. 生成对抗扰动: 根据梯度的符号生成扰动。比如,梯度的符号告诉我们在每个像素上如何调整以最大化损失。
  4. 生成对抗样本: 将生成的扰动添加到原始猫的图像中,得到对抗样本。

FGSM 的特点

  1. 效率: FGSM 是一种非常快速和简单的攻击方法,因为它只需要计算一次梯度。
  2. 效果: 尽管简单,FGSM 能够有效地生成对抗样本,测试模型的鲁棒性。
  3. 局限性: FGSM 可能对一些防御方法不够有效,因为它的扰动是单一的,可能不足以击败更复杂的防御策略。

FGSM 作为对抗攻击的基础方法,为进一步研究和开发更复杂的对抗攻击技术提供了重要的理论基础。

Iterative FGSM 和 Projected Gradient Descent (PGD) 是对抗攻击中常用的改进方法,相比于原始的 FGSM,它们通过迭代优化过程来生成更强的对抗样本。以下是这两种方法的详细介绍:

1.2 Iterative FGSM

原理: Iterative FGSM,也称为 Iterative Fast Gradient Sign Method,是 FGSM 的一种改进版本。它通过多次迭代的方式生成对抗样本,以增强对抗攻击的效果。

步骤:

  1. 初始化对抗样本: 从原始样本开始,初始对抗样本为$\mathbf{x}_{\text{adv}}^0 = \mathbf{x}$。
  2. 迭代扰动:
    • 对每一步$t$(从$t = 0$到$T-1$):
      • 计算当前对抗样本的梯度$\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y)$。
      • 根据梯度生成扰动$\delta_t = \epsilon \cdot \text{sign}(\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y))$。
      • 更新对抗样本$\mathbf{x}{\text{adv}}^{t+1} = \mathbf{x}{\text{adv}}^t + \delta_t$。
      • 对于下一步,确保对抗样本仍在有效的扰动范围内(如 [0, 1] 之间),有时需要进行投影操作来保持样本的有效性。
  3. 生成最终对抗样本: 完成所有迭代后,最终的对抗样本为$\mathbf{x}_{\text{adv}}^T$。

特点:

  • 迭代过程: 通过多次迭代,每次对抗样本都稍微更新,从而生成更强的对抗样本。
  • 效果提升: 迭代过程使得对抗样本的攻击效果通常比单次 FGSM 攻击要强。

1.3 Projected Gradient Descent (PGD)

原理: PGD 是一种更强的对抗攻击方法,它在 FGSM 的基础上进行了改进,通过迭代和投影操作生成对抗样本。PGD 是一种广泛使用的迭代攻击方法,尤其在研究对抗鲁棒性时。

步骤:

  1. 初始化对抗样本: 从原始样本开始,初始对抗样本为$\mathbf{x}_{\text{adv}}^0 = \mathbf{x}$。
  2. 迭代更新:
    • 对每一步$t$(从$t = 0$到$T-1$):
      • 计算当前对抗样本的梯度$\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y)$。
      • 生成扰动$\delta_t = \alpha \cdot \text{sign}(\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y))$,其中$\alpha$是步长。
      • 更新对抗样本$\mathbf{x}{\text{adv}}^{t+1} = \mathbf{x}{\text{adv}}^t + \delta_t$。
      • 投影操作: 对于每个更新步骤,将对抗样本投影回有效的扰动范围内,确保对抗样本仍在合法范围内。这通常是通过在对抗样本上应用投影操作来实现的(例如,投影到$\epsilon$-球内)。

具体而言,对于$L_{\infty}$ 范数约束的投影操作,给定原始样本 $\mathbf{x}$ 和扰动幅度 $\epsilon$,对抗样本的投影公式可以表示为:

\[\mathbf{x}_{\text{adv}} = \text{clip}(\mathbf{x}_{\text{adv}}^{\text{new}}, \mathbf{x} - \epsilon, \mathbf{x} + \epsilon)\]

其中:

  • $\mathbf{x}_{\text{adv}}^{\text{new}}$ 是更新后的对抗样本。
  • $\text{clip}(\cdot, \text{min}, \text{max})$ 是将输入值限制在 $[\text{min}, \text{max}]$ 区间内的函数。

简化地,投影操作可以写为:

\[\mathbf{x}_{\text{adv}}[i, j] = \max(\mathbf{x}[i, j] - \epsilon, \min(\mathbf{x}_{\text{adv}}^{\text{new}}[i, j], \mathbf{x}[i, j] + \epsilon))\]

这表示对每个像素 $(i, j)$,将对抗样本的值限制在 $[\mathbf{x}[i, j] - \epsilon, \mathbf{x}[i, j] + \epsilon]$ 区间内。

  1. 生成最终对抗样本: 完成所有迭代后,最终的对抗样本为$\mathbf{x}_{\text{adv}}^T$。

特点:

  • 迭代优化: 通过多个迭代步骤来优化对抗样本生成过程,提高对抗攻击的效果。
  • 投影操作: 在每次迭代后进行投影,确保对抗样本在扰动约束范围内(例如,$\epsilon$-球内)。

区别与总结

  • Iterative FGSM:
    • 是 FGSM 的迭代版本,通过多次迭代生成更强的对抗样本。
    • 每次迭代更新对抗样本,并在更新过程中施加扰动。
    • 主要关注通过迭代改进对抗样本的质量,但没有对扰动范围进行显式的限制。
  • PGD:
    • 是一种更强的迭代攻击方法,通过每次迭代的梯度更新和投影操作生成对抗样本。
    • 包括投影操作,以确保对抗样本在允许的扰动范围内。
    • 常被认为是最强的白盒攻击之一,因为它通过迭代和投影的方式可以生成非常强的对抗样本。

这两种方法都旨在提高对抗样本的攻击效果,但 PGD 的投影操作使其在生成更具攻击性的对抗样本方面通常更为有效。

2. 对抗训练

为了让模型能够正确处理对抗样本,有很多不同的对抗训练方法被提出。

  1. Adversarial Regularization:第一种最直观的方法就是把把对抗样本加入到训练集中去训练模型
  2. Curriculum-based Adversarial Training:第二种是根据对抗样本的难易程度进行分类,让模型先学习简单的对抗样本,然后学习困难的。就像人上课一样,先从简单的入手,然后开启苦难模式
  3. ensemble adversarial training:这个也好理解,就是用多个模型生成的对抗样本来训练
  4. Adversarial Training with Adaptive $\epsilon$:这个其实也好理解,前面生成对抗样本公式中有个因子$\epsilon$,通常这是一个固定值,那么对应的对抗样本的难度相对也是在一个固定的范围内。那么一种很自然的思想就是动态改变这个因子的值,那么样本的难度也会发生变化,这样模型训练过程中能够看到不同难度的样本
  5. Adversarial Training with Semi/Unsupervised Learning:有研究发现对抗训练后,模型在对抗测试集上的 accuracy 要明显比对抗训练集上的低。要解决这个问题需要大规模的数据集,但是标签数据非常难获得,所以半监督、无监督训练成为一种可行的方法。不过,你也许会说,不是可以直接用模型生成大量的对抗样本吗,为什么还要用无监督这类方法呢?你说的没错,不过对抗样本生成是基于已有的数据通过加噪声的方式生成的,如果本身的数据集数量有限,那么模型学习到的数据分布也是不够的,对于正常样本的分辨能力可能也会受到影响。
  6. Efficient Adversarial Training:以下是对提高对抗训练效率方法的算法总结:
      1. Free Adversarial Training (Free-AT) [Shafahi et al., 2019]
        • Free-AT的核心思想是在前向传播时重用在反向传播中计算得到的梯度。在这种方法中,模型参数和图像扰动将同时更新。Free-AT通过这种方式减少了计算量,因为不需要多次计算梯度。
      1. Fast Adversarial Training (FastAT) [Wong et al., 2020]
        • FastAT采用了随机初始化的快速梯度符号方法(FGSM)来进行对抗性训练,并证明了其与基于PGD的对抗性训练方法(PGD-AT)同样有效。FastAT通过随机化初始化扰动来减少过拟合,并提高了训练效率。
      1. GradAlign [Andriushchenko and Flammarion, 2020]
        • GradAlign旨在解决快速训练方法中出现的灾难性过拟合问题。该方法通过在梯度更新中引入额外的对齐步骤来改善模型的泛化能力。
      1. Dynamic Schedule [Vivek and Babu, 2020b]
        • 动态调度方法通过调整训练过程中的扰动强度和其他超参数,来平衡模型的鲁棒性和准确性。
      1. Inner Interval Verification [Kim et al., 2021]
        • 这种方法通过在内部验证扰动的区间来防止过拟合,从而提高模型的泛化能力。
      1. Domain Adaptation [Song et al., 2019]
        • 域适应方法通过将对抗性训练应用于不同域的数据来提高模型的泛化能力。
      1. Regularization Methods [Vivek and Babu, 2020a; Huang et al., 2020]
        • 正则化方法通过在损失函数中添加正则化项来控制模型的复杂度,从而减少过拟合。
      1. You Only Propagate Once (YOPO) [Zhang et al., 2019a]
        • YOPO基于Pontryagin的最大原理,通过分析发现对抗性梯度更新仅与神经网络的第一层相关。因此,YOPO专注于在第一层计算对抗性扰动,而其他层保持不变,显著减少了前向和后向传播的次数。

这些方法都旨在解决传统对抗性训练中的计算效率问题,同时尽可能保持或提高模型的对抗性鲁棒性。通过这些技术,研究者们希望能够在有限的计算资源下训练出更加鲁棒的深度学习模型。