對抗攻擊概念:
通過對輸入添加微小的擾動使得分類器分類錯誤,一般對用於深度學習的網絡的攻擊算法最為常見,應用場景包括目前大熱的CV和NLP方向,例如,通過對圖片添加精心准備的擾動噪聲使得分類器分錯,或者通過對一個句子中的某些詞進行同義詞替換使得情感分類錯誤。
對抗攻擊分類:
關於攻擊的分類有很多種,從攻擊環境來說,可以分為黑盒攻擊,白盒攻擊或者灰盒攻擊:
- 黑盒攻擊:攻擊者對攻擊的模型的內部結構,訓練參數,防御方法(如果加入了防御手段的話)等等一無所知,只能通過輸出輸出與模型進行交互。
- 白盒攻擊:與黑盒模型相反,攻擊者對模型一切都可以掌握。目前大多數攻擊算法都是白盒攻擊。
- 灰盒攻擊:介於黑盒攻擊和白盒攻擊之間,僅僅了解模型的一部分。(例如僅僅拿到模型的輸出概率,或者只知道模型結構,但不知道參數)
從攻擊的目的來說,可以分為有目標攻擊和無目標攻擊: - 無目標攻擊:以圖片分類為例,攻擊者只需要讓目標模型對樣本分類錯誤即可,但並不指定分類錯成哪一類。
- 有目標攻擊:攻擊者指定某一類,使得目標模型不僅對樣本分類錯誤並且需要錯成指定的類別。從難度上來說,有目標攻擊的實現要難於無目標攻擊。
從擾動的強度大小來說,可以分為無窮范數攻擊,二范數攻擊和0范數攻擊(下列公式中的x表示的是擾動大小):
- 無窮范數攻擊,當p趨近於無窮大時,上式子表示擾動中最大的一個,通常在論文里,對於MNIST數據集,限制是(-0.3,0.3)
- 二范數攻擊,即p=2
- 0范數攻擊(單像素攻擊)此時限制的是可以改變的像素個數,不關心具體每個像素值改變了多少。在MNIST數據集中,一般限制是12個。
從攻擊的實現來說來說,可以分為基於梯度的攻擊,基於優化的攻擊,基於決策面的攻擊或者其他:
- 基於梯度的攻擊: FGSM(Fast Gradient Sign Method) PGD(Project Gradient Descent) MIM(Momentum Iterative Method)
- 基於優化的攻擊: CW(Carlini-Wagner Attack)
- 基於決策面的攻擊: DEEPFOOL
- 其他:Pointwise
對抗攻擊實現工具:
目前來說,比較主流的工具有cleverhans,foolbox,另外筆者還發現了一個advertorch,專門針對pytorch模型。
cleverhans | foolbox | advertorch | |
針對模型框架 | tensorflow/keras/pytorch | pytorch/tensorflow | pytorch |
產生速度 | 可以批量 | 無法批量 | 可以批量 |
使用復雜度 | ♥♥♥♥♥ | ♥♥ | ♥♥ |
包含的攻擊類別數 | ♥♥♥♥♥ | ♥♥♥♥♥ | ♥♥ |
(當然這個難易程度是筆者自己分的,見仁見智了~~~)