ML_2021_10-1 基本概念
光是正確率高還不夠,若想要讓model放在真實世界運用,還要能防止針對模型的惡意攻擊
- 本課一樣是舉圖形分類問題為例
How to attack
我們將原本正常的圖片(Benign image)vector都加上一些小小的值,做成Attacked image,則雖然肉眼看不出來,對機器來說卻很容易造成誤判
如何找出攻擊的參數
雜訊並非亂加就好,需要解出一個optimization問題
假設原始圖片benign image是$x^0$,則輸出$y^0 = f(x^0)$是一個分布
現在我們想要找到attacked image $\ x^*$,使得他
- 與原始$y^0$所屬的類別$\hat{y}$差距越大越好
- 與想被誤判的目標類別$y^{target}$越小越好
- 與原始圖片$x^0$的差距越小越好(才不會被抓到偷改)
則我們會需要解出一個最佳化圖片$x^*$使
$$
x^* = arg\ min_{d(x^0,x)\leq \epsilon}\ L(x) \\\
L(x) = -e(y,\hat{y}) + e(y,y^{target})
$$
其中e表示cross entropy,L表示loss function,$\epsilon$表示與原圖差距的極限值
原圖與攻擊圖的差距計算
方便計算,這裡均假設他們是一個vector,則原圖與修改圖之間的差距就是他們的向量相減。
- 問題是,如何定義這樣的差值的距離?
可以用L2-norm或L-infinity等等算法算距離
要用哪種norm好呢?
舉例,給定一個圖片,進行兩種修改:
則如果套用L2-norm,則兩種改法的距離差一樣,但是如果套用L-infinity,右下的距離會大幅大於右上
為了要瞞過人眼,應該是要讓每張圖的pixel都不會看起來變異過多,故此時應該採用L-infinity更符合實際需求。
Attack approach
要求出$x^*$的步驟
- 首先,init parameters,可以直接從$x^0$開始
- For t=1 to T,做gradient descend,同訓練模型,此時暫時不考慮上面提到的constraints
$$
x^t \leftarrow x^{t-w}-\eta g
$$
- 套回剛剛的限制:確認$x^*$與$x^0$差距小於$\epsilon$
$$
if\ d(x^0,x^t)> \epsilon: \\\
\ \ \ x^t \leftarrow fix(x^t)
$$
現今有很多種的attack method,但精神都不脫離現在的範例,不同的地方主要是
- optimization的方法
- Constraints的設計不同
Fast Gradient Sign Method(FGSM)
只更新一次參數
g裡面的元素只可能是+1,-1
- 一樣做偏微分,但如果結果為正,輸出1,反之輸出-1
根據$\epsilon$的不同,$x^1 = x^0 - \epsilon g$
這麼做可以確保修正後的圖片可以達到限制的$\epsilon$極值的一個角落
可以嘗試多跑幾個iteration,但這樣有可能就不小心出界了,還需要套用剛剛的constraint,把出界的x拉回來