0%

一些对抗样本去噪算法

忙完了其它的,还是要回归科研做好整理,相当于论文笔记吧。对抗样本去噪算法算是告以段落,或者说叫对抗样本提纯。本文总结了一些近几年的、思路还行结果也还好的对抗样本去噪算法,就相当于写个类似的综述了,注意,并非详解。优缺点仅是个人分析,其实论文读多了或者看了代码,总会有一些想法。包含以下论文:

  1. Comdefend: An efficient image compression model to defend adversarial examples, CVPR 2019
  2. Feature denoising for improving adversarial robustness, CVPR 2019
  3. Defense against adversarial attacks using high-level representation guided denoiser, CVPR 2018
  4. A Self-supervised Approach for Adversarial Robustness, CVPR 2020
  5. Denoised Smoothing: A Provable Defense for Pretrained Classifiers, NIPS 2020
  6. Stochastic Security: Adversarial Defense Using Long-Run Dynamics of Energy-Based Models, ICLR 2021
  7. Online Adversarial Purification based on Self-Supervision, ICLR 2021
  8. Adversarial Purification with Score-based Generative Models, ICML 2021

ComDefend

来自论文:Comdefend: An efficient image compression model to defend adversarial examples, CVPR 2019。

  • 核心思想,在目标模型之前训练一个编码器和解码器,编码器的目标是提取图像的结构信息,移除冗余信息;解码器的目标是重构输入的图像,移除扰动信息。
  • 损失函数,对于编码器,使用更多的 0 来编码图像,因此损失为 $\lambda \Vert Com(\theta_1, x) \Vert^2$,使其尽可能的小;对于解码器要尽可能的重构原始图像,因此损失为 $\Vert Rec(\theta_2, Com(\theta_1, x)+\phi) -x \Vert^2$,$\phi$ 是高斯噪音。最终的损失是两者相加,两个模型的参数是同时训练和更新的。但是我在复现的时候,发现 $\lambda = 0.0001$,也能猜出这篇论文的大概效果。

对抗样本在输入层的扰动其实只是很小的一部分,微小的扰动会在模型隐层无限放大。这篇论文只是在输入层去除对抗样本的扰动信息,没有考虑在模型隐层去除扰动信息。

Feature Denoising

来自论文 Feature denoising for improving adversarial robustness, CVPR 2019。如下图所示,论文注意到了对抗样本在模型高层的巨大差异信息,所以,选择了在模型的高层对数据进行去噪,而不是输入层。

论文选择的去噪方式也很简单,对于特征图 $y$,对于一个区域 $L$,重新计算其表示:

\begin{equation}
y_i=\frac{1}{C(x)}\sum_{j \in L} f(x_i, x_j) \cdot x_j
\end{equation}

其中,$f(x)$ 有多种选择,论文中给出了:高斯函数、内积、和一些滤波器。

HGD

来自论文:Defense against adversarial attacks using high-level representation guided denoiser, CVPR 2018。

核心思想:基于干净样本和对抗样本在模型高维的差异来指导去噪器的训练。设 $x$ 为干净样本,$x^\star$ 为对抗样本,$\hat{x}$ 为对抗样本去噪后的样本。论文选择 U-Net 结构对样本进行去噪,输入为 $x^\star$,输出为同等大小的 $-d\hat{x}$,那么 $\hat{x}=x^\star - d\hat{x}$,使用 $L_1$ 范数作为 $\hat{x}$ 和 $x$ 的损失。第二个损为 $f_l(x)$ 与 $f_l(\hat{x})$ 的 $L_1$ 范数,即去噪样本和干净样本在模型第 $l$ 层的差异应尽可能接近。

我觉得这篇论文的思想是不错的,所以在我的工作中也借鉴了这篇论文的思想。分别在模型的输入层和隐层对对抗样本进行去噪,不过其他内容则不一样了。

NRP

来自论文:A Self-supervised Approach for Adversarial Robustness, CVPR 2020。这篇论文我也复现了,讲真复现结果很差。一方面是论文中给出的参数不合理,一方面是论文并没有对一些东西解释清楚,最重要的是不仅没给代码,还没说怎么实现他的代码,也没有说某些实验参数,所以我只能按照论文描述来实现代码了。那为什么还要写呢?因为这篇论文借鉴 GAN 的思想来去除扰动,还是感觉有一点点新意的。

作者定义一个提纯网络 $P$ 用于去除噪音,定义判别网络 $C$ 来判断当前样本是对抗样本还是干净样本,定义 backbone $F$ 来提取对抗样本和干净样本的特征差异生成自监督扰动,将扰动叠加至干净样本生成对抗样本,作为 $P$ 的训练数据。$P$ 去噪后传送给 $C$,以此来定义 $P$ 去除扰动的好坏。损失函数由三个部分组成,最终带权相加组成最终的损失函数:

  • 对抗损失是 $P(\hat{x})$ 和 $x$ 在判别网络 $C$ 上的相似度
  • 特征损失为 $F(x)$ 和 $F(\hat{x})$ 的欧式距离
  • 像素损失为 $P(\hat{x})$ 和 $x$ 的欧氏距离

Denoised smoothing

这篇论文来自 Denoised Smoothing: A Provable Defense for Pretrained Classifiers, NIPS 2020。

写这篇论文并不是因为这个论文发表的等级高、时间新。而是因为,我发现一些对抗去噪采纳了集成的思想,这篇论文就是其一。借助多个分类器的投票结果指导去噪器的训练,三个臭皮匠,赛过诸葛亮,何况分类器呢?如果你对集成感兴趣,可以考虑沿着这个方向做下去。这个论文还算是集成思想中比较保守的了。

但是呢,我是比较反感堆叠模型这样的方案的,这就相当于应该花 3 年去准备高考,而你花了 21 年去准备,效果虽然好,但是成本太大了。应该设计算法去提高一个模型的准确度,而不是多个模型投机取巧,另外我也没这样大规模的算力。

这篇论文写了一个单独的博客,也给出了程序,思路还是比较清晰的,在损失函数上,先用去噪后的图像和原始图像的 MSE 作为损失,再用去噪后的图像和原始图像在高维的差异作为损失微调。

EBM-defense

论文来自 Stochastic Security: Adversarial Defense Using Long-Run Dynamics of Energy-Based Models, ICLR 2021。模型啥的也比较简单,但是我比较反感堆叠模型的操作,丑拒这样的 idea。

SOAP

来自论文 Online Adversarial Purification based on Self-Supervision, ICLR 2021。这篇论文在模型、算法还是有一定创新度的,也是我重点复现的论文之一。不过这篇论文虽然有对抗样本提纯的概念,但严格意义来说,属于对抗训练的论文,应为这个算法会修改目标模型的参数。

  • 在训练阶段,设计两个损失,第一个损失是目标模型的分类损失,第二个损失是子监督扰动的损失,企图网络能够去除自监督扰动,以此抵御对抗样本的攻击。
  • 在推理阶段,通过子监督扰动损失的指导,去除对抗样本的扰动信息,之后再进行推理。(具体可以看代码)

论文的目标损失是:

\begin{equation}
\min_\theta L_{\text{cls}}((g\circ f)(x;\theta_{\text{enc}}, \theta_{\text{cls}}), y) + \alpha L_{\text{aux}}((h\circ f)(x;\theta_{\text{enc}}, \theta_{\text{aux}}))
\end{equation}

$g$ 是分类器的前部分,$h$是辅助分支的模型,不过实际代码中这俩被合二为一了,也就是,一个神经网络有两个损失。

对于 $L_{\text{aux}}$ 损失,论文给出了三种选择,在实现时选择其中的一种即可。

  1. 叠加噪音,即图像叠加噪音后,还是之前的图像。这里的损失使用了叠加噪音前后的 MSE 差异。
  2. 图像旋转,即图像旋转后,还是之前的图像。这里的损失使用了旋转后图像与真实标签的交叉熵作为损失。
  3. 标签持续性,即图像经过两种数据增强后,这两组图像的标签一致。这里的损失是两种数据增强后的 MSE 差异。

在去噪阶段,论文提出了多部去噪,一定程度弥补了之前单步去噪的缺陷:

ADP

来自论文 Adversarial Purification with Score-based Generative Models, ICML 2021。我复现了这篇论文,训练缓慢、预测缓慢,且不提供训练代码只提供预测代码,预测代码和论文算法描述不一致。前面的模型是别人的,如果没看到这一点,我都不知道怎么复现论文。如果一定有评价的话,那就是:呵,tui。

模型来自「Improved techniques for training score-based generative models」这篇发表在 NIPS 2020 的论文,所以网络结构直接看这篇论文的代码即可。损失函数的设计如下(前面那堆推导没啥用):

\begin{equation}
L(\theta, \sigma) = \mathbb{E}_{q(\tilde{x}|x)p_{\text{data}}(x)}[\frac{1}{2\sigma^2} \Vert \tilde{x} + \sigma^2 s_\theta(\tilde{x}) -x \Vert^2]
\end{equation}

$q(\tilde{x}|x)$ 是以 $x$ 为中心,以 $\sigma$ 为均方差生成的噪音样本。这个损失的意思是,期望 $s_{\theta}$ 能够有效去除 $\tilde{x}$ 上含有的噪音信息,并且和原始图像差不多,以此来抵御对抗样本的攻击。

预测阶段极度风骚,来看伪码:

一步去噪不到位,居然用多步去噪……这样与其他算法对比并不公平,这就像之前举的参加高考的例子。当然这不是最离谱的,最离谱的是,代码和这个算法毫不相关。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for i in range(max_iter):
labels = torch.ones(x_pur.shape[0], device=x_pur.device)
labels = labels.long().to(config.device.ebm_device)
grad = network_ebm(x_pur, labels) # Get gradients
# Get adaptive step size
x_eps = x_pur + lr_min*grad
#print(torch.mean(torch.norm(grad.view(grad.shape[0],-1), p=2,dim=1)).item(), flush=True)
grad_eps = network_ebm(x_eps, labels)
z1 = torch.bmm(grad.view(grad.shape[0], 1, -1), grad_eps.view(grad_eps.shape[0], -1, 1))
z2 = torch.bmm(grad.view(grad.shape[0], 1, -1), grad.view(grad.shape[0], -1, 1))
z = torch.div(z1, z2)
if mode=="attack":
step_lambda = config.attack.attack_lambda
elif mode=="purification":
step_lambda = config.purification.purification_lambda
else:
sys.exit(0)
step_size = torch.clamp(step_lambda*lr_min/(1.-z), min=min_step_lr, max=min_step_lr*10000.).view(-1)
cont_purification = torch.logical_and(cont_purification, (step_size>config.purification.stopping_alpha))
if torch.sum(cont_purification)==0:
break
step_size *= cont_purification
x_pur_t = x_pur.clone().detach()
x_pur = torch.clamp(transform_ebm_to_raw(x_pur_t+grad*step_size[:, None, None, None]), 0.0, 1.0)
step_sizes.append(step_size)
images.append(x_pur)

结语

当然,还有一系列的其他算法,如 Feature squeezing, JPEG Compressionm,TVM 等算法,我感觉不如之前的论文有意思,所以没有详细的写,读者有兴趣的话可以自己去看一看。

接下来,会看一些攻击方向的经典论文而后复现,大概一周吧,之后会转入全新的领域:对抗训练,偏数据分布的处理,如果有兴趣欢迎联系(是妹子就更好了(误。

感谢上学期间打赏我的朋友们。赛博乞讨:我,秦始皇,打钱。

欢迎订阅我的文章