李宏毅——對抗模型 attack and defence
motivation
想在脫離實驗室,實際環境中使用
要做到:
強:要對噪音robust
對付來自人類的惡意:要對惡意的騙過機器的數據robust
偵測帶有惡意的東西:垃圾郵件,惡意軟件檢測,網絡侵入等
攻擊
例子
在圖片上加上特製的噪聲,網絡會得到不同的答案
如何找出特製的噪聲
通常訓練過程,最小化y‘和y_true間的距離
訓練時:x是不變的,獲得theta
攻擊時,網絡是不變的,固定theta,獲得x’
沒有目標的攻擊:加上x‘,希望y’跟y_true越小越好
有目標的攻擊:加上x‘,希望y’跟y_true越小越好,同時跟一個錯誤答案越近越好
額外的限制:x’和x越接近越好,不能被人發現
限制
如何定義distance
圖中的例子表示,在使用l-infinity時,值越大,人眼的分辨更明顯些
how to Attack
想法:像訓練神經網絡一樣,但是不是最小化時的參數theta,而是x’
做法:gradient Descent,但是加上限制
。判斷xt是否符合限制,如果不符合,那麼要修正xt
修正方法:窮舉x0附近的所有xt,用符合限制的xt來取代
修正算法的圖形化表示如下圖,如果xt跑出圈圈範圍外了,就把它抓回來。
實例
使用一個貓,讓它輸出海星
分析兩張圖片的不同,很小,要乘以50倍才能看出
把貓變成鍵盤
是否是因爲網絡很弱呢?
隨機加噪聲,但是對結果的影響不大,加的噪聲逐漸增大以後會有影響
到底是因爲什麼呢?
x0隨機移動,多數時候,在該點附近,網絡判斷爲tiger cat的confidence很高
對於在高維空間中的一個點,有某些神奇的方向會出現這種現象:只要稍微推一點,預測爲某個不相干的東西的confidence就會很高。但是整個網絡在其他方向上比較長,在某個特定的方向比較窄。
攻擊方法
不同方法主要區別在不同的限制和不同的優化方法。
FGSM(Fast Gradient Sign Method)
FGSM一種非常簡單的方法。只更新一次,一次攻擊成功
具體的做法是先求gradient,然後更新x0,它並不在意gradient的值,只在乎方向。
它的原理等於給了一個非常大的learning rate,所以一次update就能跑出範圍,然後把它拉回對應的角。
它還有一種進階的方法,可以多次更新。
白盒和黑盒
在之前的攻擊中,我們都知道theta,去尋找最有的x’。
爲了攻擊,需要知道網絡的參數theta,這種就是白盒攻擊。
如果我們不知道網絡,就安全了嗎?
並不是的,因爲可以進行黑箱攻擊。
黑盒攻擊
如果你能夠得到目標網絡的訓練數據
可以訓練一個proxy network網絡
然後利用proxy network網絡得到攻擊數據,再來攻擊原網絡,往往能夠成功
所以應該保護好訓練資料,但是即便沒有訓練資料,也有可能進行攻擊。
只要丟大量的數據過去,獲得輸出的結果,也能進行黑箱攻擊。
下表中表示黑箱攻擊時,系統辨識的正確率。列表示用的proxy,行表示實際用的模型。數據越低,說明攻擊效果越好。
衍生研究
Universal Adversarial Attack
之前提到的攻擊,對於每個圖片x,會有不同的噪聲x‘進行攻擊,有人提出了通用的噪聲,可以讓所有圖片的辨識結果都出錯。
這個也可以做黑箱。
Adversarial Reprogramming
有一個辨識魚的網絡,可以將它改造成數方塊的網絡,根據方塊的不同進行輸出。
加一噪聲,就能變成別的網絡
真實世界的攻擊
有人做實驗,把攻擊的圖像打印出來,然後用圖片放在攝像頭上進行攻擊。證明這種攻擊時可以在現實生活中做到的。
可以對人臉識別上進行攻擊,把噪聲變成眼鏡,帶着眼鏡就可以實現攻擊。
結果表示,可以被辨識成其他人。
在現實生活中需要做的以下幾點。
- 要保證多角度都是成功的
- 噪聲不要有非常大的變化(比如只有1像素與其他不同),要以色塊方式呈現,這樣方便攝像頭能看清
- 不要用打印機打不出來的顏色
在交通符號上加噪聲。
其他方向的攻擊
語音
文字
防禦
有人說現在網絡之所以會被攻擊,是因爲overfit,其實不然。通過regularization,dropout或者esemble時不能解決
兩種類型
被動防禦
不處理網絡另外加一個防護罩,可以視爲一種特殊的異常檢測。
主動防禦
主動攻擊是在訓練模型是就加上防禦的思想。
被動防禦
filter的一個例子:可以直接對圖像進行平滑化。這種方法能夠成功的原因,是改變了某個方向上突變的樣子,但是不會改變圖片的原意。
feature Squeeze
squeezer指的是不同的filter
比較這些輸出,如果區別很大就有問題。
Randomization at Inference Phase
稍微做些改變,看輸出是否會有變化
在model前面加盾牌的方法,如果filter被泄漏,仍然可能被攻擊
主動防禦
精神:訓練network時把漏洞找出來,補好
給定訓練資料,然後用訓練集來訓練模型
如何找漏洞呢?
訓練T輪,找出每一個輸入對應的的attack,然後把可以被attack成功的數據找出來,再把這些數據加上正確的label,當作新的資料,進行訓練。
訓練T輪是因爲訓練時參數會變,所以要找出新的漏洞,再補起來
如果你用A方法來找漏洞,但是被B方法攻擊,可能仍然防不住
假設你的找漏洞的方法被泄漏出去,別人就可以不用這種方法,換一種方法攻擊。