本文共 8353 字,大约阅读时间需要 27 分钟。
DeepFool: a simple and accurate method to fool deep neural networks
2015年
目前,没有有效率的方法可以用来精确的计算深度模型对对抗扰动的鲁棒性。在这篇论文中,提出了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)=argmin∣∣r∣∣2s.t. sign(f(x0+r))=sign(f(x0))=−∣∣w∣∣22f(x0)w
附:如需继续学习对抗样本其他内容,请查阅
针对样本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^)=minr∣∣r∣∣2 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^)=Ex∣∣x∣∣2△(x,k^) 其中 E x \ E_x Ex 是对数据分布的期望。对抗扰动的研究帮助我们明白了对一个分类器来说,什么样的特征被使用了。一个准确的寻找对抗扰动的方法对于研究和比较不同分类其对对抗样本的鲁棒性是十分必要的,这可能有助于更好的理解目前结构的限制,然后能够找到方法来增加鲁棒性。目前,还没有很好的方法被提出来得到对抗扰动,这篇论文就弥补了这一缺陷。
这篇论文主要的贡献如下:
这篇论文提到,FGSM虽然快,但是它只是提供了最优扰动的一个粗略的估计,它执行的梯度的方法,经常得到的是局部最优解。
在该节, 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)=argmin∣∣r∣∣2s.t. sign(f(x0+r))=sign(f(x0))=−∣∣w∣∣22f(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 argminri∣∣ri∣∣2s.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。
在多分类分类器上的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)
对于线性多分类的分类器来说,我们只需要:
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)} argminr∣∣r∣∣2s.t.∃k:wkT(x0+r)+bk≥wk^(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=1⋂c{ 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) x0与Pc的距离,dist(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)∣∣wk−wk^(x0)∣∣2∣fk(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)∣∣22∣fl^(x0)(x0)−fk^(x0)(x0)∣(wl^(x0)−wk^(x0))在本节,我们将拓展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=1⋂c{ x:fk(xi)−fk^(x0)(xi)+▽fk(xi)Tx−▽fk^(x0)(xi)Tx≤0} 其迭代方法如下:该迭代算法是贪婪算法,没有被证实一定可以收敛到最优解,但能够得到最小扰动的良好的近似。
DeepFool与优化算法紧密相连,在二值分类器情形下,它可以看作是牛顿迭代算法,用于在欠定情形下求非线性方程组的根,这种算法被称为正规流法。这个算法,也可以被看成是梯度下降方法,在每次迭代时自动选择自适应步长。在多分类器的算法中的线性化也类似于序列凸规划,其中约束在每一步都被线性化。
之前所使用的公式中都是使用的 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)∣∣wk′∣∣qfk′ri=∣∣wl^′∣∣qqfl^′∣wl^′∣q−1⋅sign(wl^′) 其中 q = p p − 1 \ q = \frac{p}{p-1} q=p−1p特别的,当 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)∣∣wk′∣∣1fk′ri=∣∣wl^′∣∣1fl^′⋅sign(wl^′)所使用的数据集,以及相应的网络如下:
对对抗扰动的鲁棒性评估如下,使用的平均鲁棒性:
ρ ^ 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)=∣D∣1x∈D∑∣∣x∣∣2∣∣r^(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))各个模型的测试的准确率、平均鲁棒性以及一个对抗样本生成的时间的结果如下:
从实验可以看出,DeepFool能够得到更小的扰动,甚至比FGSM小一个数量级。而且,DeepFool花费的时间是比L-BFGS要少的,因为L-BFGS的优化的目标函数代价太高,而DeepFool会在很少的迭代后就能够收敛。
作者使用对抗样本对上述的模型进行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不足以说明其影响。这也就说明,使用一个精确的工具来测量分类器的鲁棒性对于得出关于网络鲁棒性的结论是至关重要的
这篇论文,提出了一个算法,DeepFool。它采用了迭代的方法来生成对抗样本。并且进行了大量的实验证明了该方法在计算对抗扰动以及效率上的优势。同时,提出了一个方法来评价分类器的鲁棒性。
转载地址:http://esvvi.baihongyu.com/