关于Towards evaluating the robustness of neural networks的理解

由于之前提出的防御性蒸馏实际上是一种"梯度遮蔽"的方法,作者也给出了防御性蒸馏有效性的解释,详见之前关于防御性蒸馏的文章,和那里面说的一样;不过关于jsma中选择像素对来进行修改的方法,作者做出了不一样的解释:
  假设softmax层最小的输入为-100,那么softmax层的对于该输入的输出为0,即使增加了10,由-100变成了-90,仍然为0,显然这对输出没有什么影响。而如果softmax层最大的输入为10,将其更改为了0,显然这会使得输出产生巨大的变化。而JSMA的攻击方式并不会考虑从0到10和从-100到-90的不同,他是一视同仁的。
 而在蒸馏训练之后,会使得这样的不同放大。假设输出类向量为:[ -674.3225 , -371.59705 , -177.78831 , 562.87225 ,-1313.5781 , 998.18207 , -886.97107 , -511.58194 ,-126.719666, -43.129272]。要改变类别实际上只需要第四个数比第六个数大即可(即562增长,998下降)。但是JSMA会由于增长562会使得例如-1313,-886的数增加很多而放弃。这实际上是算法本身的问题。
 要攻击防御性蒸馏模型实际上很简单,只需要不考虑这些其他的类向量值,只考虑需要超过的类向量和自身的类向量值即可,甚至可以只关注增加自身的类向量。
 因此作者Nicholas Carlini和David Wagner提出了一系列能够改变类向量的目标函数:

f1(x)f2(x)f3(x)f4(x)f5(x)f6(x)f7(x)=lossF,t(x)+1=(maxit(F(x)i)F(x)t)+=softplus(maxit(F(x)i)F(x)t)log(2)=(0.5F(x)t)+=log(2F(x)t2)=(maxit(Z(x)i)Z(x)t)+=softplus(maxitZ(x)i)Z(x)t)log(2) f 1 ( x ′ ) = − l o s s F , t ( x ′ ) + 1 f 2 ( x ′ ) = ( m a x i ≠ t ( F ( x ′ ) i ) − F ( x ′ ) t ) + f 3 ( x ′ ) = s o f t p l u s ( m a x i ≠ t ( F ( x ′ ) i ) − F ( x ′ ) t ) − l o g ( 2 ) f 4 ( x ′ ) = ( 0.5 − F ( x ′ ) t ) + f 5 ( x ′ ) = − log ⁡ ( 2 F ( x ′ ) t − 2 ) f 6 ( x ′ ) = ( m a x i ≠ t ( Z ( x ′ ) i ) − Z ( x ′ ) t ) + f 7 ( x ′ ) = s o f t p l u s ( m a x i ≠ t Z ( x ′ ) i ) − Z ( x ′ ) t ) − l o g ( 2 )

其中, loss l o s s 就是 x x 的交叉熵损失函数, t t 是目标攻击类别, softplus(x)=log(1+exp(x)) s o f t p l u s ( x ) = log ⁡ ( 1 + exp ⁡ ( x ) ) F(x) F ( x ) 是softmax层对于样本 x x 的输出, Z(x) Z ( x ) 是logit层对于样本 x x 的输出,也就是softmax层的输入。
 除此以外,为了保证输出能够产生一个合理的图像,需要 0xi+δi1 0 ≤ x i + δ i ≤ 1 ,这实际上被称为盒约束 (box constraints)。作者总结出了三种解决盒约束优化问题的方式:
1、投影梯度下降法,在执行标准梯度下降时执行,将所有坐标剪切到框内。然而这种方法对于具有复杂更新步骤的梯度下降方法(例如,具有动量的梯度下降),效果不佳:我们剪切真实的 xi x i 的同时,同时也修改了下一次迭代的输入,这并不是我们期望的。
2、裁剪梯度下降法,与每一步迭代裁剪 x x 的值不同的,该方法将裁剪直接放入了优化目标,即用 f(min(max(x+δ,0),1)) f ( min ( max ( x + δ , 0 ) , 1 ) ) 代替原目标函数 f(x+δ) f ( x + δ ) 。但这显然会带来一个新的问题,就是卡在平坦区域, x x 卡在边界值动不了。
3、改变变量,作者就采用的这种方法,即用新的变量 w w 代替原先的 x x ,即
δi=12(tanh(wi)+1)xi δ i = 1 2 ( t a n h ( w i ) + 1 ) − x i

据此,作者提出了对应与三种范数约束的求解方法:
1、 L2 L 2 attack
我们选择目标类别 t t
min||12(tanh(w)+1)x||22+cf(12(tanh(w)+1)) min | | 1 2 ( t a n h ( w ) + 1 ) − x | | 2 2 + c ⋅ f ( 1 2 ( t a n h ( w ) + 1 ) )

其中 f f 定义为:
f(x)=max(max{Z(x)i:it}Z(x)t,k) f ( x ′ ) = m a x ( m a x { Z ( x ′ ) i : i ≠ t } − Z ( x ′ ) t , − k )

我们可以通过调整 k k 来控制错误分类发生的置信度。 参数 k k 鼓励求解器找到一个敌对的实例 x x ′ ,它将被高度置信地归类为 t t 类。除此以外,作者还使用了多次随机初始化来减少陷入局部最优解的概率。
  对于 L2 L 2 攻击中常量 c c ,作者提出:从很小的值,例如 104 10 − 4 ,开始,如果没找到就将 c c 翻倍,直至找到或者达到最大值,例如 1010 10 10 ,如果找到就使用该 c c 值。
2、 L0 L 0 attack
由于0-范数是不可微的因此不能使用标准的梯度下降法来进行求解,因此我们基于 L2 L 2 攻击来生成 L0 L 0 攻击。具体而言,就是先根据 L2 L 2 攻击生成扰动向量 δ δ ,因此 x+δ x + δ 就是一个对抗样本,我们计算 g=f(x+δ) g = ∇ f ( x + δ ) ,然后根据评估函数 g g 选择像素 i=argminigiδi i = arg ⁡ min i g i ⋅ δ i gi g i 实际上评估的是像素 i i 对于输出 f f 的影响),然后固定像素 i i ,再利用 L2 L 2 攻击生成对抗样本,直至无法找到对抗样本为止。
3、 L L ∞ attack
对于无穷范数,假设我们使用类似于之前的:
mincf(x+δ)+||δ|| min c ⋅ f ( x + δ ) + | | δ | | ∞

我们可以很轻易的发现梯度下降法的效果并不理想(例如l_bfgs的无穷范数),这是由于 ||δ|| | | δ | | ∞ 只会惩罚向量中最大的那个元素,而对于其余元素没有任何影响。因此,梯度下降很快就会停滞在两个次优解之间。 考虑一个情况,其中 i=0.5 i = 0.5 j=0.5ϵ j = 0.5 − ϵ L L ∞ 只会惩罚 δi δ i 而不会惩罚 δj δ j 。并且 δj||δ|| ∂ ∂ δ j | | δ | | ∞ 在该点的值为 0 0 ,因此梯度仍然会增大 δj δ j ,尽管它已经很大。 因此在下一次迭代中,可能会移动到 δj δ j δi δ i 略大的位置,比如 i=0.5ϵ i = 0.5 − ϵ ′ j=0.5+ϵ j = 0.5 + ϵ ″ ,这就可能陷入僵局。 换句话说,梯度下降可能在 δi=δj=0.5 δ i = δ j = 0.5 的线上来回摆动。
 鉴于此,作者转而提出优化如下问题:
mincf(x+δ)+i[(δiτ)+] min c ⋅ f ( x + δ ) + ∑ i [ ( δ i − τ ) + ]

在每次迭代之后,如果对所有的 i i 都有 δi<τ δ i < τ ,我们将 τ τ 减少0.9倍并重复; 否则,我们终止搜索。
再次,我们必须选择一个好的常数 c c 用于 L L ∞ 攻击。 我们采用与 L0 L 0 攻击相同的方法:首先将 c c 设置为非常低的值,然后以此 c c 值运行 L L ∞ 攻击。 如果失败,我们加倍 c c 并重试,直到成功。 如果 c c 超过固定阈值,我们中止搜索。
在每次迭代中使用“热启动”进行梯度下降,作者指出该算法的速度与之前的L2算法(使用单个起点)一样快。
实际上0-范数攻击很慢,并且也不是很好的攻击方式,作者也并不推荐。

你可能感兴趣的:(Adversarial,examples,对抗样本)