[paper]The Limitations of Deep Learning in Adversarial Settings(JSMA)
与之前的基于提高原始类别标记的损失函数或者降低目标类别标签概率的损失函数的方式不同,这篇文章提出利用输入特征到输出值之间的对抗显著性,达到只需修改少量的输入值即可误分类的目的。
换句话说,之前的对抗样本的扰动方向都是损失函数的梯度方向(无论是原始类别标记的损失函数还是目标类别标记的损失函数),该论文生成的对抗样本的扰动方向是目标类别标记的预测值的梯度方向,作者将这个梯度称为前向梯度(forward derivative)。
深度学习应用系统中,模型的完整性(Intergrity)非常重要,与模型的预测结果准确性有关,具有非常高的应用价值。因此,深度学习攻击模型主要攻击深度学习模型的完整性。具体来说,深度学习的攻击就是努力找到一个输入样本 X ∗ X^* X∗,从而导致分类器的分类结果出错。
本文考虑以下四种影响模型完整性的攻击目标:
- Confidence Reduction: 降低分类输出结果的置信度值,因此会引入分类歧义;
- Misclassification: 将分类结果修改为除了原始标签外的其他任何标签值;
- Targeted Misclassification: 产生输入,使得该输入的分类结果是一个特定的目标类;
- Source/Target Misclassification: 针对一个原始样本和目标类,产生一个扰动量,使得当扰动量加到原始样本中,其分类结果是特定的目标类。
攻击能力:
攻击者通常伴随着不同的攻击能力。对抗样本攻击发生在模型的预测阶段,根据攻击者获得信息的不同,作者按照攻击能力将其分为以下五类:
- Training Data & Network Architecture: 这是最强的攻击,可以同时模拟网络的结构和分析训练集数据。
- Network Architecture: 这种攻击了解深度学习网络结构及其参数,包括网络层数、激活函数、层间权重、偏差等。本文的攻击假设属于此类。
- Training Data: 攻击者可以收集替代数据集,这些替代数据集可以从用于训练DNN的原始数据的分布中采样。一种典型的攻击方法是攻击者使用太呆数据集来训练深度学习网络,用来近似原始的深度学习网络结构。
- Oracle: 攻击者可以把神经网络当作一个“Oracle”。攻击者可以通过提供输入样本得到对应的输出预测值。原则上,攻击者通过观察输入和输出间的区别,从而自适应地构造对抗样本。
- Samples: 攻击者可以有能力收集神经网络分类器的输入和对应的输出,但不同的是,攻击者不能通过修改输入来观察输出的差异。这是最差的攻击能力。
直观地来看,以上攻击目标和攻击能力可以归纳为下图:
本文针对非循环前馈DNN网络,设计一种新的基于雅可比显著图(Jacobian Saliency Map) 的攻击样本生成方法。这种方法需要计算前向导数,以便构建一个对抗性显著图,从而确定输入特征子空间与攻击目标之间的关联性。通过这种方法扰动输入空间特征值,可以很快达到达到攻击者误分类的目的。着重关注那些导数大的参数,来进行攻击。
当输入样本为 X ∈ [ 0 , 1 ] 2 X \in [0, 1]^2 X∈[0,1]2时,整个神经网络学习到的函数 F F F如下图左图所示,可以直观地看出来,输入值在0(蓝色)和1(黄色)之间有非常明显的断层。
计算函数 F F F对输入值每个特征 { x 1 , x 2 } \{x_1, x_2\} { x1,x2}的前向导数,即为
前向导数越大的地方越容易构建对抗样本
由此可以看出:
- 输入值极小的扰动可以致使神经网络输出的不同
- 输入域不同区域中找到对抗样本的难易程度不同
- 前向导数可以减少对抗样本的搜索范围
JSMA算法:
构造算法的输入分别是: 正常样本 X X X,target目标标签 Y ∗ Y^* Y∗ , 非循环DNN F F F,最大的扰动量distortion参数 γ \gamma γ, 以及feature variation参数 θ \theta θ。算法的返回值是对抗样本 X ∗ X^* X∗ 。其中算法的主要步骤有一下三个:
- 计算前向导数 J F ( X ∗ ) J_F(X^*) JF(X∗)
- 基于前向导数构造显著图 S S S
- 利用 θ \theta θ修改输入特征 i m a x i_{max} imax
step 1. 计算前向导数 J F ( X ∗ ) J_F(X^*) JF(X∗):
其中 f n + 1 , j f_{n+1, j} fn+1,j表示的是在第 n + 1 n+1 n+1layer, 第 j j j个神经元的输出结果
W W W和 b b b分别为对应的权重和偏置项
H k H_k Hk 表示第 k k k层的隐藏层输出结果
若 k = n + 1 k=n+1 k=n+1, 则 H k = F ( X ) H_{k}=F(X) Hk=F(X)
∂ H n ∂ x i \frac{\partial H_n}{\partial x_i} ∂xi∂Hn 可以通过递归的方式求解(运用链式法则)
因此对于深度学习模型 F F F和给定输入 X X X而言,前向导数矩阵为:
step 2. 基于前向导数构造显著图 S S S:
利用之前显著图的研究,作者扩展成对抗显著图,用来表示输入空间中哪些特征对输出结构影响最大。为了达到将对抗样本误分类成 t t t的目的, F t ( X ) F_t(X) Ft(X)的概率必须不断增大,且当 j ! = t j j!=tj j!=tj时 F j ( X ) F_j(X) Fj(X)应该不断减小,直到 t = a r g m a x j t = \underset{j}{\mathrm{argmax}} t=jargmax。文章给出了两种显著图的计算方式:
方式1: 增大输入特征
方式2: 减小输入特征
由于前向梯度是由神经网络的目标类别输出值对于每一个像素的偏导数组成的。这启发了我们通过检查每一个像素值对于输出的扰动,从而选择最合适的像素来进行改变。作者称这种启发式的选择方式为显著映射(saliency map) S ( X , t ) S(X,t) S(X,t)。
[对第 i i i个特征]公式第一行想要达到的目的:使对 t t t类的预测分数起负作用(<0)或者对其他非 t t t类的预测总体呈正作用的特征图对应的映射设为0。
公式第二行想要达到的目的:如不是上面那种情况,说明第 i i i个特征对输出为 t t t类还是有帮助的,并设置为相应的值(考虑所有的偏导数,但结果仍是正的)。
step 3. 利用 θ \theta θ修改输入特征 i m a x i_{max} imax:
通过对抗性显著图确定需要修改的输入特征后,对应的特征(像素点)则为显著图 S S S中最大的像素值所对应的像素点。令 θ \theta θ表示输入特征的修改量。
每一步迭代选择的扰动像素都能够尽可能的增大目标类别的输出值,并且总体对其余的类别标记产生一个负影响(即减少输出值)。
但是通过实验发现,找到满足以上条件的像素点是很困难的,因此作者提出寻找一组像素点对而不是选择单个像素点: