©PaperWeekly 原創 · 做者|孫裕道
算法
學校|北京郵電大學博士生微信
研究方向|GAN圖像生成、情緒對抗樣本生成網絡
論文標題:DeepFool: a simple and accurate method to fool deep neural networks
架構
論文連接:https://arxiv.org/abs/1511.04599函數
引言學習
Deepfool 是一種經典的對抗攻擊方式,它首次對樣本魯棒性和模型魯棒性鏡進行了定義,而且它能夠精確計算深度分類器對大規模數據集擾動,從而可靠地量化分類器的魯棒性。該論文通俗易懂,而且有大量細節豐富的圖示,有高中的代數知識基本上就能看懂算法的核心原理。本文會對 Deepfool 算法的原理進行詳解,最後一部分是對 Deepfool 核心代碼的解讀。測試
論文的貢獻
優化
本文的貢獻能夠歸結以下三點:人工智能
做者提出了一種新的計算對抗樣本的方法 DeepFool,該方法是基於梯度迭代方法中生成擾動最小的,而且能有較高的攻擊準確率。spa
做者用對抗樣本增長訓練數據,顯著提升模型對對抗擾動的魯棒性,該部分貢獻對抗訓練的前期研究。
做者分析了 FGSM 算法來驗證分類器的魯棒性的不合理性,並提出該算法會過度的評估分類器的魯棒性,並定義了什麼是樣本魯棒性,什麼是模型的魯棒性。
模型介紹
3.1 魯棒性定義
給定一個分類器,樣本魯棒性是使得模型出現誤分類的最小擾動,具體形式以下:
其中, 爲乾淨的樣本, 爲模型預測的標籤。 爲樣本 在模型分類器 的魯棒性。進而做者又定義出了模型在整個數據集上的魯棒性,具體形式爲:
這是一種指望的形式。這裏有一個困惑,若是讓我本身來定義模型的魯棒性具體的形式爲:
即表示全部樣本魯棒性的指望。可是做者的這種定義是在分母中都除以一個樣本的 2 範數,做者的模型魯棒性的定義與我理解的模型魯棒性的定義的優劣須要往後驗證。模型魯棒性是更好地理解當前網絡體系結構的侷限性和設計加強健壯性的方法的關鍵。
3.2 DeepFool攻擊二分類器
該論文寫做方式是由淺入深,先介紹了 DeepFool 攻擊二分類器的算法。
上圖爲對抗樣本攻擊線性分類器的圖示。其中 爲一個二分類器。 爲乾淨樣本點 的最短距離,即爲樣本點 在分類器 中的魯棒性。 爲分類超平面。
具體的有以下目標函數:
爲了更好的理解上圖對抗樣本攻擊二分類器的原理,我從新畫了一個圖來對其進行解釋。以下圖所示,在二維平面中,有一條直線 和一個點 ,其中直線的法向量爲 ,由高中的點到直線的距離知識可知點 到直線 爲:
若是點 移動到直線的移動的位移爲(須要注意的是位移帶方向):
當從二維二分類器擴展到多維二分類器即爲論文中所給出的公式:
上面目標函數能夠經過迭代的方式來進行求解以得到最小對抗擾動,能夠從新轉換成以下的優化形式:
下面爲具體的推導過程:
已知,梯度 ,因此有:
又由於梯度的模長爲 1,因此兩邊同乘以 有:
最後,移項可獲得最終論文中給出的公式:
根據這個迭代公式會有以下的算法:
下圖示對算法的生動的解釋,以 n=2 爲例, ,綠色平面是 點處的切平面爲 ,則此時會投影出現迭代點 ,而後依次類推,最終將全部的擾動綜合起來即爲所求的對抗擾動。
3.3 DeepFool攻擊多分類器
介紹完 DeepFool 攻擊二分類器,這一節介紹有關 DeepFool 攻擊多分類器。分類器預測標籤以下公式所示:
其中, 是預測機率向量 的第 k 類的機率份量。多分類器模型誤分類的優化函數以下所示:
爲了更好的理解以上優化形式的含義,本身作了一個圖示便於理解。以下圖所示,左半部分是乾淨樣本的機率向量的輸出,預測的類別爲 ,加入對抗擾動後,預測類別變成了 。
以下圖實例所示,已知一個四分類器,乾淨樣本 被分爲第四類中。 是分類的邊界超平面。綠色區域爲一個凸區域能夠表示爲:
根據高中的點到直線的距離公式,能夠推算得知點 到三條邊界最短的距離的計算公式爲:
與 DeepFool 攻擊二分類器類似,則多分類器的對抗擾動爲:
綜合以上 DeepFool 攻擊多分類器模型的原理得到以下的算法流程:
實驗結果
做者在 MNIST、CIFAR-10 和 ImageNet 圖像分類數據集上訓練的深度卷積神經網絡架構上測試 DeepFool 算法。下表顯示了使用不一樣方法計算的每一個分類器的精確度和平均魯棒性。而且還展現了每種方法計算一個對抗性樣本所需的運行時間。能夠看出,DeepFool 估計的擾動比用其它方法計算的要小,而且運行的時間更短。
下表給出的是 DeepFool 和 FGSM 攻擊的平均擾動狀況,會發現 DeepFool 的平均擾動要遠小於 FGSM,這就印證了 FGSM 過度的評估了分類器的魯棒性。
下圖表示的是不一樣微調策略中平均對抗擾動的變化狀況,DeepFool 生成的對抗樣本的通過微調顯著提升了網絡模型的魯棒性,其中 MNIST 網絡的魯棒性提升了 50%,NIN 的魯棒性提升了約 40%。
代碼解讀
5.1 對抗樣本庫介紹
DeepFool 的源碼是來自於 torchattacks 輕量級的對抗樣本庫,調用 API 方法很簡單庫中經典的對抗攻擊方法有 FGSM,BIM,RFGSM,CW,PGD,DeepFool 等。下載命令:pip install torchattacks。
5.2 DeepFool代碼解讀
DeepFool 攻擊是一種基於迭代的攻擊方法。以下圖所示,DeepFool 類包含兩個方法,一個是超參數的初始化,另外一個生成對抗樣本。
self.steps = steps:DeepFool 迭代的次數,默認值爲 3。
image = images[b:b+1, :, :, :]:取出 batch 中的一張圖片。
output = self.model(image)[0]:返回該圖片的預測標籤向量。
_, pre_0 = torch.max(output, 0):返回預測向量的最大值的索引。
f_0 = output[pre_0]:返回預測向量的最大值。
grad_f_0 = torch.autograd.grad(f_0, image):求出預測向量的最大值對圖片的梯度。
num_classes = len(output):表示圖片類別的數量。
接下來進入 DeepFool 代碼的核心部分,會結合論文中的算法進行講解。
if pre != pre_0::程序的終止條件,若是預測標籤與原標籤不符合,就輸出對抗樣本。
f_k = output[k]:計算每個類別的預測向量的份量。
grad_f_k = torch.autograd.grad(f_k, image):求出每個類別中預測向量的份量對圖片的梯度。
f_prime = f_k - f_0:表示原論文中的份量差值:
grad_f_prime = grad_f_k - grad_f_0:表示原論文中的梯度差值:
value = torch.abs(f_prime)/torch.norm(grad_f_prime):爲原論文中擾動量份量模長的求法:
r = (torch.abs(f_prime)/(torch.norm(grad_f_prime)**2))*grad_f_pre:爲 DeepFool 生成的對抗擾動:
image = torch.clamp(image + r, min=0, max=1).detach():DeepFool 生成的進行截斷的對抗樣本。
更多閱讀
#投 稿 通 道#
讓你的論文被更多人看到
如何才能讓更多的優質內容以更短路徑到達讀者羣體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許能夠成爲一座橋樑,促使不一樣背景、不一樣方向的學者和學術靈感相互碰撞,迸發出更多的可能性。
PaperWeekly 鼓勵高校實驗室或我的,在咱們的平臺上分享各種優質內容,能夠是最新論文解讀,也能夠是學習心得或技術乾貨。咱們的目的只有一個,讓知識真正流動起來。
???? 來稿標準:
• 稿件確係我的原創做品,來稿需註明做者我的信息(姓名+學校/工做單位+學歷/職位+研究方向)
• 若是文章並不是首發,請在投稿時提醒並附上全部已發佈連接
• PaperWeekly 默認每篇文章都是首發,均會添加「原創」標誌
???? 投稿郵箱:
• 投稿郵箱:hr@paperweekly.site
• 全部文章配圖,請單獨在附件中發送
• 請留下即時聯繫方式(微信或手機),以便咱們在編輯發佈時和做者溝通
????
如今,在「知乎」也能找到咱們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱咱們的專欄吧
關於PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。若是你研究或從事 AI 領域,歡迎在公衆號後臺點擊「交流羣」,小助手將把你帶入 PaperWeekly 的交流羣裏。