对抗攻击(3)The Limitations of Deep Learning in Adversarial Settings(2015)

1.论文中心思想

摘要:

在这项工作中,我们形式化了对抗深度神经网络(DNNs)的对手空间,并引入了一种新的算法,基于对DNNs输入和输出之间映射的精确理解来制作对手样本。在计算机视觉的应用中,我们表明我们的算法可以可靠地产生被人类受试者正确分类但被DNN在特定目标上错误分类的样本,对抗成功率为97%,而每个样本平均只修改4.02%的输入特征。然后,我们通过定义一个硬度测量来评估不同样本类对敌对性扰动的脆弱性。最后,我们通过定义良性输入和目标分类之间的距离的预测度量来描述概述对抗样本防御的初步工作。

本文主要贡献:

注意,上面提到的所有研究都采用了相反的方法:它使用输出变化来寻找相应的输入扰动。我们对输入变化如何影响DNN输出的理解源于对前向导数的评估:我们引入并定义为DNN学习函数的雅可比矩阵。正导数用于构建对抗显著性映射,表明输入特征包括扰动δXin,以产生对抗样本,诱导DNN的某种行为。

  • 我们根据对手的目标和能力对分类DNNs的对手空间进行形式化。在这里,我们提供了对攻击者能力如何约束攻击策略和目标的更好理解。
  • 我们引入了一种新的算法,仅通过使用DNN架构的知识来制作对抗样本。这些算法(1)利用前向导数来告知DNNs的学习行为,(2)构建对抗显著性映射,从而有效探索对抗样本搜索空间。
  • 我们使用一个广泛使用的计算机视觉DNN验证算法。我们定义和测量样本失真和源到目标的硬度,并探索对抗对抗样本的防御。我们通过研究人类对扭曲样本的感知来得出结论。

从攻击者能获取到的信息的方式进行分类

在这里插入图片描述

Training data and network architecture

对手完全了解用于分类的神经网络。攻击者需要访问训练数据T、用于网络训练的函数和算法,并能够提取DNN架构f的知识,包括层数和类型、神经元的激活函数、权重和偏置矩阵。他也知道哪种算法被用来训练网络,包括相关的损失函数c。

Network architecture

对手知道网络架构F和它的参数值。例如,这对应于一个对手,他可以收集关于

(1)用于设计神经网络的层和激活函数的信息,

(2)训练阶段产生的权值和偏差。这就给了对手足够的信息来模拟网络。

我们的算法假设了这种威胁模型,并给出了一类新的算法,可为有监督和无监督的前馈DNNs生成对抗样本。

Training data

对手能够知道训练数据集,从用于训练DNN的原始数据集相同的分布中采样。然而,攻击者并不知道用于设计神经网络的体系结构。因此,在该模型中进行的典型攻击可能包括使用训练数据集来近似原始分类器学习的模型来训练常用的深度学习架构。

Oracle

这个对手有能力使用神经网络,攻击者可以从提供的输入中获得输出分类(很像密码学中选择的明文攻击)。这使得差分攻击成为可能,在这种攻击中,对手可以观察输入和输出变化之间的关系(继续进行类比,例如差分密码分析中所使用的),以自适应地制作对抗样本。这个对手可以通过他们可能执行的绝对或有速率限制的输入/输出试验的数量进一步参数化。

Samples

这个对手有能力收集与神经网络分类器相关的输入和输出对。然而,他不能修改这些输入来观察输出的差异。继续密码分析的类比,这个威胁模型将对应于一个已知的明文攻击。这些对很大程度上被标记为输出数据,直觉告诉我们,它们很可能只在大量使用时才有用。

首先考虑一个简单的网络a simple neural network

在这里插入图片描述

问题就是找到最小化 δ X δ_X δX使神经网络的输出的类别变为 Y ∗ Y^* Y。(正确类别为 Y Y Y)。本文提出一种源于前向导数的系统方法。

在这里插入图片描述

图四:输入域 [ 0 , 1 ] 2 [0,1]^2 [01]2的简化多层感知器的输出表面。蓝色对应0输出,黄色对应1输出。

学习and函数:期望的输出是 F ( X ) = x 1 ∧ x 2 F(X)= x1∧x2 F(X)=x1x2,输入为 X = ( x 1 , x 2 ) X = (x1,x2) X=(x1x2)。注意,非整数输入被向上舍入到最接近的整数,因此我们有例如 0.7 ∧ 0.3 = 0 0.7 ∧ 0.3 = 0 0.70.3=0 0.8 ∧ 0.6 = 1 0.8 ∧ 0.6 = 1 0.80.6=1。在一组1000个样本上使用反向传播,对应于函数的每种情况 ( 1 ∧ 1 = 1 , 1 ∧ 0 = 0 , 0 ∧ 1 = 0 , 0 ∧ 0 = 0 ) (1∧1 = 1,1 ∧ 0 = 0,0 ∧ 1 = 0,0 ∧ 0 = 0) (11=110=001=000=0),我们使用学习率η = 0.0663训练100个epoch。对于输入值 X ∈ [ 0 , 1 ] 2 X ∈ [0,1]^2 X[01]2,由神经网络学习的整体函数绘制在图4中。横轴表示2个输入维度 x 1 x1 x1 x 2 x2 x2,纵轴表示对应于 X = ( x 1 , x 2 ) X = (x1,x2) X=(x1x2)的网络输出 F ( X ) F(X) F(X)

在这里插入图片描述

图五:我们的简化多层感知器根据输入神经元 x 2 x2 x2的正向导数。样本 X X X是良性的, X ∗ X^* X是对抗性的,通过添加 δ X = ( 0 , δ x 2 ) δX= (0,δx_2) δX=(0δx2)

我们将前向导数定义为神经网络在训练过程中学习的函数F的雅可比矩阵。对于这个例子,F的输出是一维的,因此矩阵被简化为一个向量。

在这里插入图片描述

对于上式,图五只显示了相对于 x 2 x_2 x2的倒数,前向导数告诉我们哪些输入区域不太可能产生对抗性样本,因此对对抗性操作更免疫。请注意,在图5中,当任一输入接近0时,正向导数很小。这与我们的直觉一致,即找到接近(1,0)的对抗性样本将比(1,0.4)更困难。这告诉对手在构建样本时,要关注与给定输入中较大的前向导数值相对应的特征,从而使他的搜索更有效,并最终导致较小的总体失真。

因此,这个实验的的要点是:

(1)小的输入变化可能导致神经网络输出的极端变化。

(2)并非来自输入域的所有区域都有利于找到对抗样本。

(3)前向导数减小了对抗样本搜索空间。

这本质上是对应于神经网络在训练中所学内容的函数的雅可比。前向导数计算的梯度与后向传播计算的梯度相似,但有两个重要区别:我们直接获取网络的导数而不是通过它的损失函数。并且我们根据输入特征而不是网络参数进行区分。因此,我们选择向前传播梯度,而不是向后传播梯度,因为这允许我们找到导致网络输出显著变化的输入分量。

2.本文提出的算法

推广到深层网络Deep Neural Networks

Algorithm 1

在这里插入图片描述

在这里插入图片描述

符号解读:

γ \gamma γ限制迭代的次数,每次迭代对找到的特征 X i X_i Xi θ \theta θ δ X \delta_X δX表示加入的扰动向量。

代码解读:

首先我们第一步目标是仅用 x x x和常数值来表示 ∇ F ( X ∗ ) ∇F(X^∗) F(X)

在这里插入图片描述

对于 X X X是一个向量,上式的值为一个MxN的矩阵,

我们从神经网络的第一个隐藏层开始。然后根据前一条递归求每个隐藏层 k ∈ 2.. n k ∈ 2..n k2..n:

在这里插入图片描述

其中 H k H_k Hk是隐藏层 k k k的输出。 f k , j f_{k,j} fk,j是第k层第j个神经元的激活函数输出向量,输出是 M k M_k Mk维的,输出只对某个输入求导,导数也是 M k M_k Mk维的。同时分析上式发现 H k ( x ) H_k(x) Hk(x) x i x_i xi的偏导数与上一层的输出 H k − 1 H_{k-1} Hk1有关。

通过链式法则可知:

在这里插入图片描述

则我们可以根据上式,递归求出输出对输入的偏导数(值得注意的是,可以使用符号微分来计算正向导数)。

对于下面公式对应的网络,最大的输出神经元决定输入的标签 j j j

在这里插入图片描述

现在我们想让它的标签错误识别为 t t t。对于 F j ( x ) F_j(x) Fj(x),我们要做的是让 j = t j=t j=t时的 F j ( x ) F_j(x) Fj(x)增加,对于其他所有 j ≠ t j≠t j=t时的 F j ( x ) F_j(x) Fj(x)减小,直到

在这里插入图片描述

接下来通过saliency map S(X, t)来找输入特征 i i i:

首先找到需要增加的输出特征 X i X_i Xi
在这里插入图片描述

其中 i i i是一个输入,通过之前的分析,我们将情况分为两类。(重述一下目的,我们想让其错误分类到t类,我们目标是找到对分到t类最有帮助的输入分量i)。

第一类为输出 t = j t=j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数小于0或者 t ≠ j t≠j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数和大于0。此时将 S ( X , t ) S(X,t) S(X,t)设定为0.

第二类为输出 t = j t=j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数大于0并且 t ≠ j t≠j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数和小于0。此时将 S ( X , t ) S(X,t) S(X,t)设定为上式。

对于满足第二类的输入特征 i i i,通过增加这个特征,会产生使输出为t类的可能性增加,并且会使输出为其他类的可能性和减小。最终将样本错误分类到目标类中。

再找到需要减小的输出特征 X i X_i Xi

在这里插入图片描述

第一类为输出 t = j t=j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数大于0或者 t ≠ j t≠j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数和小于0。此时将 S ( X , t ) S(X,t) S(X,t)设定为0.

第二类为输出 t = j t=j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数小于0并且 t ≠ j t≠j t=j F j ( x ) F_j(x) Fj(x)对输入 i i i的导数和大于0。此时将 S ( X , t ) S(X,t) S(X,t)设定为上式。

对于满足第二类的输入特征 i i i,通过减小这个特征,会产生使输出为t类的可能性增加,并且会使输出为其他类的可能性和减小。最终将样本错误分类到目标类中。

接下来就是对这些像素点值进行相应加减:

在这里插入图片描述

首先找到 S ( X , t ) S(X,t) S(X,t)的最大值,代表在所有对攻击来说有帮助的像素点找到帮助最大的,然后对其值进行相应的修改,修改步长为 θ \theta θ

同时记录加入的总扰动向量 δ X \delta_X δX

在这里插入图片描述

直到不满足下面的条件时终止(下式的小于号个人理解应该是大于号):

在这里插入图片描述

Algorithm 2

在算法1的基础上,算法2进行了进一步的改动。最大的区别在于算法1一次只寻找一个需要改变(增加或减少)的像素点,而算法2寻找像素对(2个像素点),具体算法如下:

在这里插入图片描述

符号解读:

γ \gamma γ限制最大迭代次数 m a x _ i t e r max\_iter max_iter

代码解读:

仅说明与算法1不同的部分

首先找需要修改的像素对:

在这里插入图片描述

上式和算法1的方法不同之处仅在于将原来的一个像素点扩展到两个像素点。

修改像素对的值:

在这里插入图片描述

(可能是修改一次之后将被修改的像素对从计算中删除,即只对一个像素对的像素值修改一次):

在这里插入图片描述

每迭代一次计算加入扰动之后的输出标签:

在这里插入图片描述

知道不满足下列关系的时候停止:标签变为目标标签t,或者迭代次数达到最大,或者找不到这样的像素对时:

在这里插入图片描述

Algorithm 3

在这里插入图片描述

3.本文提出方法的特点

使用前向导数

用显著图的方法寻找最容易攻击的像素或像素对

4.涉及到的理论

需要的知识雅可比矩阵

雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近. 因此, 雅可比矩阵类似于多元函数的导数.
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值