李宏毅機器學習課程筆記-12.1對抗攻擊入門

Motivation

我們希望我們的模型不僅僅是在大多數情況下可用的,還希望它能夠應對來自外界的“攻擊”,特別是在垃圾郵件分類、惡意軟件檢測、網絡入侵檢測等任務中。

這個領域爲對抗攻擊與防禦(Adversarial Attack and Defense),目前攻擊是比較容易的而防禦比較困難。

What is Attack

attack就是往原輸入\(x^0\)中添加一些特別的噪聲\(\Delta x\)(並不是隨機生成的)得到一個稍微有些不同的輸入\(x'=x^0+\Delta x\),而模型卻得到一個與原輸出截然不同的輸出。如下圖所示,在圖像分類任務中,對一張“Tiger Cat”圖片添加一些特別的噪聲\(\Delta x\)後,人類還能看出它是“Tiger Cat”,但模型卻認爲它是其它的類別。

img

Loss Function For Attack

攻擊可以分爲兩種:Non-targeted Attack和Targeted Attack。

How To Train

我們是這樣訓練一個普通的神經網絡的:將輸入\(x^0\)輸入到模型後,我們希望模型的輸出\(y^0\)和標籤\(y^{true}\)越接近越好,則損失函數爲\(L_{train}(\theta)=C(y^0,y^{true})\)此時輸入\(x^0\)是固定的,我們需要不斷調整模型參數\(\theta\),使得\(L_{train}(\theta)\)最小。

Non-targeted Attack

如果是Non-targeted Attack,將輸入\(x'=x+\Delta x\)輸入到模型後,我們希望模型的輸出\(y'\)和標籤\(y^{true}\)的差異越大越好,則損失函數爲\(L_{Non-targeted\ Attack}(x')=-C(y',y^{true})\),比\(L_{train}(\theta)\)多了一個負號。此時模型參數\(\theta\)是固定的,我們需要不斷調整輸入\(x'\),使\(L_{Non-targeted\ Attack}(x')\)最小。

Targeted Attack

如果是Targeted Attack,將輸入\(x'=x+\Delta x\)輸入到模型後,我們希望模型的輸出\(y'\)和標籤\(y^{true}\)的差異越大越好並且模型的輸出\(y'\)與某個\(y^{false}\)越接近越好,其中\(y^{false}\)需要人爲選擇,則損失函數爲\(L_{Targeted\ Attack}(x')=-C(y',y^{true})+C(y',y^{false})\)此時模型參數\(\theta\)是固定的,我們需要不斷調整輸入\(x'\),使\(L_{Targeted\ Attack}(x')\)最小。

Constraint For Attack

在Attack中,除了要使\(L_{Non-targeted\ Attack}(x')\)\(L_{Targeted\ Attack}(x')\)最小之外,我們還希望\(x^0\)\(x'\)之間的差異較小,即\(d(x^0,x')\leq\epsilon\),其中\(\epsilon\)需要人爲選擇,這樣才能實現真正的Attack。

主要有兩種計算\(d(x^0,x')\)的方法,但在不同的任務中應該有不同的計算方法,因爲其代表着人類視角下\(x^0\)\(x'\)之間的差異。

L2-norm

L2-norm爲\(x^0\)\(x'\)中每個像素之差的平方和,即\(d(x^0,x')=||x^0-x'||_2=||\Delta x||_2=(\Delta x_1)^2+(\Delta x_2)^2+(\Delta x_3)^2+\dots\)

L-infinity

L-infinity爲\(x^0\)\(x'\)中每個像素之差的最大值,即\(d(x^0,x')=||x^0-x'||_{\infin}=||\Delta x||_{\infty}=max\{\Delta x_1,\Delta x_2,\Delta_3,\dots\}\)

對於圖像中的pixel來講,也許L-infinity是更有效的計算方法。

How to Attack

我們在Attack時要訓練的參數是輸入\(x'\)而非模型參數\(\theta\),在\(d(x^0,x')\leq\epsilon\)的情況下使得\(L(x')\)最小,即\(x^*=arg\mathop{min}_\limits {d(x^0,x')\leq\epsilon}L(x')\)

關於如何訓練輸入\(x'\)而非模型參數\(\theta\),可以參考下Explainable AI的代碼部分,其實就是設置輸入\(x'\)的梯度是可追蹤的並在定義優化器時傳入輸入\(x'\)而非模型參數\(\theta\)

img

如上圖所示,在訓練時有兩個關鍵點。第一點是輸入\(x'\)應該用\(x^0\)初始化;第二點是在每個iteration中需要判斷保證\(d(x^0,x')\leq\epsilon\),具體來講就是當發現\(d(x^0,x')>\epsilon\)時就需要將\(x'\)修正爲所有滿足\(d(x^0,x)>\epsilon\)\(x\)中與\(x'\)最接近的那個。那要怎麼找到所有滿足\(d(x^0,x)>\epsilon\)\(x\)中與\(x'\)最接近的那個呢?下圖中圓形和正方形中的\(x\)均滿足\(d(x^0,x)>\epsilon\),所以中心\(x^0\)\(x’\)連線與圓形或正方形的交點就是要修正的結果。

img

Attack Approaches

雖然有很多方法都可以進行attack,但它們的主要區別在於使用了不同的constraint或者使用了不同的optimization method。

FGSM

FGSM即Fast Gradient Sign Method,本次homework(hw6_AdversarialAttack)就使用了FGSM。

FGSM中輸入的更新規則爲\(x^*=x^0-\epsilon\Delta x\)。它首先計算出損失\(L\)關於\(x\)的每個維度的梯度,如果梯度大於0則修改爲+1、小於0則修改爲-1,也就是說\(x^0\)的所有維要麼\(+\epsilon\)是要麼是\(-\epsilon\)

假設FGSM使用L-infinity計算\(d(x^0,x^*)\),如果梯度指向左下角那麼\(x^*\)就在方框的右上角;如果gradient指向左上角那麼\(x^*\)就在方框的右下角;因此在FGSM中我們只在意梯度方向而不在意其大小。我們可以認爲FGSM使用一個非常大的學習率使\(x\)飛出正方形,但因爲要保證\(d(x^0,x')\leq\epsilon\)所以\(x^*\)就會被限制到方形區域內部。所以就像是“一拳超人”,只攻擊一次就達到好的效果。

img

Black Box Attack

Attack可以分爲White Box和Black Box。White Box Attack指模型參數\(\theta\)是已知的,Black Box Attack指模型參數\(\theta\)是未知的

在Black Box Attack中,我們不知道Black Network的參數\(\theta\)。現假設我們知道Black Network的訓練集,那我們就可以使用這份訓練集自行訓練出一個Proxy Network,然後基於Proxy Network和訓練集就可以得到\(x'\),這個\(x'\)一般也可以成功攻擊Black Network。如果Black Network是一個在線API,我們既不知道Black Network的參數也不知道它的訓練集,那上傳大量輸入後就可以得到大量對應的輸出,並以這些輸入輸出對爲訓練集得到Proxy Network和\(x'\)

有相關實驗證明,Black Box Attack是非常有可能攻擊成功的,詳見:Delving into Transferable Adversarial Examples and Black-box Attacks(https://arxiv.org/abs/1611.02770)


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章