本文提出了针对Denfensive distillation这种防御措施的C&W算法(基于三种不同距离的对抗样本生成算法),同时也具有一定的迁移性。
本文把构建对抗样本的过程转化为一个最优化问题:
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)
其中DD是衡量原始图像与对抗样本之间的距离, 三种不同距离分别为L0L_{0}范数L2L_{2}范数和LL_{\infty }范数。
但由于C(x+δ)=tC(x+δ)=t这个问题很难直接求解,因此作者通过构造函数f(x,t)f(x,t) 使得在f(x,t)0f(x,t)≤0时,此条件满足。
则问题转换为:
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)进一步可简化为:
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)本文给出了7种符合此条件的函数:
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)
为了保证输出能够产生一个合理的图像,需要0xi+δi10≤xi+δi≤1,这实际上被称为盒约束 (box constraints)。
本文提出了三种盒约束优化问题的解决方法:

  • 投影梯度下降(Projected gradient descent):每实施一步梯度下降,就把计算结果限制在box内,这种方法对于具有复杂更新步骤的梯度下降方法(例如,具有动量的梯度下降)效果不太好,在剪切真实的xix_{i}时也修改了下一次迭代的输入。
  • 裁剪梯度下降法(Clipped gradient descent):与每一步迭代裁剪xx的值不同的,该方法将裁剪直接放入了优化目标,即用f(min(max(x+δ,0),1))f(min(max(x+δ,0),1))代替原目标函数f(x+δ))f(x+δ))。但这种方法,只是对目标函数进行了约束,可能会存在 xi+δix_{i}+\delta _{i}超过最大值的情况,这样就会出现梯度为0的结果,以至于xix_{i}即使减少,梯度上也无法检测到。
  • 改变变量(Change of variables):通过引入变量 wiw_{i},使得:
    [paper]Towards Evaluating the Robustness of Neural Networks(C&W)
    且满足xi+δi[0,1]x_{i}+\delta _{i}∈[0,1]

据此,本文提出了对应与三种范数约束的求解方法:

  1. L2L_{2} attack
    [paper]Towards Evaluating the Robustness of Neural Networks(C&W)[paper]Towards Evaluating the Robustness of Neural Networks(C&W)
    可以通过调整kk来控制错误分类发生的置信度。 参数kk鼓励求解器找到一个对抗样本xx′,被高度置信地归类为tt类。还可以使用多次随机初始化来减少陷入局部最优解的概率。对于L2L_{2}攻击中常量cc,本文提出:可以从很小的值开始,例如10410^{−4};如果没找到就将cc翻倍,直至找到或者达到最大值,例如101010^{10};如果找到就使用该cc值。
  2. L0L_{0} attack
    由于L0L_{0}范数不可微,因此不能使用标准的梯度下降法来进行求解。可以基于L2L_{2}攻击来生成L0L_{0}攻击。具体而言,就是先根据L2L_{2}攻击生成扰动向量δδ,并且令g=f(x+δ)g=∇f(x+δ),然后根据评估函数gg选择像素i=argminigiδii=arg\underset{i}{min}g_{i}\cdot \delta _{i}gig_{i}实际上评估的是像素ii对于输出ff的影响),然后固定像素ii,再利用L2L_{2}攻击生成对抗样本,直至无法找到对抗样本为止。
    实际上L0L_{0}攻击效果并不是很好。
  3. LL_{\infty } attack
    对于无穷范数,假设使用公式:
    min  cf(x+δ)+δmin\ \ c \cdot f(x+\delta )+\left \| \delta \right \|_{\infty}
    发现梯度下降法的效果并不理想,这是由于δ\left \| \delta \right \|_{\infty}只会惩罚向量中最大的那个元素,而对于其余元素没有任何影响。因此,梯度下降很快就会停滞在两个次优解之间。 考虑一个情况,其中i=0.5i=0.5j=0.5ϵj=0.5−ϵLL_{\infty }只会惩罚δi\delta _{i}而不会惩罚δj\delta _{j}。并且δjδ\frac{\partial }{\partial \delta _{j}}\left \| \delta \right \|_{\infty}在该点的值为0,因此梯度仍然会增大δi\delta _{i},尽管它已经很大。 因此在下一次迭代中,可能会移动到δj\delta _{j}δi\delta _{i}略大的位置,比如i=0.5ϵi=0.5−ϵ′j=0.5+ϵj=0.5+ϵ′′,这就可能陷入僵局。 换句话说,梯度下降可能在δi\delta _{i}=δj\delta _{j}=0.5的线上来回摆动。
    因此可将问题优化如下:
    [paper]Towards Evaluating the Robustness of Neural Networks(C&W)
    在每次迭代之后,如果对所有的ii都有δi<τ\delta _{i}< \tau,可以将τ\tau减少0.9倍并重复; 否则,终止搜索。
    假设必须选择一个好的常数cc用于LL_{\infty }攻击。 可以采用与L0L_{0}攻击相同的方法:首先将cc设置为非常低的值,然后以此cc值运行LL_{\infty }攻击。 如果失败,加倍cc并重试,直到成功。 如果cc超过固定阈值,我们中止搜索。
    在每次迭代中使用“热启动”进行梯度下降,则该算法的速度与之前的L2L_{2}算法(使用单个起点)一样快。

实验结果:
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)
[paper]Towards Evaluating the Robustness of Neural Networks(C&W)

相关文章: