---
# System prepended metadata

title: 第一週 Adversarial Attack
tags: [機器學習安全特論]

---

# AI 的問題

如果直接的使用 AI，可能會出現一些問題，因為近期的 AI 規模越來越大，複雜度隨之上升，同樣的也就更難去理解 AI，也更難找到 blind-spot。

所以使用 AI 時不只要考慮他的功用，同時也要考慮像是安全等等面向。

## 什麼時候需要考慮到安全

很多時候其實都要，最經典的例子就是自駕車。

>老師提到，MUSK 覺得用光達很愚蠢，所以就採用純 vision 的sensor
>原本老師在博士班時為此賭氣不買他的股票，現在他錯了

# ML 什麼時候失效

雖然 ML 在各個領域都超越了人類，但是這些情況大多是在「well-controlled」的環境下所達成。

## 訓練資料跟測試資料不一樣

ML 在現實生活中往往會失效，原因是因為訓練資料跟實際遇到的資料往往有誤差或甚至不一樣，可能情況有三種：

- Adversarial attacks
    - 壞人把 nois 跟 worst case 做最佳化
- Domain Shift
    - out of domain generalization
    - 出現了跟訓練資料同種但有點特別的情形
    - 例如訓練貓咪圖片，但是測試時出現了稀有少見的貓，或是訓練時沒出現的貓
- Unseen Data
    - out of domain detection
    - 例如訓練貓，但是測試給孔雀

# Adversarial attacks

壞人可以對訓練資料跟測試資料做手腳：

- 對訓練資料：Data Poisoning / Causitive attack
    - 把你的訓練資料加點料，讓模型偏離原本的用途
    - 你可能會想壞人要怎麼對訓練資料動手腳？
        - 經典例子是，微軟曾在 Twitter 推出聊天機器人 Tay
        - 網友可以教他，所以 Tay 就被教成種族歧視分子了
    - 令一個例子是 Backdoor Attack
        - 當你沒有資源訓練模型時，有些公司會提供幫你訓練的服務
        - 但是他就有可能在訓練時對你的資料動手腳
        - 例如 STOP sign 下面多貼一張小黃紙，就會變速限標誌
- 對測試資料：Adversarial Examples / (Evasion Attack or Exploratory Attack)
    - 找到模型的 blind-spot，是今天要介紹的主題
        - 壞人會根據模型的一些資訊，製造出 adversarial noise，使模型把變釋出熊貓變成長臂猿
        - 或是 stop sign 變成最大時速 100 的標誌
    - 雖然在某些情況，這種 digital attack 不容易達成
        - 例如自駕車的辨識系統，前提是你可以駭進自駕車系統
    - 所以另一種方式就是直接對現實物體動手腳
        - 例如人臉辨識系統，然後你戴上特殊眼鏡

:::warning
Adversarial attack 所加上的 noise，通常來說都是肉眼難以分辨的。
:::

:::info
上面有兩種名字的原因是，一個是 ML 領域的名稱，一個是安全領域的人在叫的。
Evasion Attack 直翻叫做逃脫攻擊，來源是以前開發病毒的人，為了躲過防毒軟體時用的名稱
:::

下面介紹對各種模型的 Adversarial Attack。

## Object Detector

上面提到的大多都是騙過「Image Classifier」，但同樣的手段卻不容易對「Object Detector」有影響，例如 Fast R CNN 或 YOLO，可見其 Robust 程度。

但是老師的研究最終還是可以透過其他花紋成功騙過物件偵測模型，方法是透過「ShapeShifter」。

## Image Captioning

對一張圖片產生描述的模型。

一樣可以讓他把 STOP sign 描述成泰迪熊。

## Image Segmentation

把圖片分成你想要的區塊。

一樣可以讓他從道路車景中截出一個小小兵。

## Generative Models

例如 Autoencoder，原本可以拿來把圖片壓縮後，傳給他人再解碼，減少傳輸體積。

但是如果對壓縮的 source 圖片加 noise 再 encode，decode 出來就可能會不如預期，例如很多人臉變成都同一張人臉。

## Text 方面

例如做假新聞的偵測，只要把當中一些詞「換句話說」，他就可以從 100% 假新聞變成 77% 真的新聞。

## 語音辨識 & Malware 辨識

加入些微無法分辨的噪音，讓模型聽錯你講的話。

把有害軟體加一些內容，一樣可以逃過辨識。

## Medical Data

一樣對心電圖加點擾動，可能對醫生來說沒有差異，但是對模型就可以導致誤判。

## 3D (Points) Cloud

3D (Points) Cloud 是透過光學感側器，將物體以三維空間的許多個點表示，呈現出物體的輪廓跟樣子。

但是你可以透過把點做點偏移，或是加一些點，就讓辨識結果不同。

## Reinforcement Learning

例如兩個 Agent 原本在玩攻防遊戲，攻擊方跑到防守方後面的紅線後。

訓練好後，如果讓防守方自己以某種特別的方式摔倒，攻擊方也會自己跌倒。

所以或許你可以下一些奇怪的棋路，讓 Alpha Go 混亂。
>老師說這比較難，因為 Alpha Go 還有搭配 Search 等等更複雜的結構

## Adversarial Reprogramming

你可以把原本一個圖片辨識的模型，變成一個「數格子」的模型。

該論文就是在 Noise 中間留個區塊，裡面可以放有不同格子數的圖片，然後模型就會說該圖片是哪種圖片，例如虎鯊或是金魚。

每種種類對應到幾個格子，像虎鯊對應到 4 個格子；如果你給他辨識中間放 4 個格子的圖片，模型就會告訴你這是虎鯊。

:::info
也就是你可以改變原本模型的功能，讓他做其他的事情
:::

---

:::warning
其實 Adversarial Attack 可以當作是某種 Worst Case Analysis，看看你的模型能不能扛過這種最極端的 noise。
:::

---

# Adversarial for Good

其實 Adversarial Attack 還可以有好的應用。

## Protecting Stealing Art Style

把畫家的畫加上些 noise，防範那些「學習繪圖風格」的模型。

## Protecting CAPTCHA

將圖片加上 noise，以防 CAPTCHA 被突破。

老師的實驗室有在做的語音 CAPTCHA 的保護。

---

# Create Adversarial Examples

在講如何製造前，先講 「Threat Model」。

跟安全有關的論文都會有一個章節介紹 「Threat Model」。

## Threat Model

介紹情境，Attacker 是誰，有什麼目的跟動機，還有能力跟計算資源，對你的系統有多少了解。

## White-box attacks

攻擊者知道你全部的東西：

- 模型架構、權重
- 預處理跟後處理
- 甚至你的防禦機制都知道

這是一般做防禦時會採用的設定，因為要從最糟的情況下驗證 Robust 程度。

## Black-box attacks

攻擊者只知道「少部分的資訊」：

- 用到哪些演算法、特徵
- 模型架構、權重等等

這是一般做攻擊時會採用的設定，畢竟攻擊時不一定知道全部的資訊。

相比白箱，黑箱的 spectrum 比較多元，因為各 paper 可能 attacker 知道的訊息都不一樣。

:::info
還有 gray-box，知道一部分的資訊。
:::

## Transferability

在 DNN 中，如果拿攻擊 A 模型的 noise，去攻擊 B 模型，通常也可以得到不錯的效果，有一個原因是 DNN 模型之間的架構具有相似度。

如果換成是 ML，也多少具有這樣的特性。

## Transfer attack

基於 Transferability，壞人就可以自己 train model，自己根據該 model 做白箱攻擊，然後就可以來攻擊其他類似的模型了。

:::warning
轉移率可能不高，但是還是有方法可以提高轉移率
:::

---

# Formal Problem Definition

概念上來說，就是 task decision boundary 跟 Model decision boundary 之間有誤差。

所以你可以想辦法把靠近 boundary 的資料「推一點點」，讓他雖然依舊處於原本的 task decision boundary，但是卻跨過了 Model decision boundary，導致模型失誤。

:::info
給一個 Classifier $C$ 跟一個 example $x$，找到一個 adversarial example $x'$，使得 $d(x',x)\le \epsilon$，且 $C(x')\ne C(x)$
:::

$d$ 這個距離函數是 application dependent，例如圖片辨識通常會是 $l_p$ norm，文字的話就是語義接近。

數學上為了方便都會使用下面這種 $l_p$ base 的 norm：

$$
||\mathbf{x}-\mathbf{x'}||_p=\left(\sum_{i=1}^{N}|x_i-x_i'|^p\right)^{\frac{1}{p}}
$$

常聽到的例如 L1 norm、L2 norm。

雖然如果要更精確的話，就要自己設計或使用其他的 distance function。

>原來這叫做 $l_p$ base 的 norm

:::warning
如果 $p\rightarrow \infty$，會得到：
$$
||\delta||_{\infty}=\max{|\delta_i|},\ \ i=1,...,N
$$
:::

## Rewrite Problem Definition

跟導數的定義一樣，可以有另一種寫法：

:::info
給一個 Classifier $C$ 跟一個 example $x$，找到一個 adversarial perturbation $\delta$，使得 $||\delta||_p\le \epsilon$，且 $C(x+\delta)\ne C(x)$
:::

距離函數 $d$ 跟上面一樣用 $l_p$：

$$
||\boldsymbol{\delta}||_p=\left(\sum_{i=1}^{N}|\delta_i|^p\right)^{\frac{1}{p}}
$$


- $p=0$：控制 pixels 可以被更改的數量
- $p=1$：控制 pixels 可以更改的量
- $p=2$：控制 pixels 更改量的歐式距離
- $p=\infty$：控制 pixel 最大可以更改的量

:::danger
可能要去查一下這個 p=0 的酷東西

FAST RNN YOLO 等等
:::

## Targeted Attack

比較像是分類時的例子，就是讓分類結果跟原本不同，變成目標的種類：

:::info
給一個 Classifier $C$ 跟一個 example $x$，找到一個 adversarial perturbation $\delta$，使得 $||\delta||_p\le \epsilon$，且 $C(x+\delta)=y'\ne C(x)$
$y'$ 是目標 class。
:::

## Gradient Descent

對於 DNN 模型，在訓練時大多都是對可微的 loss 函數，做 SGD 找到最好的方向去更新權重 $\color{blue}{\boldsymbol{\theta}}$。

$$
\min_{\color{blue}{\boldsymbol{\theta}}}\sum_{\mathbf{x},y\in S}l(\mathbf{x},y;\color{blue}{\boldsymbol{\theta}})
$$

可以發現換成上面的 $\color{red}{\boldsymbol{\delta}}$ 也很簡單，一樣是透過 SGD 找到一個最佳的方向去更新 $\color{red}{\boldsymbol{\delta}}$：

$$
\begin{align}
\text{(untargeted)}&\ \max_{\color{red}{\boldsymbol{\delta}}\in\boldsymbol{\Delta}}l(\mathbf{x}+\color{red}{\boldsymbol{\delta}},y;\boldsymbol{\theta})\\
\text{(targeted)}&\ \max_{\color{red}{\boldsymbol{\delta}}\in\boldsymbol{\Delta}}-l(\mathbf{x}+\color{red}{\boldsymbol{\delta}},y';\boldsymbol{\theta})\\
\end{align}
$$

也就是固定 $\boldsymbol{\theta}$，改成最佳化 $\color{red}{\boldsymbol{\delta}}$。

>[可以複習反向傳播](https://hackmd.io/H3gyQHeHQz-RTTkx-9cuig?view#%E9%80%A3%E9%8E%96%E7%8E%87)

$\boldsymbol{\Delta}$ 是你 $\color{red}{\boldsymbol{\delta}}$ 的範圍。 untargeted 就是拉大差距，targeted 就是縮小跟目標的差距，。

:::warning
可以發現 DNN 模型因為具有反向傳播這種很好算的算法，同樣的也導致他很好被 Attack；反之對於例如隨機森林這種 ML 方法，就不容易 Attack。
:::

# Fast Gradient Method

雖然整體 Neural Network 是非線性，但是今天如果是對很小的 $\color{red}{\boldsymbol{\delta}}$，在局部上就可以近似為線性，因此就可以使用一階泰勒展開，把問題轉換為：


$$
l(\mathbf{x}+\color{red}{\boldsymbol{\delta}},y;\boldsymbol{\theta})\approx l(\mathbf{x},y;\boldsymbol{\theta})+\color{red}{\boldsymbol{\delta}}\cdot \boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})
$$

## L2

如果是 L2 norm 的話，問題就是：

$$
\begin{align}
\text{Maximize：}&l(\mathbf{x},y;\boldsymbol{\theta})+\color{red}{\boldsymbol{\delta}}\cdot \boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})\\
\text{Subject to：}&||\color{red}{\boldsymbol{\delta}}||_2 \le \epsilon\\
\end{align}
$$

之前在做梯度下降時，有說下降最快的方向就是跟梯度「反方向」，下降最快；但是到了這裡，我們為了要差距越大，所以就是跟梯度「同方向」：

$$
\color{red}{\boldsymbol{\delta}}=\epsilon \cdot \frac{\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})}{|| \boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta}) ||_2}
$$

## L$\infty$ / aka Fast Gradient Sign Method (FGSM)

如果今天是：

$$
\begin{align}
\text{Subject to：}||\color{red}{\boldsymbol{\delta}}||_{\infty} \le \epsilon\\
\end{align}
$$


回顧上面：

$$
||\delta||_{\infty}=\max{|\delta_i|},\ \ i=1,...,N
$$

所以就是要讓 $\color{red}{\boldsymbol{\delta}}$ 的每個分量都是 $\epsilon$，但是 $\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})$ 中有些分量可能是正號有些是負號，因此我們必須讓 $\color{red}{\boldsymbol{\delta}}$ 的每個分量跟$\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})$ 每個分量同號：

$$
\color{red}{\boldsymbol{\delta}}=\epsilon\cdot\text{sign}\left(\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})\right)
$$

## L1

如果今天是：

$$
\begin{align}
\text{Subject to：}||\color{red}{\boldsymbol{\delta}}||_{1} \le \epsilon\\
\end{align}
$$

那麼就會是從 $\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})$ 中，走分量最大的那個：

$$
\begin{align}
i^*=&\text{argmax}_i|\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})_i|\\
\delta=&\left\{\begin{matrix}
 \epsilon \cdot \text{sign}(\boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta})_i) & i=i^*\\
 0 & \text{otherwise}
\end{matrix}\right.
\end{align}
$$

由於一次只更動一個值，以圖片來說就是一個 pixel；所以你可以做很多 iteration 來改動一些 pixels

## 線性模型也很脆弱

不要以為 DNN 是因為其非線性的特性讓他脆弱，容易有 blind spot，其實線性模型也可以很脆弱：

$$
\mathbf{w}^T\mathbf{x'}=\mathbf{w}^T\mathbf{x}+\color{red}{\mathbf{w}^T\boldsymbol{\delta}}
$$

例如單純的 binary clssification，雖然 $\color{red}{\boldsymbol{\delta}}$ 很小，但如果是使用 $L_{\infty}$，其對整體分數的影響會是 $\color{red}{\epsilon\cdot ||\mathbf{w}||_1}$，維度越高影響就越大，也就越脆弱。

另外，其實現今的眾多 DNN 模型中，也具有局部線性的特性，也是其容易售攻擊的原因。
>例如 ReLU、Sigmoid 等等 Activation function

:::warning
可以看出其根本的原因是 ML 算法判斷時是透過「分數」，跟人類有所不同，也因而導致其脆弱性。
:::

大多的攻擊其實非常類似，只有以下不同：

- Loss Function
    - 甚至可以對 Loss Function 做 optimization，提高 Transferability
- Constraints
    - 例如上面就是有不同的 $p$ 值
- Optimization Algorithm
    - 例如上面大多都是 GD，但也有可能是使用海森矩陣等等

## Projected Gradient Descent / PGD

大致上就是跑很多次 FGM：

$$
\mathbf{x}^{t+1}=\text{clip}(\mathbf{x}^{t}+\alpha\cdot \boldsymbol{\nabla}_{\mathbf{x}} l(\mathbf{x},y;\boldsymbol{\theta}),[-\epsilon,\epsilon])
$$

但是會去限制 $\boldsymbol{\delta}$ 在一個 $\Delta$ 範圍內，如果超過的話就把他投射到範圍內的另外一邊。
>那個 $\Delta$ 範圍又叫做 $\epsilon$-ball

此外也會從 $\epsilon$-ball 內隨機挑選某一點，作為下一次 iteration 的起始點

:::info
這是目前被認為最強只需要一階微分的攻擊
:::

:::danger
該來去研究那個投射函數 clip 了。
:::

## Carlini Wagner Attack

$$
\begin{align}
\text{minimize：}&||\delta||_p+c\cdot f(x+\delta)\\
\text{s.t.：}&x+\delta\in[0,1]^n
\end{align}
$$

當中的 $f$ 是一個 loss，是採用類似 hinge loss 的東西：

$$
f(x')=\max\left(\max(Z(x')_i:i\ne t)-Z(x')_t,-\kappa\right)
$$

$c$ 是採用 binary search 的方式去搜尋，亦開始會先從很小的 $c$ 去找，如果發現不符合 s.t. 的內容，就會增加 $c$ 的值，反覆恆跳。

:::info
但是比上面的 PGM 慢。
:::

## One / Few Pixels Attack

找到最佳 pixel 的方式不一樣，是用 evolution algorithm。

## Universal Adversarial Perturbation

就是一個 noise 可以攻擊到全部 input。

例如用於影片的物體辨識。

## Fooling Images

使用基因演算法 Evolution Algorithm，去更新 Composition貓Pattern Producing Networks (CPPN)，產生出一些可以被分錯類別的圖。

## Zeroth Order Optimization

黑盒攻擊的另一種，就是去近似出梯度，根據微積分告訴我們：

$$
\frac{\partial f(\mathbf{x})}{\partial \mathbf{x_i}}\approx\frac{f(\mathbf{x}+h\mathbf{e_i})-f(\mathbf{x}-h\mathbf{e_i})}{2h}
$$

## Adversarial Attack Against Human Vision

這篇 paper 他把很多模型做 ensemble，然後最終發現可以成功攻擊所有模型的圖片，其實連人類也都騙到了。

但這通常不是所希望的，通常希望是微小的改變讓人類不容易分辨出來。

---

# 趨勢

現在在 Classifier 的攻擊方，比較多在研究的是 Transferability，因為目前的攻擊方是比防守方厲害得，所以才會著重看能不能從白箱測試研發出的攻擊轉移到其他 model 上面。

---

# 挖坑

:::danger
以下為挖坑地區
:::

- 可以去稍微了解 Fast R CNN 跟 YOLO
- 可以自己推推看 $l_p$ 的 $p=0$ 情況
- 去聊解 PGD 的 clip 函數