对抗攻防个人总结
相关概念介绍
无目标攻击:使得神经网络错误识别即可。
有目标攻击:使得神经网络不仅分类错误,还错误的分类到攻击者指定的类别。
白盒场景:可以获取分类模型的权重,logit层输出,softmax层输出,隐藏层,激活函数等信息。
黑盒场景:与白盒对立的场景,不能获取网络的信息。
迁移性: 对抗样本可以同时攻击多个不同的分类网络(包括白盒网络与黑盒网络)。
对抗样本存在的原因
Szegedy 等人认为是因为深度网络的非线性导致的,而 Goodfelllow 等人认为并非是非线性,而是深度神经网络的线性才是导致对 抗样本出现的原因。目前关于对抗样本存在的原因有三种解释:流形中的低概率解释、线性解释、分类边界的角度倾斜。
低概率区域解释认为神经网络在学习数据分布是只学习了一部分局部区域,对抗样本存在于整个数据分布中的低概率区域。Szegedy 等人通过一个简单的实数分类问题表示对抗样本的存在性是合理的: 如图假设有一个可以对实数集中有理数无理数分类的二元分类器 C,对于一个样本 x,如果它是正无理数和负有理数则属于正 (+) 类,如果它是负无理数和正有理数则属于负 (-) 类。在整个实数空间中,无理数由于较有理数要多的多,神经网络只能学习到无理数的分布。有理数虽然数量上比无理数少,但在整个数据空间是稠密分布的。这些有理数的存在就像对抗样本一样,神经网络可能会将其与无理数区分为相反的符号类别。
Goodfelllow 等人认为给定一张图片 𝑥 和对抗样本 𝑥 ̃= 𝑥 + 𝜂,其中扰动 𝜂 满 足约束 〖∥ 𝜂 ∥〗_𝑖𝑛𝑓,𝑤 表示神经网络权重,有如下假设:
假设神经网络的激活函数为线性的,对抗样本扰动的存在使得神经网络的输出由原本的 f(𝑤^T · 𝑥) 增加了 f(𝑤^T· 𝜂),由于扰动 𝜂 = 𝜖𝑠𝑖𝑔𝑛(.) 满足 𝑙_𝑖𝑛𝑓 范数约束,若权重向量 w 的维数是 n,每一维的平均值为 m,则扰动的存在可以使得神经网络的输出值增长 𝜖𝑚𝑛。尽管扰动可能很小,但高维的权重矩阵的存在可以使得激活函数的值 发生很大的变化,从而改变分类结果。因此他们得出结论,若一个线性模型的输入有很高的维数,那这个线性模型就存在对抗样本问题。
Tanay 等人认为对抗样本的存在是由于分类决策面与分类的样本流形 (manifold) 之间虽然很贴近,但存在一定的角度,如图 2.2所示,红色为分类决策面,黑色为样本的流形。分类决策面将其上方的样本分类为 “o”,下方的分类为 “x”。两种类别中的”o” 添加细小的扰动就可以穿透到红色分界面以下,就会被分类为 “x”。这个 解释在高维空间中更加合理,当分类决策面与数据集流形贴切但存在夹角,添加随机扰动恰好使得其穿透过“红色分界面” 的概率很低,但是这可以解释为什么无论是线性模型还是非线性模型,都可以找到对抗样本。
符号定义
攻击算法介绍
注:以下方法可以直接根据名字通过搜索引擎搜索得到
Box-Constrained L-BFGS(Szegedy et. al.等人2013年第一次提出对抗样本)
以上描述的优化问题难以求解,转化为以下的近似优化问题,并使用L-BFGS方法求解:
Fast Sign Gradient Method(Ian Goodfellow等人提出)
FGSM是一种单步(one-step)对抗攻击算法,包括有目标和无目标攻击两种方法,无目标攻击通过最大化以下损失函数获得:
有目标攻击通过优化以下损失函数:
具体的来说,FGSM的无目标攻击通过使图片远离原始类别,而有目标攻击通过缩短与目标类别的距离,由于是单步攻击,这种方法非常的迅速。
Deep Fool
一种探索分类模型边界的白盒攻击方法,这种方法通过多次迭代的方法将对抗样本向着分类超平面外推动,这种方法被证明在相同或更小的图片噪声的情况下,有着比FGSM更好的成功率。
Jacobian-based Saliency Map Attack(JSMA)
JSMA是一种L0攻击方法,这种方法通过贪心的方式获的对模型决策影响最大的像素修改,为了构建一个显著图,该算法每次迭代仅仅修改一个像素。
Projected Gradient Descend(PGD)
PGD是一种基于FGSM的迭代攻击方法,这种方法将扰动投影在一个范围。
Carlini & Wagner attack (C&W)
是一种经典的基于优化的方法,这种方法提出了三种不同正则的攻击方法(𝑙0,𝑙2,𝑙∞),不像基于梯度的方法在每一步中限制扰动大小,这种方法将生成对抗样本的问题引入寻求最小扰动的问题。由于这种算法中存在优化部分参数,这种方法极其缓慢。而且这种方法不具备黑盒迁移性,但是这种方法是一种非常强的白盒攻击方法且可以抵御防御性蒸馏方法。
Universal Adversarial Perturbations(UAP)
这种对抗攻击方法不依赖于特定的输入,UAP寻求适用于所有训练集的扰动,即一个扰动可以叠加在任意图片上;这种方法基于PGD算法,不同于PGD将一张对抗样本推出分类边界,UAP针对所有图片,将所有图片的扰动累加,并投影到一个正则球里。
Objective Metrics and Gradient Descend Algorithm (OMGDA)
这种算法和PGD十分相似,不同于PGD采用启发式的方法获得修订的步长,这种方法的步长是最优的,该步长由扰动大小决定并且随着时间改变。
Unrestricted Adversarial Examples with Generative Models (UAEGM)
UAEGM是一种使用AC-GAN生成的对抗样本,这种对抗样本不具备传统对抗样本的那种明显的纹路或噪声, UAEGM具备无目标和有目标攻击两种方法,且有目标攻击具有22.9%的黑盒迁移性。
第一行为带扰动的对抗样本,第二行为论文提出的无限制对抗样本
Practical Black-Box Attacks (PBBA)
由于不能获取模型的结构与梯度信息等,这种方法通过在有限的query次数内训练一个替代模型,使得替代模型与未知的黑盒模型接近,最终攻击替代模型得到对抗样本。
Query-Efficient Black-Box Attacks
一些黑盒场景不仅不能获得模型结构与梯度等信息,甚至对query次数有限制。算法将查询集中在输入x的邻域,然后对模型的输出进行采样。
单像素攻击 (One Pixel Attack).
Su 等人提出了一种极端的对抗样本攻击方法, 他们通过修改一张图片的一个像素点获得对抗样本。他们声称成功骗过三种不同的 网络模型,在 70.97% 的测试图像上,每幅图像只改变一个像素。他们通过使用差分 演化的概念获得对抗样本,对于一张干净图片,他们对任意像素创建一个向量,这个向量包含 xy 坐标轴信息和 RGB 值,然后,他们随机修改向量的元素来创建子元素, 使得子元素在下一次迭代中与父元素竞争,同时使用网络的概率预测标签作为适合度标准。最后剩下的子元素用来改变图像中的像素。
UPSET and ANGRI
Sarkar 等人提出了两种黑盒攻击方法 UPSET(Universal Perturbations for Steering to Exact Targets) 和 ANGRI(Antagonistic Network for Generating Rogue Images for targeted fooling of deep neural networks)。UP SET 生成的是图像不可 知的扰动,这种生成的扰动添加到任意一张图片上都可以使得分类器识别错误。而 ANGRI 生成的是图像特定的扰动。
Ghost Network
论文的核心思想是利用dropout、和增加残差模块的随机性来生成一系列网络,网络集成的时候也采用随机选择的方式。
Zeroth Order Optimization Based Attack(ZOO)
这种方法假设可以获得输入数据和模型的置信度,这种方法先估计一个梯度值,然后使用牛顿法或者adam等优化方法获得最优梯度,将梯度叠加到图片上后输入模型,成功攻击后停止,否则继续迭代估计梯度。
基于优化的方法
Liu 等人实验的出基于梯度的方法普遍不具备有目标黑盒迁移性,他们提出使用基于优化的方法(最小化损失得到最优参数等,如CW)来获得对抗样本,他们的集成多个网络的方法解 决以下问题获得可迁移的对抗样本:
Liu 等人对其集成方法使用的多个神经网络的决策边界进行了可视化,结果显示对于参与攻击的多个集成模型,它们的决策边界很贴近。对于未知的黑盒模型 RESNET101,同样存在一个可以误导其分类结果的非空区域,但是这 个区域相比其它模型来说要小的多,这大概解释了为什么难以获得有迁移性的对抗样本。
动量迭代快速梯度符号法 (MI-FGSM)
在 2017 年的 NIPS 对抗样本攻防赛上,来自清华大学的团队提出通过在迭代快速梯度符号法 (IFGSM) 中集成动量, 来帮助梯度方法稳定梯度更新方向和跳出局部最优。
多样性输入方法 (DIM)
通过在多次迭代中随机翻转和填充输入图片来获得具有多样性的噪声。这种方法可以集成到任何基于梯度的方法并且可以提升黑盒迁移性。
Translation-Invariant Method (TIM)
通过使用一个预先定义的高斯核对一组输入图片产生的梯度进行卷积。该论文发现不同的防御方法对对抗样本有不同的判别区域,通过高斯卷积可以获得很好的黑盒迁移性。
NESTEROV ITERATIVE FAST GRADIENT SIGN METHOD(NI-FGSM).
NI-FGSM提出使用 Nesterov Accelerated Gradient替代动量的方法. 不同于 MI-FGSM, 这种方法来提前获得下一次迭代的梯度信息. 这意味着 NI-FGSM 可以更 好的向前看和更快的跳出局部最优. 他们证明了这种方法可以获得很好的迁移性 (无目标).
人脸对抗攻击
Delving into the Adversarial Robustness on Face Recognition
本文作者提出了一种针对人脸关键点的攻击方法,可以提升对抗样本的迁移性。针对现有的人脸识别模型,作者评估了这些模型在不同攻击下的鲁棒性,探讨了不同模型结构和不同损失等对模型鲁棒性的影响。
人脸识别模型
由于CNN网络的发展,人脸识别模型最近取得了很大的进步。DeepFace和DeepID将人脸分类问题看作一个多分类问题,并且使用softmax损失进行监督性的训练。目前最优的方法则将人脸识别问题看作一个度量学习问题,并且通过基于边界的损失函数来学习具有判别性的特征。triplet 损失和center loss被提出来用于增加不同类别特征在欧氏边界中的距离。另外, SphereFace使用angular softmax 损失,CosFace使用大边界cosine损失,ArcFace则使用additive angular margin损失来提升angular空间的边界区分,以此获得好的分类效果。
人脸识别数据集
作者使用LFW数据集和YouTube Faces Database (YTF)数据集来评估模型,还有一个叫做Celebrities in Frontal-Profile (CFP)的数据集。
攻击方法
一些常用的用于攻击普通分类任务的(imagenet、cifar数据集)攻击方法,诸如FGSM、BIM、MIM、C&W等攻击方法,都可以用于攻击人脸识别模型。相关的研究发现,不同的模型(防御模型和纯净模型)对于不同的图片有着不同的判别区域(关注区域),而一些白盒攻击方法生成的对抗样本的噪声和这些判别区域高度相关。而对于一般的纯净模型,它们对于一张图片有着几乎相似的判别区域,这就使得针对寻常分类任务的攻击可以很容易的迁移到多个模型。然而,作者发现这对于人脸分类模型是不适用的,一些SOTA方法的人脸识别模型有着不同的注意力图。因此由于对抗攻击往往关注白盒模型的局部判别区域,因此在情况不同的人脸识别任务中,难以获得具备迁移性的对抗样本。(实际上,寻常分类任务中,作者这里指的应该是无目标场景多个模型具备相似的判别区域。有目标攻击场景,多个模型的判别区域应该是不同的。)
总之,为了弱化这种不同模型有着不同判别区域对于迁移性的影响,作者提出了针对人脸关键点的攻击:landmark-guided cutout (LGC):攻击方法的具体内容很简单,提取出人脸关键点,对随机选取的部分关键点区域在每次攻击迭代过程中用一个小的补丁覆盖,使得攻击方法在攻击过程中减少对关键判别区域的关注。
这种方法相当于一种针对人脸关键点的数据增强,解决这种判别区域对迁移性影响的还有添加高斯滤波,平滑攻击噪声的。当然,高斯平滑的攻击不属于本文,是一种叫做TIM的方法。
一些作者的发现
首先,目前人脸识别的主流方向是从度量空间中学习更多的有区别的特征,例如ArcFace和CosFace,并不能大幅度提高鲁棒性。
其次,我们观察到模型架构是一个更关键的因素,轻量级的模型,例如MobileNet和ShuffleNet,在所有白盒和黑盒设置下比那些正常权重的模型有更差的防御性能。因此,选择合适的更大的网络结构作为backbone似乎更有效的鲁棒性。
第三,我们观察到具有相似结构的模型在可转移性方面具有较高的攻击成功率。此外,类似的训练方法也可以相互转移,如CosFace, ArgFace, Am-softmax。
第四,不同的范数限制噪声的攻击的泛化能力是相似的,没有太大的区别。而有目标攻击的难度要高于无目标攻击,这和寻常分类任务是一致的。
结论
这篇文章的攻击方法较为简单,是在攻击过程中进行数据增强,容易集成到现有的攻击方法中,且能提升迁移性。一些作者的发现可以对于人脸识别模型的设计有所帮助。
Fast Geometrically-Perturbed Adversarial Faces
通过几何变换的方式(平移,尺度变换)的方式改变人脸的几何特性,这种移动像素的方式不具备快速梯度符号法的那种稠密的扰动。
Φ是一个关键点检测器(landmark detector ),𝑃是一系列二维关键点集合,𝑓是关键点的空间位移向量( ),T表示整个对原始图片的空间转换。
攻击方法一:fast landmark manipulation method (FLM)
优化以下第一行的损失函数,第一项交叉熵损失最大化对抗样本与原始类别的距离,第二项约束空间位移向量(
),以减少因为像素位移带来的人脸失真。第二项作者使用了FGSM的方法来寻找一个局部最优的位移场𝑓,即
。
第二种方法: grouped fast landmark manipulation method (GFLM)
第一种方法的位移场由于是针对全部像素的,因此仍然会带来很大的失真,为了解决这个问题,文中提出了第二种方法,对人脸关键点分组(如右图所示):将眼睛,鼻子,嘴等相关关键点分别分为一组。并且人脸的位移仅仅是尺度变换和位移,不包括旋转。
图片左下角为分为正确类别的置信度,最右侧两幅图分别为FLM的和GFLM两种不同方法的位移场𝑓
防御方法-对抗训练
Goodfellow等人首先提出在数据集中加入FGSM生成的对抗样本,这些对抗样本在混合进训练集以后被标注为True Label , (x ‘ , y)。后来的研究证明这种防御过拟合于FGSM攻击算法,且容易受到迭代攻击的影响。
Madry等人在Towards Deep Learning Models Resistant to Adversarial Attacks中将神经网络的鲁棒性问题转化为一个鞍点问题,即很强的对抗攻击(PGD)可以获得公式中损失的内部最大,而后续的训练通过调整模型参数可以使得损失外部最小。在他们的文章中提出,模型容量越大越能抵抗对抗攻击。
Certifying Some Distributional Robustness with Principled Adversarial Training(很复杂)提出使用拉格朗日松弛方法解决外部最大问题,他们提出在对抗训练的时候在损失函数中加入拉格朗日公式惩罚项。
Improved Network Robustness with Adversary Critic提出使用GAN的判别器可以用来检测未知的对抗样本,可以抵御黑盒攻击,不过本文仅在MNIST数据集进行试验。
不同于一些对抗训练只用对抗样本进行训练,Adversarial Logit Pairing提出将对抗样本与原始样本混合,他们称之为mixed mini-batch PGD(M-PGD)。在一般对抗训练的损失函数𝐿(Γ, 𝜃)的基础,他们还添加了一个叫做adversarial logit pairing的损失来最小化真实样本与对抗样本logits输出的距离。
Me-net: Towards effective adversarial robustness with matrix estimation对获得的对抗样本做了以下处理:以概率p保留像素,以概率1-p将像素置0,然后对处理后的图片进行重构得到最终的训练样本。
Robust Local Features for Improving the generalization of Adversarial Training观察到没有对抗训练的模型相比对抗训练后的模型能获得更多的局部特征信息。他们因此提出了一个方法来训练模型,他们提出了Random Block Shuffle的方法,来随机化图片内部的特征。
Misclassification Aware Adversarial Training提出那些初始就被模型误分类的干净图片,在经过对抗攻击后对模型的鲁棒性影响最大。
Input Transformation Methods提出使用转化后的图片来训练网络,这些转化包括减少位深、JPEG压缩、总方差最小化、最小误差法或者以上这些方法的集成。后续还有一些旋转,缩放,降噪等方法被提出用来对对抗样本进行处理,然后进行对抗训练。
Towards DNN Architectures Robust to Adversarial Examples提出使用Contractive Autoencoder,对反向传播中关于每一层的偏导数的损失增加了一个惩罚,他们的方法虽然仍然会受到对抗攻击的影响,但结果显示对抗样本需要更大的扰动才能攻击成功。
Input Gradient Regularization提出的Parseval网络是一种分层正则化方法,可以将网络的可变性降低为输入x中的小扰动。
Robust Large Margin Deep Neural Networks
作者通过分类边界分析了模型的泛化误差,在他们的工作中,他们首先推导出泛化误差的范围,并将这些边界表示为模型的雅可比矩阵(JM)的依赖。在他们的工作中,显示了结构的深度并不影响泛化误差边界的存在,条件是关于输入的雅可比矩阵的范数有界。根据这一定义或结论,他们推出了一种权重批归一正则化项。
Parseval networks是一种分层正则化方法,用来降低网络对关于输入的微小扰动的变化。这项工作的出发点是DNN是由多层函数组成的。为了控制输出的可变性,他们建议在每个隐藏层(对于完全连接、卷积等)保持较小的Lipschitz常数。Ros等人基于梯度正则化的相同原理,提出使用这种技术来提高深度神经的鲁棒性和可解释性。他们假设,通过训练一个模型,使其具有更平滑的输入梯度和更少的极端值,这不仅会使模型更具有可解释性,而且更加鲁棒。
λ定义了惩罚项的长度,此更新的目标是确保如果任何输入发生轻微变化,预测之间的KL散度不会发生显著变化。
DeepDefence是一种基于对抗样本扰动的正则化技术,
https://github.com/ZiangYan/deepdefense.pytorch
TRADES
https://github.com/yaodongyu/TRADES
在他们的工作中,他们推导了DNN模型的自然误差和边界误差的可微上界。为了推导出这样的边界,他们将对抗样本产生的误差(称为鲁棒误差)分解为两部分:1 自然误分类,2 边界误差。基于这些边界,提出了一种称为TRADES的防御机制。该算法的核心仍然是最小化自然损失,从而提高了模型的准确性,但同时,它引入了一个正则化项,导致决策边界远离训练数据点。
Metric Learning for adversarial Robustness
作者通过学习关于输入在神经网络中的隐层表示的距离度量,他们在研究中发现,PGD攻击将对抗样本的隐表示推向了错误的类别。对抗样本的隐表示在错误的类别中扩散,并且与错误类别混合的不可区分。他们提出了一种TLA损失,克服了对抗样本在错误类别上的变化。TLA的工作原理是近似来自同一类的样本,如果它们是对抗样本或者干净图片,则它们之间是互相独立或者无关的,因此扩大各自与其他类别的边界距离。
Adversarially Robust Transfer Learning
作者通过使用PGD攻击方法用对抗训练的方式训练了一个𝑊𝑖𝑑𝑒𝑅𝑒𝑠𝑁𝑒𝑡 32−10网络,作者声称,鲁棒模型的特征提取器就像过滤器一样,忽略了图像中不相关的部分。他们通过微调特征提取参数的方式,提出了一种具有不遗忘特性的端到端转移学习模型。 它基本上是在模型损失函数的基础上增加一个正则化项。
Defensive distillation
distillation 是指将复杂网络的知识迁移到简单网络上,由 Hinton提出。Papernot利用这种技术提出了Defensive distillation,并证明其可以抵抗小幅度扰动的对抗攻击。
开源对抗攻防框架
FoolBox
支持Pytorch,tensorflow,numpy等框架,支持CW,PGD,FGSM等攻击方法。
CleverHans
同样支持cw,pgd等算法,仅支持tensorflow框架,代码示例:
from tensorflow.contrib.slim.nets import vgg
from cleverhans.attacks import Model,DeepFool
class CleverhansModel(Model):
"""Model class for CleverHans library."""
def __init__(self, nb_classes):
super(InceptionModel, self).__init__(nb_classes=nb_classes,
needs_dummy_fprop=True)
self.built = False
def __call__(self, x_input, return_logits=False):
"""Constructs model and return probabilities for given input."""
with slim.arg_scope(vgg.vgg_arg_scope()):
logits_vgg_16, end_points_vgg_16 = vgg.vgg_16(
processed_imgs_vgg_16, num_classes=self.nb_classes,is_training=False, scope='vgg_16')
end_points_vgg_16['logits'] = end_points_vgg_16['vgg_16/fc8']
end_points_vgg_16['probs'] = tf.nn.softmax(end_points_vgg_16['logits'])
self.built = True
self.logits = end_points_vgg_16['logits']
if return_logits:
return self.logits
else:
return self.probs
def get_logits(self, x_input):
return self(x_input, return_logits=True)
def get_probs(self, x_input):
return self(x_input)
def main(_):
"""Run attack"""
batch_shape = [FLAGS.batch_size, FLAGS.image_height, FLAGS.image_width, 3]
nb_classes = FLAGS.num_classes
tf.logging.set_verbosity(tf.logging.INFO)
with tf.Graph().as_default():
model = CleverhansModel(nb_classes)
raw_inputs = tf.placeholder(tf.uint8, shape=[None, 299, 299, 3])
process_inputs = tf.placeholder(tf.float32, shape=[FLAGS.batch_size, 224, 224, 3])
processed_imgs = preprocess_for_model(raw_inputs, 'vgg')
# Run computation
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:
df = DeepFool(model,sess=sess)
attack_params = {"overshoot":0.02,"max_iter":50, "nb_candidate": 10, "clip_min": -1,"clip_max":1,"nb_classes":110}
x_adv = df.generate(process_inputs,**attack_params)
saver = tf.train.Saver(slim.get_model_variables(scope='vgg_16'))
saver.restore(sess, model_checkpoint_map['vgg_16'])
for raw_images, target_labels in dataloader(file_path):
processed_imgs_ = sess.run(processed_imgs, feed_dict={raw_inputs: raw_images})
adv_images = sess.run(x_adv, feed_dict={process_inputs: processed_imgs_})
if __name__ == '__main__':
tf.app.run()
MindAmour
华为自己的深度学习框架mindspore中的对抗攻防模块,地址:https://gitee.com/mindspore/mindarmour/
- 点赞
- 收藏
- 关注作者
评论(0)