# 李宏毅_Attack ML Models
###### tags: `Hung-yi Lee` `NTU` `Attack ML Models`
## Attack ML Models (1/8)
[課程連結](https://www.youtube.com/watch?v=NI6yb0WgMBM)
### Motivation

目前的機器學習技術已經日益成熟,但我們希望它不止存在實驗室,而是能落實用於日常生活,這意味著模型除了能用還要能夠對抗惡意攻擊。也就是人為惡意的產生某種輸入,希望能夠騙過模型,造成誤判。
舉例來說,垃圾郵件的偵測,寄送垃圾郵件的人會希望自己可以突破系統的偵測,成功寄出垃圾郵件。這也是為什麼需要研究如何攻擊模型以及如何防禦的原因。
### What do we want to do?

舉例來說,有一個影像偵測模型,也許是一個很深的ResNet。我們將一張影像輸入網路$x^0$,得到一個輸出,或許是正確的。但是當我們將輸入的影像加入一個"特殊"的訊號($x'=x^0 + \Delta x$)~(並非隨意加入雜訊)~,這時候模型的輸出就會變的很不一樣,這就是攻擊模型要做的事。
## Attack ML Models (2/8)
[課程連結](https://www.youtube.com/watch?v=zOdg05BwE7I)
### Loss Function for Attack

現在的問題在於要如何找出那個特別的信號$x'$(攻擊的信號),以標準網路來看,我們希望輸入$x^0$,經過模型輸出得到$y^0$,我們希望這個得到的輸出跟實際的標記$y^{true}$愈接近愈好。因此訓練過程中我們最佳化的是$L_{train}(\theta)=C(y^0, y^{true})$之間的cross_entropy。
以攻擊來看,有分成兩種:
1. Non-targeted Attack
* 沒有目標的攻擊
* input $x' \rightarrow$ output $y'$,而我們希望這個$y'$與$y^{true}$愈遠愈好
* loss function為$L(x')=-C(y', y^{true})$
* 訓練過程中我們是固定參數,因為我們要找出一個信號讓得到的答案與真實的答案愈遠愈好
2. Targeted Attack
* 有目標的攻擊
* 不同於Non-targted Attack在於,不止是希望$y'$與$y^{true}$愈遠愈好,同時還希望$y'$與$y^{false}$愈近愈好,這個$y^{flase}$是由你自己決定,你希望引導模型誤判目標變成什麼,像是貓變魚之類的
* loss function為$L(x')=-C(y', y^{true}) + C(y', y^{false})$
實作過程中有要一個限制,也就是我們還希望$x'$與$x^0$要愈接近愈好,因為我們並不希望被發現我們偷加料,也就是$d(x^0, x') \leq \epsilon$。
註:$C$代表corss_entropy
### Constraint

$d(x^0, x') \leq \epsilon$:
* 以$\Delta x$表示$x^0, x'$之間的差異,即$x' - x^0 = \Delta x$
* L2-norm
* $d(x^0, x') = \Vert x^0 - x' \Vert_2$
* 將$\Delta x$取平方再相加
* L-infinity
* $d(x^0, x') = \Vert x^0 - x' \Vert_\infty$
* 取$\Delta x_1, \Delta x_2....$的最大值
實際用什麼樣的方式來衡量取決於應用任務不同而有所不同,後續的課程都會以L-infinity來說明。
舉例來說你有一張4個pixel的影像,拉成向量的話就是一個12維的向量~(因為每一個pixel都是rgb)~,往右上去是將每一個pixel都做了些許的改變,往右下去是將右下的pixel加深,這時候如果你以L2-norm去計算,那它們得到的可能是相同的距離,但這跟人類感知是有落差的,我們很明顯的可以看的出來往右下的加深綠色部份是有真正的差異。可是如果改以L2-infinity那與右下所得的距離是較大的,因為我們比較的是兩個向量之間差異最大有多大,因此在綠色差異的部份就可以被突顯出來。
## Attack ML Models (3/8)
[課程連結](https://www.youtube.com/watch?v=F9N5zF7N0qY)
### How to Attack

在剛才我們已經定義loss function-$L$與distance-$D$,這就是一個解最佳化的問題:
* $x^* = arg \min_{d(x^0, x') \leq \epsilon} L(x')$
* 找出一個$x'$讓$L(x')$的值最小,但是同時要滿足$d(x^0, x') \leq \epsilon$
這跟平常在訓練`nn`是非常相似的,不同的是,平常我們找的到$\theta$,而現在找的是$x'$:
* 首先,暫時不要去看限制式$d(x^0, x') \leq \epsilon$,那就變成是一個標準的神經網路問題,只是我們是固定模型參數來找$x'$讓整個loss最小
* 利用gradient descent
* $x^t \leftarrow x^{t-1} - \eta \nabla L(x^{t-1})$
* $\eta$: learning rate
* $\nabla L(x^{t-1})$: gradient
* 以原始照片$x^0$做為初始參數
* 反覆T次
* 把限制式加上
* 在每次的迭代中確認是否滿足限制式$d(x^0, x') \leq \epsilon$,如果不滿足就進行修正,以確保每次的distance都是滿足限制式
* 在不符合的情況下就尋找一個最接近那個不符合限制式的$x^t$,然後取代掉
### How to Attack

不論是採用L2-norm或是L-infinity都一樣,超出範圍,就把它拉回來
## Attack ML Models (4/8)
[課程連結](https://www.youtube.com/watch?v=qjnMoWmn1FQ)
### Example

這是李弘毅老師做的一個範例,左邊的原始照片被模型(Resnet-50)判定為Tiger Cat,但右邊攻擊的照片卻被確實的判定為Start Fish
### Example

把兩張照片相減並乘上50倍之後就可以看到所加入的噪點
### Example

相同的作法也可以讓機器將貓誤判為鍵盤,而且置信度還非常的高。
### Example

上面是將tiger cat加入各種雜訊之後得到的結果
### What happened?

想像$x^0$是高維空間中的一個點,當你隨機去調整它的時候,讓它在$x^0$附近移動,那它可能在多數情況下都還是在貓。但這個高維空間中(範例為225\*225的照片)有某些神奇的方向,它可能讓你調整之後就恰巧的是另外一種類別。
不過這只是試著去合理的說明剛才所發生的狀況,也就是為什麼貓可以調整為鍵盤而照片看起來沒有那麼大的明顯變化。
## Attack ML Models (5/8)
[課程連結](https://www.youtube.com/watch?v=2mgLPZJOHNk)
### Attack Approaches

上面列表是attach的多種方法,可參考相關論文說明。
課程主要說明FGSM
### Attack Approaches

雖然攻擊的方法百百種,但是它們的不同之處通常都是採用不同的distance做為限制式,以及採用不同的最佳化方法來最小化loss function並滿足限制式。
FGSM的概念很簡單:
* $x^* \leftarrow x^0 - \epsilon \Delta x$
* 所得的vector只會有兩個值,也就是+1或-1,這取決於計算偏微分之後的值為何,正值則不論多少即為+1,而負值則不論多少即為-1。這代表每一維不是+1,就是-1
* 只攻擊一次就可以得到結果,但文獻上來看,如果能多攻擊幾次確實可以有比較好的效果
* 不在意gradient有多少,只在意gradient的方向,以上面範例來看,不管gradient是指個左下的那一個角度,總之,$x^*$就是會往右上的同一個地方去
* 換個方向來看,FGSM或許就是一個設置非常大的learning rate,而之前提過,超過的就拉回以滿足限制式,因此最終還是回到左上的邊角上
## Attack ML Models (6/8)
[課程連結](https://www.youtube.com/watch?v=z2nmPDLEXI0)
### White Box v.s. Black Box

稍早所談的部份都是屬於White Box attack,這種方式我們必需要知道網路的參數才有辦法找出$x'$來攻擊。
而實務上我們是可以在不知道模型參數的情況下攻擊模型,這種方式即為Black box attack。
### Black Box Attack

假設線上一個服務(Black),我們並不知道它的架構以及參數等資料,但我們知道這個架構的訓練資料(如MNIST、ImageNet、...等),這時候我們就可以拿這個訓練資料來訓練自己的網路(Proxy)。然後你就利用自己訓練的模型來生成一張攻擊的影像,這種情況下拿來攻擊線上服務通常都可以成功。
### Black Box Attack

[論文連結_DELVING INTO TRANSFERABLE ADVERSARIAL EXAMPLES AND BLACK-BOX ATTACKS](https://arxiv.org/pdf/1611.02770.pdf)
實務上有人證實了這種黑箱攻擊的方式是可行的,上面圖表是各種的Black與Proxy的交叉攻擊資料。對角線可以看的出來,相同架構情況下的攻擊率非常高,而即使是不同架構之間的成功率也是非常高。
### Universal Adversarial Attack

[論文連結_Universal adversarial perturbations](https://arxiv.org/abs/1610.08401)
理論來說,要攻擊一個模型,每一張照片加上去的信號都是不一樣的,但有人試著以Universal Adversarial Attack發現,這是有可能成功的。也就是找出一個通用的信號,加上你的所有影像中,多數情況下是可以讓模型產生錯誤而辨識錯誤。而且,以A模型所找出來的信號拿來攻擊B模型還是有很高的成功機率。
### Adversarial Reprogramming

[論文連結_Adversarial Reprogramming of Neural Networks](https://arxiv.org/abs/1806.11146)
Adversarial Reprogramming是一個很神奇作法,可以讓一個模型由原本要處理的A任務變成解B任務。
假設你有一個影像辨識的模型,我們希望利用這個模型幫我們數影像裡面有幾個方塊,要注意,這個模型原本並不是拿來數方塊,而是拿來辨識某種東西的,而我們要改造它,但這個改造並不是真的去改模型,因為這可能是線上的某一個api service。
作法上就是把要數小方塊的影像加上一個特定的信號,再將這個結合起來的影像給模型,而模型還真的會幫你數方塊。
## Attack ML Models (7/8)
[課程連結](https://www.youtube.com/watch?v=KH48zq2RfBA)
### Attack in the Real World

這是將block box attack實際拿到真實世界的測試,可以發現洗衣機被誤判了,這意味著這種攻擊是可能在實際生活中做的到的。
### Attack in the Real World

[論文連結_Accessorize to a Crime: Real and Stealthy Attacks on
State-of-the-Art Face Recognition
](http://www.cs.cmu.edu/~sbhagava/papers/face-rec-ccs16.pdf)
類似的攻擊可以應用在人臉辨識上,將攻擊的訊號加在眼鏡上,就可以造成人臉辨識的錯誤。
### Attack in the Real World

可以發現,戴上眼鏡之後,人臉辨識就無法正確的辨識出人臉。有幾點特別的是:
* 人臉辨識系統並非單純的照臉,因此必需確保不同角度的攻擊都可以成功
* 雜訊的訊號如果太弱,面對解析度較低的相機可能會失敗,因此呈現上是以色塊來呈現,避免相對補捉失敗
* 避免使用印表機無法列印出來的顏色
### Attack in the Real World

[論文連結_Robust Physical-World Attacks on Deep Learning Models](http://arxiv.org/abs/1707.08945)
這是攻擊道路標識的案例,讓機器誤認這是速限45的標識。這一樣必需考量物理特性。不同角度都要能夠攻擊。這對自駕車而言會是一個安全問題。
### Beyond Images

[論文連結_Adversarial Examples for Evaluating Reading Comprehension Systems](https://arxiv.org/pdf/1707.07328.pdf)
攻擊不限於圖片,也可以語音,也可以文字。
## Attack ML Models (8/8)
[課程連結](https://www.youtube.com/watch?v=ah_Ttx6cIVU)
### Defense

有人提過,模型容易受到攻擊的一個原因在於過於擬合訓練資料集,但這並不正確,因為即使你針對模型有預防過擬合的手段,這種攻擊依然可以成功。也有人想過,model ensemble也許可以阻擋攻擊,但是剛才的文獻我們看到,攻擊是可以跨模型,而且成功率還不低。
有兩種方式可以防禦:
* 被動:不調整模型,而是外面加上一層防護罩
* 主動:訓練模型的過程中就要加上可能的攻擊
### Passive Defense

這邊說明被動防禦,假設有一隻貓加上攻擊的信號之後會被模型判為鍵盤。我們加入一個filter,讓照片通過這個filter之後可以減輕攻擊的傷害。像是加入smoothing。
### Passive Defense

上面是一個案例,加上smoothing之後,原始照片依然被判定為tiger cat,而攻擊照片成功的被判定為tiger cat。這是因為攻擊只有在某些特定的空間上才有效用,因此你加入filter在某種方面上是改變了這個攻擊信號,因此可以讓它失效。
### Passive Defense

[論文連結_Feature Squeezing: Detecting Adversarial Examples in Deep Neural Networks](https://arxiv.org/abs/1704.01155)
有一種作法叫做Feature Squeeze,你可以設置很多的filter來保護你的模型:
* input先經過模型產生第一個prediction
* input通過squeeze~1~得到第二個prediction
* input通過squeeze~2~得到第三個prediction
prediction之間如果差異很大,這意味著可能是攻擊照片。
### Randomization at Inference Phase

[論文連結_Mitigating Adversarial Effects Through Randomization](https://arxiv.org/abs/1711.01991)
另一種被動式防禦的作法,將輸入的照片做一些隨機的變動,像是縮放,然後加上邊框,但要注意的是,異動幅度不能過大,避免辨識錯誤。用這種方式讓攻擊的信號失效。
這種被動式的防禦的缺點在於,如果你的防禦機制被知道了,那只要在訓練攻擊信號的時候有加入機制,那攻擊還是可能成功。以第一個作法,加入smoothing filter,這可以想成是模型的第一個layer,如果攻擊方知道了,那只需要加上這一層就一樣可以有機會攻擊成功。
### Proactive Defense

主動式防禦的精神就是找出漏洞,補起來。大概精神如下:
* 以原始資料訓練模型,完成初始模型
* 訓練T次,每一次都找出每一張照片的可能攻擊$\tilde{x}$
* 以找出的$\tilde{n}$做為訓練資料重新訓練模型
這種作法有點像是資料增強的方式,不同的是你的訓練資料就是可能的攻擊資料。再做T次是因為每一次的更新都會造成參數的異動,因此需要多次的處理。
不過這種攻擊還是會有問題,如果你防禦的是A式攻擊,但敵人是B式攻擊的話,那還是會被攻陷。因此,不被知道防禦方法還是一個關鍵。