对抗攻击的介绍、分类等… (Photo by Alex Chumak on Unsplash )

为什么要有对抗攻击

现实生活中可能会有恶意的攻击,为了让训练的模型能够使用于现实生活中,需要增强模型对攻击的鲁棒性,便需要研究模型的攻击和防御

攻击和防御,先研究攻击更简单

如何做到攻击,攻击要做到什么?

在原始图像上添加噪声,经过网络模型后会得到完全不同的、有违事实的结果

image-20240213130543842

Loss Function for Attack

攻击依据目的可以分为:

  • Non-targeted Attack:只要求攻击后输出结果错误
  • Targeted Attack:要求攻击后输出结果与一个特定结果相似

训练攻击样本:

image-20240213131403980

两种攻击的样本都应该满足添加噪声后,与原图差异肉眼不可见的Constraint:

对于Non-targeted Attack

训练时的 Loss 函数可以表示为:

Constraint:

即在网络参数 $\theta$ 不变的情况下,图像输出 $y^{\prime}$ 与真实值 $y^{true}$ 差距越大越好,同时,输入图像 $x^{\prime}$ 与原始图像$x^0$ 越接近越好

对于Targeted Attack

训练时的 Loss 函数可以表示为:

Constraint:

即在网络参数 $\theta$ 不变的情况下,图像输出 $y’$ 与真实值 $y^{true}$ 差距越大越好,与目标错误图像 $y^{false}$ 越接近越好,同时,输入图像 $x’$ 与原始图像$x^0$ 越接近越好

Constraint

Constraint:$d(x^0,x^{\prime}) \leq \epsilon$ 中,距离函数 $d$ 的实现有多种方式,设

  • L2-norm:
  • L-infinity:

在保持 L2 相同时,可以发现 L-∞ 的变化更能反应人类对图像间的差异,L-∞ 更适合用来处理图像攻击(见仁见智)

image-20240213140430092

如何攻击

与训练模型时类似,训练模型时是改变模型参数 $\theta$ ,训练攻击样本时是改变输入的样本 $x^{\prime}$ ,训练时应该遵循:

训练时使用梯度下降Gradient Descent方法,与训练模型参数时不同,训练攻击样本时需要实时检查 $x$ 是否超出Constraint,超出需要将 $x$ 做一个修正

image-20240213142418100

修正函数也比较简单,如果$x^t$ 超出范围,只需要在允许范围内找到一个和 $x^t$ 距离最短的点作为 $x^t$ 的修正值即可

image-20240213142832276

攻击的一个 Example

使用模型为 $f = ResNet-50$ ,迭代训练 50 epoch,原始输出为 Tiger cat (置信度为 0.64),攻击后输出为 Star Fish (置信度为 1.00),但是训练出来的攻击样本与原图的差距肉眼不可见

image-20240213143828278

将噪声放大 50 倍后如图:

image-20240213143910848

为什么会有这样的攻击效果

向原始输入图像加入随机噪声,得到的输出也会变化,但是不会很离谱

image-20240213144242795

因为在不同方向上,模型对分类判断的灵敏阈值不同,在大部分方向上,判断为 $y^{true}$ 的概率在 $x^0$ 周围很大范围内都很高;但是在极个别方向上,模型在 $x^0$ 附近的容忍阈值很小,微小的变化都会带来很大的不同,如下图所示:

image-20240213224023346

攻击方法论文

FGSM (https://arxiv.org/abs/1412.6572)

Basic iterative method (https://arxiv.org/abs/1607.02533)

L-BFGS (https://arxiv.org/abs/1312.6199)

Deepfool (https://arxiv.org/abs/1511.04599)

JSMA (https://arxiv.org/abs/1511.07528)

C&W (https://arxiv.org/abs/1608.04644)

Elastic net attack (https://arxiv.org/abs/1709.04114)

Spatially Transformed (https://arxiv.org/abs/1801.02612)

One Pixel Attack (https://arxiv.org/abs/1710.08864)

最简单的攻击方法 FGSM(Fast Gradient Sign Method)

核心是使用了梯度符号矩阵(向量)$\Delta x$ 用来更新迭代,$\Delta x$ 仅由 1 与 -1 组成

黑盒白盒攻击

白盒攻击:已知网络模型参数 $\theta$

黑盒攻击:未知网络模型参数 $\theta$

攻击的迁移性 :两个输入输出相似的网络模型,如果一个输入能够攻击其中一个模型,那么往往也能攻击另一个模型

因此,可以通过一个黑盒网络的输入输出,训练出一个已知的白盒网络,对白盒网络进行攻击,然后迁移至黑盒

Universal Adversarial Attack

论文 (https://arxiv.org/abs/1610.08401) 发现了一个“通用”的噪声可以成功攻击许多模型和输入,这样也可以实现黑盒攻击。

image-20240214222138762

Adversarial Reprogramming

论文(https://arxiv.org/abs/1806.11146)发现了一个神奇的噪声padding,它可以攻击模型,改变模型的任务。原本模型执行的为分辨物品的任务,在输入添加了噪声padding的格子图像之后,模型便能够实现“数格子”的任务。

image-20240214224450907

生活中的攻击

论文(https://arxiv.org/abs/1607.02533) 对生活中常见的图像进行攻击

image-20240214224710992

防御

有两种类型的防御方法:

  • 被动防御:不改变原本模型,在输入到网络前增加一些处理
    • 例如在输入模型前加一个filter,进行一次平滑操作,可以滤除某些敏感方向的噪声

Feature Squeeze(https://arxiv.org/abs/1704.01155) 提出了一种判断攻击的方法,将图像经过两次不同 squeeze 后输入网络,分别计算输出与不经过 squeeze 操作的输出的差$d_1,d_2$,根据$d_1,d_2$ 的最大值是否超过某个参数 $T$ 来判定模型是否受到了攻击。 image-20240214230308982

Randomization(https://arxiv.org/abs/1711.01991) 尝试在输入网络前对图像进行随机的 resize 和添加随机 padding 的操作防御攻击

image-20240214230237830

  • 主动防御:找出模型的漏洞并修补
  1. 用一组大小为 N 的训练数据集 $X = \{(x^n,\hat{y}^n)\}~~(n=1,2,\dots,N)$ 训练模型
  2. 对于每一对训练数据 $x^n$,通过某种攻击算法( algorithm A )找到能够攻击模型的输入$\tilde{x}^n$
  3. 将$(\tilde{x}^n,\hat{y}) ~~(n=1,2,\dots,N)$ 组成新数据集 $X^{\prime}$ ,用$X^\prime$ 更新模型参数
  4. 将 2. 3. 重复若干遍($T$​遍),避免修补模型后出现新的漏洞

这种方法只能防止 algorithm A 的攻击,若模型受到其它方法的攻击时,可能仍然无法防御

image-20240214231505222

to be continued…