对抗样本(五)DeepFool-程序员宅基地

技术标签: 对抗攻击  DeepFool  对抗样本  

一、论文相关信息

  1.论文题目

     DeepFool: a simple and accurate method to fool deep neural networks

  2.论文时间

    2015年

  3.论文文献

    https://arxiv.org/abs/1511.04599

二、论文背景及简介

    目前,没有有效率的方法可以用来精确的计算深度模型对对抗扰动的鲁棒性。在这篇论文中,提出了DeepFool的算法来生成扰动,并且提出了一种量化分类器鲁棒性的方法


三、论文内容总结

  • 提出了一种计算分类器对对抗扰动的鲁棒性的评价方法
  • FGSM虽然快,但是它只是提供了最优扰动的一个粗略的估计,它执行的梯度的方法,经常得到的是局部最优解,DeepFool能够得到更小的扰动,甚至比FGSM小一个数量级
  • 提出了一个新的对抗攻击方法DeepFool:

r ∗ ( x 0 ) = a r g m i n ∣ ∣ r ∣ ∣ 2 s . t .    s i g n ( f ( x 0 + r ) ) ≠ s i g n ( f ( x 0 ) ) = − f ( x 0 ) ∣ ∣ w ∣ ∣ 2 2 w r_*(x_0)=argmin||r||_2 \\ s.t. \ \ sign(f(x_0+r)) \ne sign(f(x_0))=-\frac{f(x_0)}{||w||_2^2}w r(x0)=argminr2s.t.  sign(f(x0+r))=sign(f(x0))=w22f(x0)w

  • 在DeepFool中可以采用任意的lp norm
  • DeepFool训练出来的对抗样本进行Fine-tuning后,网络的鲁棒性变的更好。FGSM的Fine-tuning却让网络的鲁棒性变差。作者认为:用变动过大的扰动来进行Fine-tuning会让网络的鲁棒性变差。但博主认为:大的扰动在Fine-tuning后之所以让鲁棒性变差,是因为实验所使用的Epoch太少了,不足以让网络能够清楚地学习到大的扰动所带来的影响,才让鲁棒性变差,而增加Epoch或者增加网络的复杂性,就可以训练的很好。这只是个人理解。

附:如需继续学习对抗样本其他内容,请查阅对抗样本学习目录


四、论文主要内容

1、Introduction

    针对样本x,标签   k ^ ( x ) \ \hat{k}(x)  k^(x) ,我们可以用如下关系来生成对抗样本:
△ ( x , k ^ ) = m i n r ∣ ∣ r ∣ ∣ 2    s . t .   k ^ ( x + r ) ≠ k ^ ( x ) \bigtriangleup(x,\hat{k}) = min_r||r||_2 \ \ s.t.\ \hat{k}(x+r) \neq \hat{k}(x) (x,k^)=minrr2  s.t. k^(x+r)=k^(x)
    我们,可以把   △ ( x , k ^ ) \ \bigtriangleup(x,\hat{k})  (x,k^) 称作   k ^ \ \hat{k}  k^ 在点   x \ x  x 上的鲁棒性,分类器   k ^ \ \hat{k}  k^ 的鲁棒性可以如下定义:
ρ a d v ( k ^ ) = E x △ ( x , k ^ ) ∣ ∣ x ∣ ∣ 2 \rho_{adv}(\hat{k}) = E_x \frac{\bigtriangleup(x,\hat{k})}{||x||_2} ρadv(k^)=Exx2(x,k^)
    其中   E x \ E_x  Ex 是对数据分布的期望。

    对抗扰动的研究帮助我们明白了对一个分类器来说,什么样的特征被使用了。一个准确的寻找对抗扰动的方法对于研究和比较不同分类其对对抗样本的鲁棒性是十分必要的,这可能有助于更好的理解目前结构的限制,然后能够找到方法来增加鲁棒性。目前,还没有很好的方法被提出来得到对抗扰动,这篇论文就弥补了这一缺陷。

    这篇论文主要的贡献如下:

  • 提出了一个简单的精确的方法来计算对抗扰动以及比较不同分类器的鲁棒性
  • 进行了一次实验对比,发现由我们的方法得出来的对抗扰动 更可信 更有效率,而且,使用对抗样本来增强实验数据能够极大的增加对对抗扰动的鲁棒性
  • 使用不精确的方法来计算对抗性扰动可能会导致关于鲁棒性的不同结论,有时甚至是误导性的结论。因此,我们的方法可以更好地理解这种有趣的现象及其影响因素

    这篇论文提到,FGSM虽然快,但是它只是提供了最优扰动的一个粗略的估计,它执行的梯度的方法,经常得到的是局部最优解。


2、DeepFool For Binary Classifiers

    在该节,   k ^ ( x ) = s i g n ( f ( x ) ) \ \hat{k}(x) =sign(f(x))  k^(x)=sign(f(x))   f ( x ) \ f(x)  f(x) 是一个二值分类器,我们把   F = { x : f ( x ) = 0 } \ \mathcal{F}=\{x:f(x)=0\}  F={ x:f(x)=0} 记为分类器的边界。   f ( x ) = w T x + b \ f(x) = w^T x+b  f(x)=wTx+b

    如果   f \ f  f 是一个线性的,我们可以很容易的看出   f \ f  f 在点   x 0 \ x_0  x0 出的鲁棒性。   △ ( x 0 ; f ) \ \bigtriangleup(x_0;f)  (x0;f) 等于   x 0 \ x_0  x0 到分类边界   F \ \mathcal{F}  F 的距离,也可以用   r ∗ ( x 0 ) \ r_*(x_0)  r(x0) 表示。

在这里插入图片描述

    其公式如下:
r ∗ ( x 0 ) = a r g m i n ∣ ∣ r ∣ ∣ 2 s . t .    s i g n ( f ( x 0 + r ) ) ≠ s i g n ( f ( x 0 ) ) = − f ( x 0 ) ∣ ∣ w ∣ ∣ 2 2 w r_*(x_0)=argmin||r||_2 \\ s.t. \ \ sign(f(x_0+r)) \ne sign(f(x_0))=-\frac{f(x_0)}{||w||_2^2}w r(x0)=argminr2s.t.  sign(f(x0+r))=sign(f(x0))=w22f(x0)w
    如果   f \ f  f 是一个一般的可微的二值分类器,我们将会采用一个迭代的操作来估计其鲁棒性。在每次迭代过程中,在点   x i \ x_i  xi 的附近,   f \ f  f 是线性的,线性分类器的扰动可以这样计算:
a r g m i n r i ∣ ∣ r i ∣ ∣ 2 s . t .    f ( x i ) + ▽ f ( x i ) T r i = 0 argmin_{r_i} ||r_i||_2 \\ s.t. \ \ f(x_i) + \bigtriangledown f(x_i)^Tr_i=0 argminriri2s.t.  f(xi)+f(xi)Tri=0
    迭代过程为:先用上面线性的公式来得到   r i \ r_i  ri ,然后更新   x i = x 0 + r i \ x_i=x_0+r_i  xi=x0+ri ,进行不断迭代。当   f ( x i + 1 ) \ f(x_{i+1})  f(xi+1) 改变了符号时,迭代停止。

在这里插入图片描述

    实际上,上述算法经常会收敛到   F \ \mathcal{F}  F 边界上的一个点,为了到达分类边界的另一边,最后的扰动向量   r ^ \ \hat{r}  r^ 通常会乘以一个常数   1 + η \ 1+\eta  1+η ,在实验中,   η \ \eta  η 取0.02。

3、DeepFool For Multiclass classifiers

    在多分类分类器上的DeepFool实际上可以看作是,在二值分类器上DeepFool的聚合。在这里,假设多分类分类器由   c \ c  c 类。我们可以知道   k ^ ( x ) = a r g m a x k f k ( x ) \ \hat{k}(x) = argmax_kf_k(x)  k^(x)=argmaxkfk(x)

3.1 Affine Multiclass Classifier(线性的多分类分类器)

    对于线性多分类的分类器来说,我们只需要:
a r g m i n r ∣ ∣ r ∣ ∣ 2 s . t . ∃ k : w k T ( x 0 + r ) + b k ≥ w k ^ ( x 0 ) T ( x 0 + r ) + b k ^ ( x 0 ) argmin_r||r||_2 \\ s.t. \exist k:w_k^T(x_0+r) + b_k \geq w_{\hat{k}(x_0)}^T(x_0+r) + b_{\hat{k}(x_0)} argminrr2s.t.k:wkT(x0+r)+bkwk^(x0)T(x0+r)+bk^(x0)
      w k \ w_k  wk   W \ W  W 的第k列,即是类别k的,权重。

    上面的问题,我们可以转化成,针对   x 0 \ x_0  x0 与 凸多面体P的补的运算,其中凸多面体的定义如下:
P = ⋂ k = 1 c { x : f k ^ ( x 0 ) ( x ) ≥ f k ( x ) } P = \bigcap_{k=1}^c\{x:f_{\hat{k}(x_0)}(x)\geq f_k(x)\} P=k=1c{ x:fk^(x0)(x)fk(x)}
    这个凸多面体,表示的是可以正确分类的域,所以   x 0 \ x_0  x0 是 在P内部的。而我们要想将其误分类,我们就要让   x 0 \ x_0  x0 进入到P的补集的域中,于是我们需要用到   x 0 与 P c 的 距 离 , d i s t ( x 0 , P c ) \ x_0 与P^c的距离,dist(x_0,P^c)  x0Pcdist(x0,Pc) ,我们记   x 0 \ x_0  x0 离P的边界最近的标签为   l ^ ( x 0 ) \ \hat{l}(x_0)  l^(x0) ,对于下面这个图来说,   l ^ ( x 0 ) = 3 \ \hat{l}(x_0)=3  l^(x0)=3

在这里插入图片描述
    其实,我们可以用如下公式来计算   l ^ ( x 0 ) \ \hat{l}(x_0)  l^(x0)
l ^ ( x 0 ) = a r g m i n k ≠ k ^ ( x 0 ) ∣ f k ( x 0 ) − f k ^ ( x 0 ) ( x 0 ) ∣ ∣ ∣ w k − w k ^ ( x 0 ) ∣ ∣ 2 \hat{l}(x_0) = argmin_{k\ne \hat{k}(x_0)} \frac{|f_k(x_0)-f_{\hat{k}(x_0)}(x_0)|}{||w_k - w_{\hat{k}(x_0)}||_2} l^(x0)=argmink=k^(x0)wkwk^(x0)2fk(x0)fk^(x0)(x0)
    在分母上加l2范数,只是为了得到的值免受权重的大小的影响,该公式的意思,其实就是两个$\ f(x_0) $ 之间的距离。

    因此,我们可以将   x 0 \ x_0  x0 误分类为   l ^ ( x 0 ) \ \hat{l}(x_0)  l^(x0) ,扰动为:
r ∗ ( x 0 ) = ∣ f l ^ ( x 0 ) ( x 0 ) − f k ^ ( x 0 ) ( x 0 ) ∣ ∣ ∣ w l ^ ( x 0 ) − w k ^ ( x 0 ) ∣ ∣ 2 2 ( w l ^ ( x 0 ) − w k ^ ( x 0 ) ) r_*(x_0) = \frac{|f_{\hat{l}(x_0)}(x_0)-f_{\hat{k}(x_0)}(x_0)|}{||w_{\hat{l}(x_0)} - w_{\hat{k}(x_0)}||_2^2} (w_{\hat{l}(x_0)} - w_{\hat{k}(x_0)}) r(x0)=wl^(x0)wk^(x0)22fl^(x0)(x0)fk^(x0)(x0)(wl^(x0)wk^(x0))

3.2 General Classfier

    在本节,我们将拓展DeepFool算法到非线性的可微的多分类器中。

    在非线性的情况下,我们依然使用迭代的方法,在每次迭代过程中,P可用如下表述:
P i ~ = ⋂ k = 1 c { x : f k ( x i ) − f k ^ ( x 0 ) ( x i ) + ▽ f k ( x i ) T x − ▽ f k ^ ( x 0 ) ( x i ) T x ≤ 0 } \tilde{P_i} =\bigcap_{k=1}^c\{x:f_k(x_i)-f_{\hat{k}(x_0)}(x_i) + \bigtriangledown f_k(x_i)^Tx - \bigtriangledown f_{\hat{k}(x_0)}(x_i)^Tx\le0\} Pi~=k=1c{ x:fk(xi)fk^(x0)(xi)+fk(xi)Txfk^(x0)(xi)Tx0}
    其迭代方法如下:

在这里插入图片描述

    该迭代算法是贪婪算法,没有被证实一定可以收敛到最优解,但能够得到最小扰动的良好的近似。

    DeepFool与优化算法紧密相连,在二值分类器情形下,它可以看作是牛顿迭代算法,用于在欠定情形下求非线性方程组的根,这种算法被称为正规流法。这个算法,也可以被看成是梯度下降方法,在每次迭代时自动选择自适应步长。在多分类器的算法中的线性化也类似于序列凸规划,其中约束在每一步都被线性化。


3.3 Extension to lp norm

    之前所使用的公式中都是使用的   l 2   n o r m \ l_2\ norm  l2 norm ,其实,我们也可以使用   l p   n o r m \ l_p \ norm  lp norm ,我们的算法也依旧可以找到比较好的结果。

    相应的公式,更改成:
l ^ = a r g m i n k ≠ k ^ ( x 0 ) f k ′ ∣ ∣ w k ′ ∣ ∣ q r i = f l ^ ′ ∣ ∣ w l ^ ′ ∣ ∣ q q ∣ w l ^ ′ ∣ q − 1 ⋅ s i g n ( w l ^ ′ ) \hat{l} = argmin_{k\ne\hat{k}(x_0)}\frac{f_k'}{||w_k'||_q} \\ r_i = \frac{f_{\hat{l}}'}{||w_{\hat{l}}'||_q^q} |w_{\hat{l}}'|^{q-1} · sign(w_{\hat{l}}') l^=argmink=k^(x0)wkqfkri=wl^qqfl^wl^q1sign(wl^)
    其中   q = p p − 1 \ q = \frac{p}{p-1}  q=p1p

    特别的,当   p = ∞ \ p=\infty  p= 时,公式为:
l ^ = a r g m i n k ≠ k ^ ( x 0 ) f k ′ ∣ ∣ w k ′ ∣ ∣ 1 r i = f l ^ ′ ∣ ∣ w l ^ ′ ∣ ∣ 1 ⋅ s i g n ( w l ^ ′ ) \hat{l} = argmin_{k\ne\hat{k}(x_0)}\frac{f_k'}{||w_k'||_1} \\ r_i = \frac{f_{\hat{l}}'}{||w_{\hat{l}}'||_1} · sign(w_{\hat{l}}') l^=argmink=k^(x0)wk1fkri=wl^1fl^sign(wl^)

4、实验结果

4.1 准备工作

    所使用的数据集,以及相应的网络如下:

  • MNIST:一个两层的全连接网络,以及一个两层的LeNet卷积网络。这两个网络都是用SGD和Momentum来训练的。
  • CIFAR-10:一个三层的LeNet网络,以及NIN网络
  • ISCVRC 2012:CaffeNet以及GoogLeNet预训练模型

    对对抗扰动的鲁棒性评估如下,使用的平均鲁棒性:
ρ ^ a d v ( f ) = 1 ∣ D ∣ ∑ x ∈ D ∣ ∣ r ^ ( x ) ∣ ∣ 2 ∣ ∣ x ∣ ∣ 2 \hat{\rho}_{adv}(f) = \frac{1}{|\mathcal{D}|} \sum_{x\in \mathcal{D}}\frac{||\hat{r}(x)||_2}{||x||_2} ρ^adv(f)=D1xDx2r^(x)2
      D \ \mathcal{D}  D 表示测试集。

    作者拿DeepFool与L-BFGS以及FGSM的方法进行对比。
r ^ ( x ) = ϵ s i g n ( ▽ x J ( θ , x , y ) ) \hat{r}(x) = \epsilon sign(\bigtriangledown_xJ(\theta,x,y)) r^(x)=ϵsign(xJ(θ,x,y))

4.2 结果

    各个模型的测试的准确率、平均鲁棒性以及一个对抗样本生成的时间的结果如下:

在这里插入图片描述

    从实验可以看出,DeepFool能够得到更小的扰动,甚至比FGSM小一个数量级。而且,DeepFool花费的时间是比L-BFGS要少的,因为L-BFGS的优化的目标函数代价太高,而DeepFool会在很少的迭代后就能够收敛。

在这里插入图片描述


4.3使用对抗样本Fine-tunning

    作者使用对抗样本对上述的模型进行Fine-tuning,并用FGSM的对抗样本进行对比。

    作者对每一个网络在扰动了的训练集上Fine-tuning了5个epoch,并且使用了50%的学习率下降。为了做对比,作者也对每个网络在原始训练集上进行了相同的操作。

    在四个网络上的结果如下:

在这里插入图片描述

    微调后的网络,在面对攻击时的准确率如下:

在这里插入图片描述

    可以看到,使用由DeepFool训练出来的对抗样本进行Fine-tuning后,网络的鲁棒性变的更好了。令人吃惊的是,FGSM的Fine-tuning却让网络的鲁棒性变差了,作者认为,这是因为由FGSM生成的扰动太大了,用变动过大的扰动来进行Fine-tuning会让网络的鲁棒性变差。作者认为,FGSM起的作用更像是正则化,而不能够代替原始数据来进行训练。作者也为此进行了实验:用DeepFool,使用   α = 1 , 2 , 3 \ \alpha=1,2,3  α=1,2,3 ,生成对抗样本,来进行Fine-tuning,得到的结果如下:

在这里插入图片描述

    因此,设计一个方法来得到最小的扰动,是很重要的。

    博主在此时认为,大的扰动在Fine-tuning后之所以让鲁棒性变差,是因为实验所使用的Epoch太少了,不足以让网络能够清楚地学习到大的扰动所带来的影响,才让鲁棒性变差,而增加Epoch或者增加网络的复杂性,就可以训练的很好。这只是个人理解,还未证明。

    而,神奇的是,在NIN网络上,作者此次采用了90%的学习率衰减,在FGSM和DeepFool上做实验,得到的结果如下:

在这里插入图片描述

    这次的实验结果,与上面的实验结果就不同了,而且,Fine-tuning一个Epoch不足以说明其影响。这也就说明,使用一个精确的工具来测量分类器的鲁棒性对于得出关于网络鲁棒性的结论是至关重要的


5、Conclusion

    这篇论文,提出了一个算法,DeepFool。它采用了迭代的方法来生成对抗样本。并且进行了大量的实验证明了该方法在计算对抗扰动以及效率上的优势。同时,提出了一个方法来评价分类器的鲁棒性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/StardustYu/article/details/104973501

智能推荐

JAVA复习笔记02-程序员宅基地

文章浏览阅读122次。16、interface中的成员变量默认为public static final类型,方法只能是public(默认为public)17、内部类访问外部类成员:Outer.this.num;18、一道有趣的题目  使用内部类实现该程序。(答案附在本文末尾)interface Inter { void show();}clas..._public

智慧交通与汽车智能化构建“交通强国”-程序员宅基地

文章浏览阅读1k次。智慧交通正在成为新基建的主力军,伴随着新能源汽车和汽车融入智能制造产业链的结构性深化,智慧交通产业构架成为中国经济发展进入新常态下融入碳中和、碳达峰的绿色发展和以新基建为代表的的中国智能制..._智能交通 智慧交通 芯片

阿里云服务器在docker上部署MySQL(图文详细教程)_阿里云服务器docker安装数据库-程序员宅基地

文章浏览阅读1.4k次。阿里云服务器在docker上部署MySQL(图文详细教程)设置容器、运行容情做数据挂载、端口映射、目录映射。_阿里云服务器docker安装数据库

Openjudge:向量点积计算_python 给定两个n维向量a=(a1,a2,...,an)和b=(b1,b2,...,bn),求-程序员宅基地

文章浏览阅读1.5k次。描述在线性代数、计算几何中,向量点积是一种十分重要的运算。给定两个n维向量a=(a1,a2,…,an)和b=(b1,b2,…,bn),求点积a·b=a1b1+a2b2+…+anbn。输入第一行是一个整数n。1 <= n <= 1000。第二行包含n个整数a1,a2,…,an。第三行包含n个整数b1,b2,…,bn。相邻整数之间用单个空格隔开。输出一个整数,即两个向量的点积结果。样例输入31 4 62 1 5样例输出36n = int(input())s = li_python 给定两个n维向量a=(a1,a2,...,an)和b=(b1,b2,...,bn),求点积a·b=a1b1+a2b

Openjudge:求三个数的和_python如果三个数全部是整数,则结果也是整数。如果三个数中有小数,则结果-程序员宅基地

文章浏览阅读3.8k次。描述输入三个整数或小数,输出它们的和如果结果是整数,就保留小数点后面一位的0(用python写则不用特别处理,程序自然会如此)输入​输入三个整数或小数输出和样例输入1 2.3 4.7样例输出8.0代码:s = input().split()a = float(s[0])b = float(s[1])c = float(s[2])print(a+b+c)..._python如果三个数全部是整数,则结果也是整数。如果三个数中有小数,则结果

最简单的视音频播放示例7:SDL2播放RGB/YUV_用c语言调用sdl2播放yuv-程序员宅基地

文章浏览阅读627次。//////////////转载:雷神博客http://blog.csdn.net/leixiaohua1020/article/details/40525591/////////////本文记录SDL播放视频的技术。在这里使用的版本是SDL2。实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API。在Windows平台下,SDL封装了Direct3D_用c语言调用sdl2播放yuv

随便推点

android,ListView_zy-2021-10-21-0119-程序员宅基地

文章浏览阅读999次。Activity页public class MainActivity extends AppCompatActivity { private ListView mlv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);_zy-2021-10-21-0119

DOMJavascript总结_javascript curtd-程序员宅基地

文章浏览阅读1.6k次。1,动态设置事件: function F1(){ alert('In F1'); } function F2{ alert(In F2); }_javascript curtd

R语言ggplot2可视化:使用ggplot2可视化散点图、使用labs参数自定义X轴的轴标签文本(customize X axis labels)_r语言中的labs()的用法-程序员宅基地

文章浏览阅读685次。R语言ggplot2可视化:使用ggplot2可视化散点图、使用labs参数自定义X轴的轴标签文本(customize X axis labels)_r语言中的labs()的用法

What is the difference between L1 and L2 regularization?_the differences between l1 snd l2-程序员宅基地

文章浏览阅读4.1k次。今天讨论班一个师姐讲到L1 norm还有L2 norm 的regularization问题,还有晚上和一个同学也讨论到这个问题,具体什么时候用L1,什么时候用L2,论文上写道一般当成分中有几个成分是principal factor的时候我们会使用L1 norm penalty,但是为什么L1会有这个效果。一个网上的讨论:http://www.quora.com/Machine-Lear_the differences between l1 snd l2

Java抽象类/抽象方法定义及其特性详解_抽象方法怎么定义-程序员宅基地

文章浏览阅读8.7k次,点赞13次,收藏40次。类的继承结构中,越往上的类越具有通用性,也就越抽象。当它抽象到一定程度,就变成概念成框架,不能再产生实例化的对象了。例如“交通工具”,就无法用它来产生一个实例。对应这一现象,Java中提供了抽象类,它只能作为父类,不能实例化。定义抽象类的作用是将一类对象的共同特点抽象出来,成为代表该类共同特性的抽象概念,其后在描述某一具体对象时,只要添加与其他子类对象的不同之处,而不需要重复类的共同特性。这样就使得程序概念层次分明,开发更高效。与抽象类紧密相连的是抽象方法一它总是用在抽象类或接口中。_抽象方法怎么定义

从海外客户端Bidding看,移动开发者应如何应对竞价模式变化?_admob竞价和瀑布的区别和文档-程序员宅基地

文章浏览阅读2.0k次。从海外客户端Bidding看,移动开发者应如何应对竞价模式变化2021年,对于渴望通过广告进行变现的移动开发者来说,可能注定是风云变幻的一年,也将是移动互联网广告程序化购买这个行业程碑式的一年,对此很多国内出海开发者会有更早的感触。自2020年三四季度始,大洋彼岸的美国就掀起了一轮“移动流量的客户端竞价革命”。其实,对于流量竞价(Realtime Bidding)很多PC时代的开发者并不陌生,简而言之,流量竞价就是APP的每一次广告曝光的机会都可以分发至多个买方平台,比如DS、Adnetwork_admob竞价和瀑布的区别和文档

推荐文章

热门文章

相关标签