關於Distillation as a Defense to Adversarial Perturbations against Deep Neural Networks的理解

原文:https://blog.csdn.net/kearney1995/article/details/79741699git

爲了防護以前提出的FGSM和JSMA的攻擊方式,做者根據以前hinton提出的蒸餾學習的方式,再此基礎上稍做修改獲得了防護蒸餾模型,並理論推導了防護有效性的緣由。
 蒸餾學習是原先hinton提出用來減小模型複雜度而且不會下降泛化性能的方法,具體就是在指定溫度下,先訓練一個教師模型,再將教師模型在數據集上輸出的類別機率標記做爲軟標籤訓練學生模型。而在防護蒸餾模型中,選擇兩個相同的模型做爲教師模型和學生模型。網絡

具體過程以下:
一、先用硬標籤訓練教師模型,假設溫度爲T,則模型的softmax層的輸出F(X)爲: 函數

再此基礎上應用交叉熵損失訓練模型。 性能

二、而後用教師模型輸出類別機率F(X)(注意,這裏仍是保持了溫度T)實際上,這和T=1,即普通狀況下訓練模型,並無什麼太大區別,與原文保持一致。
三、對於學生模型,咱們仍是利用溫度T下的輸出F(X)計算交叉熵損失函數,不過類別標籤應用以前教師模型輸出的軟標籤,進而進行訓練。
對於使用軟標籤帶來的好處,主要在於使用軟標籤F(X)使得神經網絡可以在機率向量中找到的附加知識。 這個額外的熵編碼了類之間的相對差別。 例如,在手寫數字識別的背景下,給定一些手寫數字的圖像X,模型F能夠評估數字7到F7(X)=0.6的機率以及標籤1到F1(X)=0.4的機率,這代表7和1之間有一些結構類似性。
四、對於模型的預測輸出,咱們反而將溫度T降爲1,從而以高置信度來預測未知輸入的類別。
實際上咱們根本不須要前面的教師模型,只須要將F(X)做爲神經網絡的輸出來最小化交叉熵損失函數既能夠達到防護FGSM和JSMA的攻擊。
  做者也對防護蒸餾的有效性進行的分析,對softmax層的輸出求梯度能夠很容易的得出:
學習

其中,而且咱們記 編碼

 但實際上這裏的分析值得商榷,咱們來從新作一個分析,首先咱們假設用防護蒸餾訓練獲得的防護蒸餾模型類別ii的logits輸出爲(也就是softmax層的輸入),而原始模型類別ii的logits輸出爲。模型訓練時,爲了使交叉熵損失函數足夠小,咱們類別輸出之間的差距必須足夠大,原先,咱們只須要目標類別ll的logits輸出比其他類別大10左右便可。(這是我隨便選的數字),便可使得咱們要求的類別 的機率輸出近似爲1: spa

 

而訓練防護蒸餾模型時,,假設咱們溫度選擇T=100T=100,那麼咱們在該溫度下要求目標類別的機率輸出爲11,則須要知足:
Pl(X)=ez′l(X)/T∑N−1i=0ez′i(X)/T≈11+e(z′i(X)−z′l(X))/T∗(N−2)=1
Pl(X)=ezl′(X)/T∑i=0N−1ezi′(X)/T≈11+e(zi′(X)−zl′(X))/T∗(N−2)=1.net

此時若還按照剛纔的e−10e−10的要求,則必須z′i(X)−z′l(X)=−10∗T=−1000zi′(X)−zl′(X)=−10∗T=−1000,而訓練完畢後模型預測時溫度降爲T=1T=1,此時差1000就是絕對的00和11了,咱們用交叉熵loss=−logFl(X)loss=−log⁡Fl(X)對XX求梯度能夠獲得:
∇Xloss=−∇X(logez′l(X)∑N−1i=0ez′i(X))=−∂z′l(X)∂X+∑N−1i=0[ez′i(X)∂z′i(X)∂X]∑N−1i=0ez′i(X)≃−∂z′l(X)∂X+∂z′l(X)∂X+0⋯01+0⋯0=0
∇Xloss=−∇X(log⁡ezl′(X)∑i=0N−1ezi′(X))=−∂zl′(X)∂X+∑i=0N−1[ezi′(X)∂zi′(X)∂X]∑i=0N−1ezi′(X)≃−∂zl′(X)∂X+∂zl′(X)∂X+0⋯01+0⋯0=0blog

注意這裏是分子分母同時除以ez′l(X)ezl′(X)近似獲得的,所以蒸餾訓練以後的損失函數對樣本X的梯度近似等於0,咱們的實驗結果也是如此。
 同理,咱們從新分析對softmax層的輸出求的梯度:
∂Fi(X)∂X=∂∂Xj(ez′i∑N−1l=0ez′l)=1g2(X)(∂ez′i(X)∂Xg(X)−ez′i(X)∂g(X)∂X)=1g2(X)ez′i(∑l=0N−1∂z′i∂Xez′l−∑l=0N−1∂z′l∂Xez′l)=ez′ig2(X)(∑l=0N−1(∂z′i∂X−∂z′l∂X)ez′l)=∂z′l∂X−∂z′l∂X=0
∂Fi(X)∂X=∂∂Xj(ezi′∑l=0N−1ezl′)=1g2(X)(∂ezi′(X)∂Xg(X)−ezi′(X)∂g(X)∂X)=1g2(X)ezi′(∑l=0N−1∂zi′∂Xezl′−∑l=0N−1∂zl′∂Xezl′)=ezi′g2(X)(∑l=0N−1(∂zi′∂X−∂zl′∂X)ezl′)=∂zl′∂X−∂zl′∂X=0it

其中g(X)=∑N−1l=0ez′l(X)g(X)=∑l=0N−1ezl′(X),這裏也是分子分母同時除以e2z′l(X)e2zl′(X)獲得的。這也與咱們的實驗相符(雅可比矩陣爲0)。可是實際上JSMA的攻擊選擇的是logits的輸出,所以實際上防護蒸餾根本沒辦法抵抗JSMA的攻擊。   防護蒸餾其實是一個典型的梯度遮蔽的方式來防護對抗攻擊,實際上咱們即便不知道真正的梯度,採用近似的梯度,也可以成功攻擊。C&W後來提出了一個新的攻擊方式成功攻擊了該防護模型。--------------------- 做者:kearney1995 來源:CSDN 原文:https://blog.csdn.net/kearney1995/article/details/79741699 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索