1. 程式人生 > 其它 >筆記:Pytorch官方教程-對抗樣本生成

筆記:Pytorch官方教程-對抗樣本生成

翻譯自:https://pytorch.org/tutorials/beginner/fgsm_tutorial.html

儘管深度學習的模型越來越快速、越準確,但深入瞭解對抗學習之後,你會驚訝的發現,向影象新增微小的難以察覺的擾動可能使模型效能發生顯著改變。

這個教程將通過影象分類器來討論這個問題,具體來說,我們將使用最早的也是最流行的FGSM方法,來愚弄MNIST分類器。

Threat Model

在上下文中,有許多種類的對抗性攻擊,每種攻擊都有不同的目標和攻擊者的知識假設。然而,一般來說,首要目標是對輸入資料新增最少的擾動,以導致所需的誤分類

攻擊者的知識有幾種假設,其中兩種是:白盒和黑盒。白盒攻擊假定攻擊者完全瞭解和訪問模型,包括體系結構、輸入、輸出和權重。黑盒攻擊假定攻擊者只能訪問模型的輸入和輸出,而對底層架構或權重一無所知。

還有幾種型別的目標,包括錯誤分類和源/目標錯誤分類。錯誤分類的目標意味著對手只希望輸出分類是錯誤的,而不關心新分類是什麼。源/目標錯誤分類意味著對手想要更改最初屬於特定源類別的影象,以便將其分類為特定目標類別。

在這種情況下,FGSM攻擊是以錯誤分類為目標的白盒攻擊。有了這些背景資訊,我們現在可以詳細討論這次攻擊

Fast Grandient Sign Attack

這最早且最流行的對抗攻擊方式是Fast Grandient Sign Attack(FGSA),它是GoodFellow在Explaining and Harnessing Adversarial Examples. 中提出的,這種攻擊非常強大且很直觀。它是通過神經網路本身的學習方式——梯度來進行攻擊,它的思路很簡單,不是通過反向傳播的梯度去調整權重使最小化loss,而是根據梯度來調整輸入使得loss最大化

.

在開始編寫程式碼之前,讓我們先看看著名的FGSM 熊貓例子 和 介紹一些符號公式

根據這張圖片,$x$ 是原始的輸入影象其分類是"panda",$y$ 是 $x$ 的 $ground truth label$,$\theta$ 指模型的引數,$J(\theta, \mathbf{x}, y)$ 是用來訓練網路的loss。攻擊將梯度反向傳播到輸入來計算 loss對 $x$ 的偏導數 $\nabla_{x} J(\theta, \mathbf{x}, y)$,然後,我們將小步($\epsilon$ 或這個例子中的0.7)地調整輸入資料,在 $\operatorname{sign}\left(\nabla_{x} J(\theta, \mathbf{x}, y)\right.$ 方向上,從而最大化loss。由此產生的擾動影象 ${x}'$ 將會被目標網路識別成"gibbon"(長臂猿),而人眼看來還是"panda"(熊貓)

希望本教程的動機現在已經很清楚了,讓我們開始實現。

Implementation

完整程式碼可見

個性簽名:時間會解決一切