本文整理自哈尔滨工业大学硕士论文:深度学习对抗攻击防御策略的研究与实现
0x01 太长不看
深度学习在表现优异的同时,还存在易受攻击的缺陷。多数防御策略只能应对特定的攻击方法,普适性比较低,另外这些防御策略多为全局过滤扰动,浪费了大量算力。所以,本文:
- 认为对抗扰动中存在敏感点,敏感点的波动影响深度学习模型的分类。我们提出一种仅过滤对抗样本中敏感点的防御策略。
- 提出了一种基于差分进化算法寻找敏感点的方法,采用黑盒的方式去寻找对抗样本中的敏感点,避免了对深度学习模型的结构、参数等的依赖,可以适用于未知模型细节时的防御,增加了普适性。用邻域平均的方法把敏感点过滤掉。
0x02 Intro
道高一尺,魔高一丈。为使得基于深度学习的应用能够安全运行,必须要加快防御策略的研究并且要让防御策略尽可能的能够抵御多种对抗攻击。
当前,有两种防御方法:数据层面防御和模型层面防御。
- 数据层面防御:训练阶段修改模型参数(如对抗训练),或者测试阶段修改输入数据(如图像压缩)。对抗训练普适性差,图像压缩只能防御扰动较少的对抗样本。(搞一个高频滤波器?)
- 模型层面防御:修改网络(更改损失函数或激活函数、防御蒸馏和正则化等),使用附加网络(GAN,增加额外的前置网络学习图像校正。)
对抗攻击相关概念:
- 黑盒攻击:只需要知道模型的输入输出就可以完成攻击;
- 白盒攻击:知道防御模型的结构和参数;
- 目标攻击:例如正确的分类类别是A,目标攻击不仅要让分类结果错误,还要使它误判成不同的类别,比如类别B;
- 非目标攻击:只要扰动后的类别不是原来的类别就行。
几个常见的对抗攻击方法:
- FGSM(快速梯度符号方法):假设损失函数是J(x),那么我们对J求个梯度之后再对每一维取一下sign,然后加入到x中:
但是如果做黑盒攻击的话,这里的 θ \theta θ 不知道,也就没法求梯度了。
- BIM:对FGSM的改进,使用迭代方式,每一次修改一点像素值,并且做一下修剪,确保其再原始图片X的给定区间内:
- PGD:可以看作是 FGSM 的迭代版本。我们知道 BIM 也是 FGSM 的迭代版本,这两者的区别是,PGD 的迭代次数更多而且加了随机化操作,使得 PGD 的攻击效果比 FGSM 要好,相比 FGSM 能够生成更加不易察觉的对抗扰动。
0x03 基于对抗攻击的防御策略
攻击方法:
- 全局攻击:例如前文的FGSM和BIM。概括一下,干的是这个事情:
- 局部攻击:对整张输入样本中某一个或多个像素点添加扰动,像素点的个数或百分比往往是个超参数,可以人为指定。往往利用演化算法求出对深度学习模型输出影响较大的关键分量,然后在关键分量上添加微小的扰动生成对抗样本。这种攻击方法的优点是,不需要了解深度学习模型的参数等信息,对一些不可微分的网络模型也可以成功攻击。常见的比如one-pixel attack。
两类对抗样本生成方法本质上都在找一些关键分量,然后在这些关键分量之上加一些扰动,并且在关键分量之上所加的扰动通常会明显一些,目的就是达到欺骗深度学习模型的目的。
为了防御,我们可以:找出敏感像素点或者关键分量然后处理掉它。具体地:
- 用演化算法找到敏感点;
- 对敏感点做一手过滤,求一手平均
0x04 防御策略的设计和实现
输入样本在传入模型之前会先做敏感点过滤,过滤之后就会把数据扔到预测模型里。
差分进化算法:
进化算法的一种,其主要步骤与遗传算法基本一致,也包括变异,交叉和选择三种操作。
差分进化通过差分方法实现个体变异。常见的差分方法是从种群中随机选择两个不相同的个体,将其向量做差后乘以一个缩放因子然后与待变异的个体执行向量加法:
这里 v v v 是变异中间体, x r ( g ) x_r(g) xr(g) 表示第 g g g 代种群的第 r r r 个个体。当然,也需要满足解的合理性。
交叉操作是指g代种群和其变异中间体做交叉,其具体方法如下:
CR是一个概率值, v j , i ( g + 1 ) v_{j,i}(g+1) vj,i(g+1) 为中间体第j个位置的元素值。即对向量分量做一下调整。
最后,使用贪心思想选择下一代种群个体:
敏感点:
敏感点是输入样本中特征的数值轻微变动就可能对深度学习造成影响的那些特征。一般地,这种点可能在决策边界附近。
敏感点并非只能由一个像素点组成,敏感点是一个可以使深度学习 𝑓 预测值产生较大波动的像素点的集合,可以有多个像素点。敏感点的寻找可以形式化为带约束的优化问题,即在改变尽可能少的像素的情况下,使得深度学习 𝑓 的预测置信度尽可能低。
上述想法可以表示成一个约束最优化问题:
其中,d是敏感点的个数。S是对输入的改动。然后我们实现一下差分进化算法即可。