Towards Evaluating the Robustness of Neural Networks

Nicholas Carlini, David Wagner, Towards Evaluating the Robustness of Neural Networks

提出了在不同范数下(ell_0, ell_2, ell_{infty})下生成adversarial samples的方法, 实验证明此类方法很有效.

主要内容

基本的概念

本文主要针对多分类问题, 假设神经网络(F:x in mathbb{R}^n ightarrow y in mathbb{R}^m), 其网络参数为( heta).

假设:

[F(x)=mathrm{softmax}(Z(x))=y, ]

其中(mathrm{softmax}(x)_i=frac{e^{x_i}}{sum_j e^{x_j}}).

[C(x) = arg max_i F(x)_i, ]

(x)的预测类, 不妨设(C^*(x))为其真实的类别.

Adversarial samples 的目标就是构建一个与(x)相差无几的(x')((|x-x'|)足够小),但是(C(x') ot =C^*(x)). 很多构建Adversarial samples可以指定类别:

  • Average Case: 在不正确的标签中随机选取类别;
  • Best Case: 对所有不正确的标签生成Adversariak samples, 并选择最容易成功(即骗过网络)的类别;
  • Worst Case:对所有不正确的标签生成Adversariak samples, 并选择最不容易成功的类别.

文章中介绍了不少现有的方法, 这里不多赘述.

目标函数

一般可以通过如下问题求解(x'=x+delta):

[egin{array}{ll} min & mathcal{D}(x, x+delta) \ mathrm{s.t.} & C(x+delta)=t \ & x + delta in [0, 1]^n, end{array} ]

其中(mathcal{D})衡量(x,x+delta)之间的距离, 常常为(ell_0, ell_2, ell_{infty}).

但是(C(x+delta)=t)这个条件离散, 这个问题很难直接求解, 作者给出的思路是构造一些函数(f(x,t)), 使得当且仅当(f(x,t)le0)的时候此条件满足.
则问题转换为:

[egin{array}{ll} min & mathcal{D}(x, x+delta) \ mathrm{s.t.} & f(x,t) le 0 \ & x + delta in [0, 1]^n, end{array} ]

进一步

[egin{array}{ll} min & mathcal{D}(x, x+delta) + cf(x,t) \ mathrm{s.t.} & x + delta in [0, 1]^n. end{array} ]

作者给出了7种符合此类条件的函数(作者尤为推荐第6种):
在这里插入图片描述

如何选择c

binary search

如何应对Box约束

图片的元素需要满足(0le x_i le 1), 如何满足此约束:

  • 简单粗暴地对其裁剪, 大于1的为1, 小于0的为0, 但是这种方法在梯度下降方法比较复杂(如带momentum)的时候效果可能不会太好(既然momemtum要记录变量改变的方向, 而我们又擅自对此方向进行更改);
  • (f(min (max(x+delta,0),1))替代(f(x+delta)), 我的理解是, 每次不改变原变量(x'), 然后把clip后的(x')喂给(f). 作者说此类方法容易方法在次优解间来回振荡的现象;
  • 定义

[delta_i = frac{1}{2}( anh (w_i) +1)-x_i, ]

于是我们只需优化(w_i), 且保证(x_i + delta_i in [0, 1]).

(L_2) attack

[min quad |frac{1}{2}( anh(w)+1)-x|_2^2+ccdot f(frac{1}{2}( anh(w)+1), t), ]

其中

[f(x',t)=max(max {Z(x')_i:i ot =t}-Z(x')_t, -kappa), ]

是对第6种方法的一个小改进, 其中(kappa)反应了我们对误判发生的信心.

(L_0) attack

因为(L_0)范数不可微, 所以每一次, 我们先利用(L_2) attack来寻找合适的(delta), 令(g= abla f(x+delta)), 根据(g_i delta_i)判断每个像素点的重要性, 最不重要的我们删去(根据文中的意思是永久删去).

  • Input: (x, c)
  • (I=empty)
  • Do ...:
    1. 计算在(L_2)下的解(x+delta)(倘若在(c)下找不到, 则在(2c)条件下找(嵌套));
    2. (g= abla f(x+delta));
    3. (i=arg min_i g_i cdot delta_i, i ot in I), 然后(I=I cup {i});

在利用(L_2)寻找(delta)的过程中, 若失败, 令(c=2c)并重复进行, 直到其成功或者超过了最大的迭代次数.

(L_{infty}) attack

(|delta|_{infty})作为惩罚项(?)只会针对个别元素, 这在实际实验的时候并不友好, 往往会出现振荡, 于是作者想了一种替代

[min quad c cdot f( x+ delta) + sum_i [(delta_i- au)^+], ]

这样我们就把可以关注部分突出而非个别.

原文地址:https://www.cnblogs.com/MTandHJ/p/12661003.html