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 \rightarrow y \in \mathbb{R}^m\), 其網絡參數為\(\theta\).

假設:

\[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')\not =C^*(x)\). 很多構建Adversarial samples可以指定類別:

  • Average Case: 在不正確的標簽中隨機選取類別;
  • Best Case: 對所有不正確的標簽生成Adversariak samples, 並選擇最容易成功(即騙過網絡)的類別;
  • Worst Case:對所有不正確的標簽生成Adversariak samples, 並選擇最不容易成功的類別.

文章中介紹了不少現有的方法, 這里不多贅述.

目標函數

一般可以通過如下問題求解\(x'=x+\delta\):

\[\begin{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\)的時候此條件滿足.
則問題轉換為:

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

進一步

\[\begin{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約束

圖片的元素需要滿足\(0\le 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}(\tanh (w_i) +1)-x_i, \]

於是我們只需優化\(w_i\), 且保證\(x_i + \delta_i \in [0, 1]\).

\(L_2\) attack

\[\min \quad \|\frac{1}{2}(\tanh(w)+1)-x\|_2^2+c\cdot f(\frac{1}{2}(\tanh(w)+1), t), \]

其中

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

是對第6種方法的一個小改進, 其中\(\kappa\)反應了我們對誤判發生的信心.

\(L_0\) attack

因為\(L_0\)范數不可微, 所以每一次, 我們先利用\(L_2\) attack來尋找合適的\(\delta\), 令\(g=\nabla f(x+\delta)\), 根據\(g_i \delta_i\)判斷每個像素點的重要性, 最不重要的我們刪去(根據文中的意思是永久刪去).

  • Input: \(x, c\)
  • \(I=\empty\)
  • Do ...:
    1. 計算在\(L_2\)下的解\(x+\delta\)(倘若在\(c\)下找不到, 則在\(2c\)條件下找(嵌套));
    2. \(g=\nabla f(x+\delta)\);
    3. \(i=\arg \min_i g_i \cdot \delta_i, i \not \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-\tau)^+], \]

這樣我們就把可以關注部分突出而非個別.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM