---
# System prepended metadata

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

---

:::info
作業：
- 可以把那五個模型弄成一個 ensemble 模型，來達到一次攻擊五個的目的
- 通常 single step method 比 iterative method 更有 transferability
    - 或者也可以參考其他增加 transferability 的方法，老師的實驗室也有做
:::

## Black-box defense 的用途

雖然黑箱防禦得以成功是基於攻擊者不知道你的某些「祕密 secret」，但是一旦攻擊者知道，那就完蛋了。

但是黑箱防禦的用途是比較出來的，因為白箱防禦通常會伴隨 accuracy drop 以及 cost 變高，因此對於大規模且立即使用的情況，還是會採用黑箱防禦。

# Approach in Defense

- Data pre-processing
    - 也就是弄一個外掛只對 input 做處理，不花心力去重弄 model
- Model hardening
    - 這就是對 model 做些修改，例如更改結構，或是更改 train 的手法、參數等等
- Detection
    - 在原本的 model 之外有多一個 component 負責檢查有沒有受到攻擊

# pre-processing based approach

下面介紹一些 pre-processing based 的方法。

## SHIELD & JPEG

這是老師在 intel 實習時的論文。

方法就是在資料傳進網路之前，經過 JPEG 的壓縮處理。

JPEG 的壓縮特性就是人肉眼難以察覺，而這些經過微調的 pixel 剛好大多也是 Adversarial attack 會改動的 pixel，也就因此進行了消除。

### 壓縮幅度

JPEG 有所謂的壓縮幅度，100 是沒有壓縮，1 是極致壓縮。

而老師的研究發現，可以對圖片做更積極的壓縮，雖然人肉眼可能已經難以分辨，但是機器依舊分辨的出來，也就沒有降低 Accuracy，更是很好的消除 Adversarial attack。

### Random

但是老師說攻擊者一就有可能進行攻擊：JPEG 當中的難點在於不可微的 step function，但是只要攻擊者用一個可微的近似函數，就一樣可以透過 FGD 等方式攻擊成功。

因此老師他們就加入了隨機的元素，他們把圖片對每 8x8 的範圍，隨機的挑選一個壓縮幅度的值，可能有些是 20 有些是 80，讓攻擊者更難去近似出帶有隨機的版本。


## UnMask：Knowledge-Based Defense

這個是老師跟實驗室一起弄得；是一個灰盒測試，防守方的祕密是除了 Image Classifier，有偷偷外掛一個 Object Detecter。

一旦被攻擊，例如一台腳踏車被說成鳥，此時物件偵測器就會檢查圖片中有什麼物件，例如腳踏車的坐墊，輪胎，龍頭等等，然後看看這些物件跟「鳥」應該會出現的物件之間的交集大概如何，以此檢測出發生攻擊；亦或是由此還原出原本的物體。

### 缺陷

首先對於內容廣泛的資料集，物件偵測器需要的「Annotation」會十分龐大，因此不適合大規模使用。

此外如果遇到 ILL Defined Problem，也就是圖片中同時出現鳥跟腳踏車，那就真的不知道該算錯或對了。

### 攻擊方

在不知道有外掛物件偵測器得情況下，就很難除了讓 Classifier 辨識出錯，同時也讓 Object Detector 偵測成一樣的錯的物件。

## Defense-GAN

先用健康的資料訓練出一個只看過正常資料的 GAN，也就是說他只會產生正常的圖片。

然後用這個 GAN，透過跟生成 ADX 一樣的手法(FGD)，去生成出一張跟 ADX 最像的資料，然後改成用這個 GAN 生成的資料去做分類。

生成的時候是會一直跑一個迴圈，直到達到某個 threshold，而攻擊者在這裡就會遇到把 loop 展開，卻導致 Gradient 消失的問題。


:::warning
- 黑箱防禦可以套用一句在安全領域的俗諺：「Security through obscurity」，也就是安全是建立在別人的不知情之下，一旦對方哪天知道了你的祕密，你就不再安全了。
    - 只可以是應急的用途
- 黑箱防禦也難以去評估，因為你自己球員兼裁判，自己說攻擊者不知道哪些資訊

因此黑箱防禦並不是現在研究的方向。
:::

:::info
老師說今年的 CPPR 有一個對 fundation model 攻擊的競賽，老師說 final project 沒有想要弄得話，可以考慮弄這個。
:::

---

## White-box defense

幾乎每天都有一篇白箱防禦的論文。

大多數的論文都說自己的防禦很強，但是通常過幾天就被攻破了：

- 原因除了是更強的攻擊出現了
- 另一個原因是 Evaluation 做的不夠全面

# White-box defense 失敗的原因

上面是從研究的一開始到最近

## 誤以為是 Overfitting

一開始研究員以為是模型發生 overfitting，所以使用了諸如 Dropout 等防止 Overfitting 的方法。

但是這些手段對 ADX 並沒有效果。

## 採用 Weight Decay

但也有一些例如 較大程度的 Regularization 對 ADX 有效果，但同時也因為 underfitting 降低太多 Accuracy。

## Cropping 等預處理方法

如果攻擊者不知道你有做一些預處理，例如 Cropping，那麼他有可能對整張圖片都加 noise ，但是卻因為 Crop 只剩下中間，導致攻擊不成功。

可是一旦攻擊者知道了你有做哪種預處理，例如 Cropping，他就可以對只在你 Cropping 的區域加 noise，這樣依然可以攻擊成功。

## Adversarial Training with weak attack

待會的重頭戲，大致上就很像是用弱病毒作為疫苗。

但是並不能對普遍的攻擊演算法做防禦，也就是一旦遇到強的攻擊就會失效。

## Defense Distillation

原本看起來可以可以普遍的防禦，但是後來發現只是幻覺。

其核心方法就是使用 Distillation。

Distillation 最早是拿來做模型的壓縮：

- 先訓練好一個 initial 模型，其中 Label 是用 one hot 編碼
- 然後接著在訓練一個較小的模型，Label 則改成用剛剛 initial model 預測出來的機率分佈作為 label
    - 因為 initial model 提供了機率分佈這樣額外的訊息
    - 所以通常只需要較小的 model 就可以訓練得很好

而拿來做防禦的話，兩個就一樣大，然後拿 Distilled 的 model 來防禦。

原本以為他什麼都能防，但是後來就被 Transfer 的技巧給破解了。

:::danger
Distillation 是啥 :_ )
:::

## Adversarial Logit Pairing (ALP)

也是當初看起來可以可以普遍的防禦，但是後來發現只是幻覺的例子。
>是 GAN 發明人其中一人的 Paper

所謂的 Logit Pairing 就是將訓練的 Loss 中加入 $\lambda\cdot L(f(x),f(x'))$ 這個 Logit 函數作為 REG。
>概念上是希望兩者差距越小越好

但是後來被高 iteration 次數的 PGD 給破解了，因為那段時候 PGD 都流行 40 次左右，所以作者才沒有在 Evaluation 的時候檢驗到。

:::warning
老師說在看防禦的 paper 時要注意，十分小心作者對 Evaluation 到底有沒有做好，不要因為作者是大佬就一昧的相信。
:::

## Adversarial Training with strong attack

這是目前最終極的方法，但是無法普遍的適用所有的 threat model。

例如可以很好防禦 $l_2$ based，但是卻無法防禦 $l_{\infty}$ based。

---

# Obfuscated Gradients

Athalye 這位大佬認為上面那麼多原本以為有用最後卻是幻覺的原因，是因為大多都只是在操弄 Gradient，讓 ADX 更難透過 GD 的方式找到。

但也終究是比較難找到而已，不是找不到。

下面是作者提出的三種操弄方法：

- Shattered Gradient
    - 把梯度藉由不可微函數弄不見
- Stochastic Gradient
    - 把梯度加上一些隨機性
- Exploding & Vaninshing Gradient
    - 透過 for loop 的操作，使攻擊者在攻擊時一旦把 loop 展開
    - 梯度會在過程中爆炸或消失

並且他在 2018 年會進 ICLR 報告白箱防禦的 9 篇 paper 前，就先發表一篇 [paper](https://arxiv.org/pdf/1802.00420.pdf) 說有 6 個完全是使用 Obfuscated Gradients 的方式，也因此把他們都弄倒了：

- 有一篇則是部分 Obfuscated Gradients，所以只弄到 55% 
- 另外兩篇是做 Adversarial training，這才算是真正有意義的

## 如何辨識是不是 Obfuscated Gradients

只要發生以下情況，就應該是使用了 Obfuscated Gradients

- One-step attack 比 iterative attack 好
    - 因為理論上越多次 iteration 應該要有更強的效果
- 黑箱攻擊比白箱攻擊好
    - 代表 Evaluation 沒做好
- 任意攻擊沒辦把百分百攻擊成功
    - 理論上沒有範圍限制的攻擊應該要可以百分百攻擊成功 
- 原本拿來攻擊的 ADX 無法成功，但只要在他附近隨機找找，就找到了 ADX
- 增加攻擊(noise)強度卻沒有增加成功率
    - 理論上攻擊強度越高成功率會越高
    - 但如果兩者呈現驟升等奇怪邊界，就是有問題

## 如何破解 Obfuscated Gradients

- Backward Pass Differentiable Approximation (BPDA)
    - 首先 Forward pass 一遍原本的網路
    - 接著將當中不可微的部分換成可微的近似函數，然後開始傳統藝能
    - 舉例來說把 JPEG 壓縮換成等身函數
    - 簡單來說就是反向傳播時，把不可微的部分換成可微的近似
- Expectation over Transformation
    - 這個是處理帶有 stochastic 防禦的方法
    - 在原本要最小化的部分，直接加入隨機的元素
    - $\min_{x}f(x)\rightarrow \min_{x}E_{t\sim T} f(t(x))$
    - 原本只帶入 $x$，現在換成帶入 $t(x)$
    - $t$ 是以某種分佈從 $T$ 這個「各種轉換的集合」中取樣而來
    - 簡單來說就是期望在各種隨機的轉換下的可以攻擊的很好

---

# Adversarial Training

標準的訓練如下：

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

現在改成是要帶有 $\color{red}{\boldsymbol{\delta}}$ 的情況下做最佳化：

$$
\begin{align}
\min_{\color{blue}{\boldsymbol{\theta}}}\sum_{\mathbf{x},y\in S}\max_{\color{red}{\boldsymbol{\delta}}\in\boldsymbol{\Delta}}l(\mathbf{x}+\color{red}{\boldsymbol{\delta}},y;\color{blue}{\boldsymbol{\theta}})\\
\end{align}
$$

但是有 min 又有 max，這不是一個簡單的問題。
>老師說這是一個 NP hard 的問題

## Approximation

因此大多的做法都是分成兩部做來做近似：

- 先做內部的 max，也就是先找到可以最大化 loss 的 $\color{red}{\boldsymbol{\delta}}$
- 接著再找到如此 $\color{red}{\boldsymbol{\delta}}$ 之下，可以使 loss 最小的 $\color{blue}{\boldsymbol{\theta}}$

## Danskin's Theorem

有個理論向我們保證：

- 如果 $l$ 對 $x$ 跟 $\theta$ 是連續可微的
- 而且內部的 max 也有找到最大值
- 那麼這樣分成兩部做得到的近似值會是最佳解

但是實際上：

- 我們找內部的 max 的時候就已經因為非線性的特性，只能得到近似解
- 加上 $l$ 的內部使用的神經網路，具有很多非線性的結構，像是 ReLU

因此實際上這個做法並沒有任何理論保證，上面的理論頂多給我們概念上可以這樣做。

**但是實驗上，只要 attack 效果夠強，其結果都還挺不錯的。**

## Adversarial Training with FGSM

最一開始內部的 max 就是透過 FGSM 來獲得。

但是後來發現因為 FGSM 相比 PGD 比較弱，這樣訓練出來的網路只扛得住 FGSM 的攻擊，但是扛不住 PGD 的攻擊。

- 比較弱的原因是因為 FGSM 是個 One-Step 攻擊，通常很快就收斂了，沒辦法成功的找到 ADX。
- 同時也容易讓模型產生 label leaking 問題：模型在 ADX 的正確率反而比較高。
    - 因為模型在訓練時反而記住只要有這些 noise 的，就是某某類別
    - 反之 PGD 這種多段式更新的，就不容易有這種問題

## Adversarial Training as Regularization

Adversarial Training 可以看作是一種正則化。

用 linear model train MNIST 的實驗可以看出，加上 ADX 訓練後權重變 sparse 了，這個效果跟 L1 不謀而合。

而我們確實可以透過最簡單的 linear model，去證明 FGSM 效果就是 L1 REG

並且不同的 p 值會對應到不同的 norm，例如上面 FGSM 的 $p=\infty$，其就是對應到 1 norm；如果 p 是 2，就是對應到 2，
>p 對應到 q norm，其中 $\frac{1}{p}+\frac{1}{q}=1$

## Double Backpropogation

上面的關聯在非線性就不成立:(

經驗上，會加入 input 的梯度，作為一種正則化：

$$
\min_{\color{blue}{\boldsymbol{\theta}}}\sum_{\mathbf{x},y\in S}l(\mathbf{x},y;\color{blue}{\boldsymbol{\theta}})+\lambda\cdot ||\nabla_{x}l(\mathbf{x},y;\color{blue}{\boldsymbol{\theta}})||_1
$$

## Model Capacity

除了夠強的攻擊訓練，模型的「Capacity」也很重要。

原本 linear model 可以做得很好的資料，但是今天為了應對 ADX，有時就無法只靠 linear model 來抵抗，必須改用 non linear 的 model 才行。

## 目前的問題

- PGD 的 Adversarial attack 目前訓練太花時間，無法用在大規模的模型上
    - 每個 iteration PGD 都要花跟 model 更新差不多的時間
    - 但是 PGD 通常需要 20 個 iteration 以上

## Faster Adversarial Training

既然 PGD 基本上是 FGSM 加上隨機初始化，所以就有人直接用 FGSM 加上隨機的初始化，同時搭配一些供乘上的技巧，像是使用 Cyclic learning rate 動態調整學習率，跟 Mixed-precision arithmetic，混用不同精度的浮點數。

## Stronger Adversarial Training

除了上面提到的 ALP，另外還有像是：


- ALP 新版：上面的是被破解的版本，這個則是計算原本資料跟 ADX 的 $\mathbf{p}$ 差距的 L2 範數
- TRADES：使用 KL divergence 計算 $\mathbf{p}(\mathbf{x},\boldsymbol{\theta})$ 跟 $\mathbf{p}(\mathbf{\hat{x}'},\boldsymbol{\theta})$ 的相似度
    - $\mathbf{\hat{x}'}$ 是 ADX，$\mathbf{p}$ 是 softmax 函數

---

# 如何知道自己的防禦是好的？

## 定義明確的 threat model

- 攻擊者知道什麼？擁有什麼能力跟資源，或是限制為何？
- 使用什麼資料集
    - 因為現在依舊沒有可以普遍用於所有資料集的 defender
    - 所以建議先以某個資料集為主

## 把過程明確的寫下來

甚至最好把你的 code 丟上網，讓其他人幫你檢驗。

## Evaluation

- 一定要有一個章節是設計 Adaptive attack
- 檢查有沒有不小心用到 obfuscated gradients
    - 可以使用上面的檢查方法
- 嘗試不同的超參數
