DVERGE快速理解

简介: 对抗学习相关DVERGE算法快速理解。

DVERGE:Diversifying Vulnerabilities for Enhanced Robust Generation of Ensembles


今天看了这篇论文,大致了解了一下。先讲一下自己的理解,后半部分放翻译(可能存在错误)。

针对对抗攻击有两种常用的解决方法,第一种是对抗学习,即人为设计较小的噪声(约束,保证视觉上无法辨认)加入到图像中,让模型学习处理过的图像,从而增强图像的鲁棒性。第二种是集成学习,通过训练多个子模型,希望子模型之间能够具有互补的效果。但是研究发现在同一数据集上训练的不同架构的模型脆弱性 Vulnerability(也可以翻译成漏洞,我自己直译了)具有一定的重叠,也就是说能误导一个模型的对抗样本,也可以误导别的模型。因此在集成学习上扩展出增强模型输出结果多样性的研究。DVERGE就属于这一范畴。 DVERGE的具体操作主要有两步,第一步是蒸馏出鲁棒特征,第二步是子模型的多样化度量。

第一步鲁棒特征的蒸馏,其实也就相当于在某种约束下,生成攻击样本$z$。对于两组图像,目标图像$(x,y)$和源图像$(x_s,y_s)$,要求生成的攻击样本和源图像$x_s$的差距在一定范围内,并且$z$和$x$分别作为输入送入模型模型$f_i$后,模型的第$l$中输出的特征差距最小。

可以理解成,$z$是一个在$x_s$上加上了噪点,但是经过模型预测后的特征和$x$最相似的一个攻击样本。

第二步是子模型的多样化度量。使用两个模型互相生成的攻击样本在对方模型上的预测结果和目标图像真实标签的交叉熵的和作为代表。攻击样本$z$在视觉上是和$x_s$接近的,如果预测结果和目标图像真实标签$y$的交叉熵越小,其实更说明模型被误导了。所以比较两个模型时,如果计算出的交叉熵的和越小,越能说明两个模型都受到了误导,脆弱性重合度高。最大化交叉熵的过程,就是最大化多样性的过程。由于该过程收敛困难,后被作者修改为最小化攻击样本在模型上预测结果和源图像真实标签的交叉熵。


Abstract

最近研究发现用于图像分类的卷积神经网络显示出了有交叠的(相似的)对抗脆弱性:对抗攻击能使用一些小扰动来误导卷积神经网络,并且这种误导能在同一数据集上训练的不同模型间迁移。对抗训练,作为一种有效提高鲁棒性的方法,能够通过强制模型去学习鲁棒特征来消除一个模型的这种脆弱性。这个过程是比较困难的,通常要求模型具有较高的能力,并且会造成准确率上的损失。另一种方法,集成学习被用来引导子模型产生不同的输出来抵御可传递的对抗样本,使得继承模型对攻击表现更加鲁棒,即使它的子模型并不具有鲁棒性。在这个过程中,只有比较小的准确率损失。然而,目前的集成学习方法在诱导多样性上并不奏效,因此并不能有效地实现鲁棒的集成。

我们提出了DVERGE方法,通过蒸馏不同模型的非鲁棒特征来区别它们的对抗脆弱性,多样化对抗脆弱性来引导对迁移攻击产生多样化的输出。这种新的多样性衡量和训练过程使得DVERGE能实现更高的鲁棒性,当更多的子模型被加入集成模型中去后鲁棒性还会提高。

Introduction

最近对于对抗攻击的研究使得人们对卷积神经网络的内在鲁棒性产生怀疑。这些攻击,通常被称为对抗样本,包含制作人眼无法察觉的但是会对CNN模型造成误导的输入扰动。此外,之前的研究发现对抗样本具有可移植性,能对一个模型造成误导的对抗样本也能误导别的使用同一数据集生成的模型。IIyas推测图像分类数据集中鲁棒和非鲁棒特征的存在。人类可以通过”human-meaningful“鲁棒特征来理解一个图像,这些特征对一些额外噪声不敏感,而深度学习模型更倾向于学习非鲁棒的特征。非鲁棒的特征和输出标签更加相关并且可以帮助提高准确率,但是不具有视觉意义并且对噪声敏感。对非鲁棒性的依赖导致对抗样本利用对抗脆弱性来误导CNN模型。并且IIyas实验性地展示了在同一数据集上独立训练的卷积神经网络都倾向于捕捉相似的非鲁棒特征,显示出交叠的脆弱性。这个特征能从图一的例子中观察到,在同一数据集上训练的集成模型和每个子模型都对对抗攻击的相同维度表现出脆弱性。这种相似性是对抗攻击的高迁移性的关键。

一些扩展研究被用来提高CNN模型的面对对抗攻击的鲁棒性,最显著的是对抗训练。对抗训练在训练过程中最小化CNN模型在实时生成的对抗样本上的损失,这个过程迫使模型去捕捉鲁棒特征而非不是非鲁棒特征,因此可以减少模型的脆弱性。然而,学习鲁棒特征是非常困难的,因此对抗训练经常造成测试数据上的损失的明显增加。

和传统的类似于bagging和boosting的集成方法相似,在具有不同预测的弱学习器上训练一个集成有助于提高整体准确率,最近的研究题出在独立的非鲁棒子模型上训练一个集成,产生不同的输出来对抗可迁移的对抗样本。直观地讲,这样的方法可以抵御黑盒传输攻击,因为一个攻击只有在所有的子模型都收敛到一样的错误预测上时才能成功。这样的集成能假设性地实现高准确率即使训练过程不能排除非鲁棒特征。不同的集成训练方法都被进行了谈久,比如多样化logits的分补或者最小化每个子模型输入梯度方向的余弦相似度。然而实验结果显示这些多样化度量并不能有效地使子模型产生多样化输出,因此相应的集成很难达到期望的鲁棒性。

我们注意到黑盒迁移攻击在现实世界应用中是普遍存在的。高准确率是大家普遍期望的,我们因此寻找一个有效的训练方法来在消除攻击可迁移性的同时保证高准确率。基于对子模型中对手脆弱性原因的仔细探索,我们题出对每个子模型学习到的特征进行蒸馏,并且用蒸馏到的特征的重叠度来衡量子模型的多样性。对抗样本利用了子模型的脆弱性,而子模型之间微笑的重合意味着在一个子模型上成功的对抗样本不太可能误导另一个子模型。因此,我们的方法可以阻碍不同子模型之间的攻击可迁移性,并且多样化模型输出来对抗可迁移的对抗样本。基于这个多样性度量,我们提出了DVERGE方法,使用一个循环的训练过程来进行蒸馏和多样化特征。我们提出的这个集成训练方法有以下贡献:

  1. DVERGE能成功的独立化和多样化每个子模型的脆弱性,这样集成内的攻击可迁移性几乎被消除。
  2. DVERGE能有效提高集成的鲁棒性,而不影响准确率。
  3. DVERGE引导的多样性能会随着子模型数量的增长提高鲁棒性。

如图一,为了保持高准确率而被DVERGE保留在不同子模型中的多样脆弱性组合产生对迁移攻击的集成鲁棒性。我们的方法也能通过对抗训练目标来增强,从而得到一个既能满足白盒鲁棒性又能保持高准确率的集成。据我们所知,这个工作是第一个利用蒸馏特征来训练多样化集成并定量地将它和对抗攻击的鲁棒性联系起来的方法。

Method

Vulnerability diversity metric

最近的研究表明深度学习模型捕捉到的非鲁棒特征对额外噪声高度敏感,这是造成卷积模型对抗脆弱性的主要原因。基于这种观察,我们提出了一个基于卷积网络蒸馏过的非鲁棒特征来孤立化卷积模型的脆弱性的方法。以在数据集$D$上训练的卷积模型$f_i$为例,我们考虑一个目标 输入-标签对$(x,y)\in D$和另一个随机选择的独立 source 对$(x_s,y_s)\in D$。相对于source图像$x_s$,输入图像$x$在卷积模型第l层得到的蒸馏特征能被用一个特征蒸馏目标表示:
$$ x^{\prime}_{f^l_i}(x,x_s)=\underset{z}{\mathrm{argmin}}||f^l_i(z)-f^l_i(x)||^2_2,s.t.||z-x_s||_{\infty}\leq\epsilon $$
其中$f^l_i(\cdot)$代表第l个隐藏层激活函数之前的输出。这个受限的优化目标能够被PGD优化。蒸馏到的特征期望视觉上和$x_s$相似,但是是作为$y$进行分类的,因此$x^{\prime}_{f^l_i}$和$x$中会提取出相同的特征。视觉相似度和分类结果的不匹配显示在对$x$进行分类时,$x^{\prime}_{f^l_i}$反映了模型的对抗脆弱性。因此我们将两个模型$f_i$和$f_j$之间的脆弱性多样化。
$$ d(f_i,f_j):=\frac{1}{2}E_{(x,y)(x_s,y_s),l}[L_{f_i}(x^{\prime}_{f^l_j}(x,x_s),y)+L_{f_j}(x^{\prime}_{f^l_i}(x,x_s),y)] $$
$L_f(x,y)$代表着模型f在输入-标签对$(x,y)$上的交叉熵损失。这个期望是独立一致的对$(x,y)\in D,(x_s,y_s)\in D$和层数$l$的随机选择。因为蒸馏得到的特征和输入图像具有一样的维读,这公式能在同一数据集上训练的任意架构的模型使用。$x^{\prime}_{f^l_i}(x,x_s)$视觉上和$y$无关,当$f_j$在x的非鲁棒特征上的的脆弱性和$f_i$的重叠时,交叉熵损失会很小。

公式一中的特征蒸馏过程可以被看作一个从源图像$x_s$和目标标签$y$生成对抗样本的过程。公式二中定义的多样性可以当作在两个模型中迁移的对抗样本攻击成功率,类似于交叉熵损失和训练准确率的关系。

Vulnerability diversification objective

一个对抗工具不太容易在具有高度脆弱性多样化的模型间传递的。我们提出应用公式二中定义的度量作为目标,在集成训练中促进子模型的多样化并阻断迁移攻击。公式三展示了一个直接的方法来

将多样性度量合并到训练目标中。对于每一个子模型$f_i$,我们希望在集成中最大化它和别的所有的子模型的多样性并且最小化原始的交叉熵损失。
$$ \underset{f_i}{\mathrm{min}}E_{(x,y)}[L_{f_i}(x,y)]-\alpha\sum_{j\ne i}d(f_i,f_j) $$
由于$d(f_i,f_j)$没有上限,因此直接最大化它可能导致发散,所以这个公式被我们改为:
$$ \underset{f_i}{\mathrm{min}}E_{(x,y)}\Big[L_{f_i}(x,y)+\alpha\sum_{j\ne i}E_{(x_s,y_s),l}[L_{f_i}(x^{\prime}_{f^l_j}(x,x_s),y_s)]\Big] $$
这个公式不仅鼓励脆弱性多样化的提升并且也增强了正确分类的能力。

公式最终被简化为:
$$ \underset{f_i}{\mathrm{min}}E_{(x,y)(x_s,y_s),l}\sum_{j\ne i}L_{f_i}(x^{\prime}_{f^l_j}(x,x_s),y_s) $$

DVERGE training routine

我们首先随机初始化和预训练所有的子模型,这样它们的特征空间会比较有用,我们不用费时间来多样化不相关的特征。随后,在多样化训练阶段,对于每一批batch训练数据,我们随机选择另一批的source data并且使用它们来进行非鲁棒特征的蒸馏。在特征蒸馏阶段,使用PGD优化机制。循环训练被应用在每个随机梯度下降步上,每个子模型使用来自其余所有子模型的蒸馏图像和它们的源标签。这个训练过程在B个批次上重复E个epoch。每个Epoch中层数$l$是随机选择的来防止过拟合。

相关文章
|
IDE 编译器 开发工具
Dev C++下载地址和安装教程(图解版)
Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
26560 0
Dev C++下载地址和安装教程(图解版)
|
9月前
|
机器学习/深度学习 存储 自然语言处理
TCN时间卷积网络
翻译:《Sequence Modeling Benchmarks and Temporal Convolutional Networks 》
212 0
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习实践篇 第五章:模型保存与加载
简要介绍pytorch中模型的保存与加载。
110 0
|
9月前
|
机器学习/深度学习 PyTorch 区块链
深度学习原理篇 第十章:Pix2Seq
简要介绍pix2seq的原理和代码实现。
250 1
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习原理篇 第一章:transformer入门
简要介绍词向量和transformer原理。
173 1
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习实践篇 第三章:模型与模型的搭建
主要介绍了pytorch中nn.Module()类和模型搭建
173 0
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习实践篇 第二章:transforms
简要介绍pytorch中常用的transform方法。
212 0
|
9月前
|
机器学习/深度学习 自然语言处理 计算机视觉
深度学习原理篇 第二章:vision transformer
简要介绍了vision transformer的原理和实现。
144 0
|
9月前
|
机器学习/深度学习 存储 PyTorch
深度学习实践篇 第一章:数据集读取和构建
简要介绍cifar数据集的使用和pytorch数据集的构建。
418 0
|
9月前
|
存储 并行计算 PyTorch
SSD-pytorch训练过程全记录
20年文章同步一下。
129 0