0%

对抗攻击篇:CW 攻击算法

五一闲的没事继续开坑,差不多也该做论文了。等看完一些经典的攻击算法后,做一些复现和对比实验,然后去看经典的防御算法。CW 算法是一种基于优化的攻击算法 1,而论文的创新点在于损失函数的定义与梯度的截断。

L-BFGS

从最开始的 L-BFGS 2 出发,通过 $L_2$ 范数距离寻找和原始样本 $x$ 最接近的对抗样本 $x’$,而寻找对抗样本的过程就是解决以下优化问题:

\begin{equation}
\begin{aligned}
\min & \; c\Vert x-x’ \Vert_2 + \text{loss}_{F,t}(x’) \\
\text{s.t.} & \; x’ \in [0,1]
\end{aligned}
\end{equation}

其中 $c$ 是一个常数,表示损失函数权重为 1 的情况下,对抗样本与原始样本距离的权重应该是多少;$t$ 表示错误分类的标签,$x$ 是已知的可以视为常量,那么唯一的变量就是 $x’$,可以通过一维线搜索的问题求解到 $c$ 的取值。

论文中给出了 $t$ 的选择方法。假设当前为 10 分类任务,正确类别是 0,那么 $t$ 可以取 $1,2,\cdots,9$,那么取哪一个合适呢?换句话说,手写字体识别中,1 和 7 在字迹潦草的情况下容易被认错,那么正确类别是 1 时,对抗样本向 7 靠近,更容易攻击成功。

  • 平均选择,均匀的在错误类别中随机选择
  • 最佳选择,在所有错误类别上进行攻击,选择最容易攻击的
  • 最差选择,在所有错误类别上进行攻击,选择最难以攻击的

CW

从最终输出概率的角度而言,获取最容易攻击的类别和最难以攻击的类别并不难。理解上述公式后,转换到 CW 算法论文中的攻击算法,用公式描述:

\begin{equation}
\begin{aligned}
\min & \; \ D(x, x+\delta) \\
\text{s.t.} & \; \ C(x+\delta) = t \\
{ } & \; \ x + \delta \in [0,1]
\end{aligned}
\end{equation}

$t$ 依然是被错误分类的标签,$C$ 表示分类结果,$D$是距离度量函数,而本文选择的距离是 $L_0, L_2, L_\inf$ 三种范数距离。论文中指出:没有任何一种距离能衡量人类感知的差异,现有距离的度量方式都有或多或少的缺陷,所以本文选取了三种范数距离,但每一种距离也达到了目前最好的攻击效果。未来的工作中,可以好好研究下如何构造合适的距离度量函数。

解非线性优化

回到主题,将攻击公式化后,尝试借助优化的方法去求解问题。但由于 $C(x+\delta)=t$ 具有高度的非线性,所以选择一种更适合优化的表达方式。定义一个目标函数 $f$,当且仅当 $f(x+\delta) \leq 0$ 时,$C(x+\delta)=t$。论文中给出了 7 种 $f$ 的选择,但我懒,准备少写几个,不影响

\begin{equation}
\begin{aligned}
f_1(x’) &= -\text{loss}_{F,t}(x’) + 1 \\
f_2(x’) &= \Big( \max_{i\neq t} \big(Z(x’)_i\big) - Z(x’)_t \Big)^+ \\
f_3(x’) &= \big( 0.5-F(x’)_t \big)
\end{aligned}
\end{equation}

其中,$e^+$ 运算表示 $\max(e,0)$;$-\text{loss}$ 表示交叉熵损失;$F(x’)_i$ 表示神经网络使用 $x’$ 作为输入,产生类别是 $i$ 的概率;$Z(x’)$ 表示 softmax 前的输出,即 $F(x)=\text{softmax}(Z(x))$。其中,效果最好的是第二个。那我们就用第二个公式解释下这些都是什么。

在论文中,$i$ 表示 $x’$ 对应的正确类别;$t$ 表示 $x’$ 对应的错误类别。而 $C(x+\delta)=t$ 表示希望对抗样本被错误分类,此时按照假设,$f(x+\delta) \leq 0$。我们带入$f_2$,$\max_{i\neq t} \big(Z(x’)_i\big)$ 表示除了类别 $t$ 以外,网络以最大概率认为这是第 $i$ 个类,但第 $i$ 类的概率仍然低于第 $t$ 类的概率,以此认为攻击成功。$f_3$ 同理,表示分类错误的概率大于 0.5。因此,优化目标修改为:

\begin{equation}
\begin{aligned}
\min & \; \ D(x, x+\delta) \\
\text{s.t.} & \; \ f(x+\delta) \leq 0 \\
{ } & \; \ x + \delta \in [0,1]
\end{aligned}
\end{equation}

为了便于优化,按着 L-BFGS 的形式就行修改,将约束条件转为目标函数。第一项表示对抗样本要接近原始样本,第二项表示分类越错越好。

\begin{equation}
\begin{aligned}
\min & \; \ \Vert \delta \Vert_p + c f(x+\delta)\\
\text{s.t.} & \; \ x + \delta \in [0,1]
\end{aligned}
\end{equation}

其中,$c$ 的选择是一个坑,如果 $c\to 0$,那么梯度下降时,损失大部分来自图像误差;如果 $c$ 很大,那么分类损失将占主导,两者的损失应该相似。论文中,作者使用实验的方式确定了 $c$ 的最佳取值。

梯度截断

因为对抗样本增加、减去梯度后很容易超出 $[0,1]$ 的范围,所以目前有一些截断的方法:

  • 梯度投影下降,对溢出部分直接截断,把截断后的对抗样本带入下一轮,但容易将截断带来的误差给传入下一轮迭代,这样会让误差越来越大。
  • 梯度截断下降,不直接截断样本,而是将样本的截断代入要最小化的目标函数中,用 $f(\min(\max(x+\delta,0),1))$ 来代替 $f(x+\delta)$,但会带来梯度消失的问题。如当 $x$ 很大时取值为 1,且偏导数取值为 0。但反向传播时,无法更新 $x$。

因此,本文引入变量 $w$,对抗样本可以表示为:

\begin{equation}
x+\delta=\frac{1}{2}\big( \tanh(w) + 1 \big)
\end{equation}

因为 $\tanh$ 的取值范围是 $[-1,1]$,所以 $x+\delta$ 的取值范围是 $[0,1]$,这样就满足了约束,也是一种光滑的截断,也算是本文比较大的创新点吧。

开始攻击

我看论文中,$L_0$ 和 $L_\inf$ 都有一些缺陷,所以重点写 $L_2$ 攻击了。此时的方程为:

\begin{equation}
\begin{aligned}
\min & \; \ \Big| \frac{1}{2}\big(\tanh(w) + 1\big) - x \Big|_2 + c f\big(\frac{1}{2}(\tanh(w) + 1)\big) \\
f(x) & = \max\Big( \max\big(Z(x)_{i:i\neq t}\big) - Z(x)_t, -k\Big)
\end{aligned}
\end{equation}

参数 $k$ 用于控制错误分类的置信度,论文中 $k=0$,即保证被正确分类的概率低于被错误分类的概率。他人实现的程序 3,但是程序的实现和论文的内容有一些出入。论文中,$Z(x)_t$ 表示错误分类。在实现用,用真实标签的概率 $y_\text{true}$ 减去被错误识别的概率 $y_\text{false}$ 中最大的一个。

  • 若这一项大于0,会有损失,表示要降低对真实标签的可信度;
  • 若这一相小于0,取值为0,表示无法识别正确分类。此时没有损失,满足之前的当且仅当 $f(x+\delta) \leq 0$ 时,$C(x+\delta)=t$,也就是,分类错误后,就不用优化这一项了;换句话说,在不满足 $C(x+\delta)=t$ 约束下,是没有目标函数的损失值的。这里的确需要好好理解。

程序 4

  • fgsm_attack.py,使用 fgsm 算法制作对抗样本
  • resnet,使用 ResNet50 制作对抗样本
  • vgg,黑盒攻击,使用 VGG16 作为目标模型
  • eval.py,验证目标模型在对抗样本攻击下的准确率
攻击模型 目标模型 原始准确率 L2攻击
ResNet50 VGG16 94.27 53.63

预训练模型下载

运行

  • python cw_attack.py,制作对抗样本
  • python eval.py,验证目标模型在对抗样本攻击下的准确率

references


  1. 1.https://arxiv.org/abs/1608.04644
  2. 2.https://arxiv.org/pdf/1312.6199.pdf
  3. 3.https://github.com/Harry24k/CW-pytorch/blob/master/CW.ipynb
  4. 4.https://github.com/muyuuuu/Adversarial-Attack/tree/main/CW_L2
感谢上学期间打赏我的朋友们。赛博乞讨:我,秦始皇,打钱。

欢迎订阅我的文章