---
# System prepended metadata

title: 第十章：來自人類的惡意攻擊 (Adversarial Attack)
tags: [機器學習]

---

# 第十章：來自人類的惡意攻擊 (Adversarial Attack) 
>上課筆記

* 上課影片連結
    * ==[**Adversarial Attack(上)：基本概念**](https://youtu.be/3oHlf8-J3Nc)==
    * ==[**Adversarial Attack(下)：類神經網路能否躲過人類深不見底的惡意？**](https://youtu.be/JZvEzb5PV3U)==

---

## 前言：為何需要關注惡意攻擊？

在機器學習的應用中，除了模型的正確率之外，我們還需考慮模型面對惡意攻擊時的穩健性。現實世界中，許多應用場景會面臨來自人類的惡意：

- **電子郵件過濾系統**：垃圾郵件發送者會想方設法避免被分類為垃圾郵件
- **自動駕駛系統**：交通標誌可能被惡意修改
- **人臉辨識系統**：攻擊者希望避開或冒充他人身份

因此，機器學習模型不僅需要在一般情況下表現良好，更需要能夠在面對惡意攻擊時維持正確性。本節課將介紹機器學習系統中的惡意攻擊及其防禦方法。

---

## 對抗樣本 (Adversarial Examples) 基本概念

對抗樣本是指在原始正常樣本上添加人眼幾乎無法察覺的微小擾動，使神經網路模型產生錯誤預測的樣本。

- **良性樣本 (Benign Image)**：未受攻擊的原始圖像
- **受攻擊樣本 (Attacked Image)**：添加了擾動的圖像

對抗攻擊可分為兩種主要類型：
1. **無目標攻擊 (Untargeted Attack)**：只要模型輸出**不是原始正確類別**即可
2. **有目標攻擊 (Targeted Attack)**：希望模型輸出**特定的目標類別**

案例：將貓的圖片加入細微擾動後，ResNet-50模型將其識別為海星，且信心分數達到100%。
![image](https://hackmd.io/_uploads/SJUQD0UTkx.png)
這種攻擊不僅限於特定情況，同一張圖片可以透過不同的擾動被誤判為任意類別 (如鍵盤等) 。值得注意的是，如果添加普通明顯雜訊，模型仍能做出合理判斷 (如將貓判斷為其他種類的貓) 。

---

## 對抗攻擊的實現方法

### 數學定義與優化問題

對抗攻擊可以數學化表示為解決以下優化問題：

對於一個已訓練好的網路模型 $f$，原始圖像 $x_0$ 有正確標籤 $\hat{y}$：

1. **無目標攻擊**：
   $$x^* = arg \min L(x)$$$$L(x) = -e(y, \hat{y})$$其中 $e$ 可以是[交叉熵](https://hackmd.io/@Jaychao2099/imrobot3#%E4%BA%A4%E5%8F%89%E7%86%B5-Cross-entropy)，目標是**最大化輸出與正確答案的差距**。
2. **有目標攻擊**：
   $$x^* = arg \min L(x)$$$$L(x) = -e(y, \hat{y}) + e(y, y^{target})$$希望輸出同時**遠離正確答案**且**接近目標類別**。
![image](https://hackmd.io/_uploads/rkgGYAL6Jl.png)

同時還需滿足限制條件：$d(x_0, x) \leq \varepsilon$，其中 $d$ 是距離度量函數，$\varepsilon$ 是一個閾值，**確保擾動足夠小，人眼無法察覺 (Non-perceivable)**。

### 距離度量方式
<style>
.two-column-layout {
  column-count: 2; /* Set column number */
  column-gap: 150px;
  max-width: 90%;
  overflow: hidden;
}
</style>

<div class="two-column-layout">

常見的距離度量包括：
1. **L2範數**：$$\|x - x_0\|_2 = \sqrt{\sum_i (x_i - x_{0i})^2}$$
2. **L-$\infty$範數**：$$\|x - x_0\|_{\infty} = \max_i |x_i - x_{0i}|$$

![image](https://hackmd.io/_uploads/SkU_oR8aJl.png)

</div>

**L-$\infty$範數**在實踐中更符合人類視覺感知，因為它限制了每個像素的最大變化值，而不是像素變化的平均值。

---

## 常見求解算法

### 一般梯度下降

最基本的求解方法是使用梯度下降，類似於訓練神經網路：
1. **初始值**：原始圖像 $x_0$
2. **計算損失函數對輸入圖像的梯度**：$\nabla_x L(x_{t-1}) = \left( \left.\frac{\partial L}{\partial x}\right|_{x=x_{t-1}}\right)$
3. **更新圖像**：$x \leftarrow x_{t-1} - \eta \nabla_x L(x_{t-1})$
4. **確保滿足限制條件**：如果 $d(x_0, x) > \varepsilon$，則將 $x$ **投影回**以 $x_0$ 為中心、半徑為 $\varepsilon$ 的的超立方體頂點
![image](https://hackmd.io/_uploads/Skn0T0Laye.png)

### FGSM (Fast Gradient Sign Method)

[FGSM](https://arxiv.org/abs/1412.6572)是一種簡單有效的一步攻擊方法：$$x_t \leftarrow x_{t-1} - \varepsilon \cdot \text{sign}( \nabla_x L(x_{t-1}))$$其中 $\text{sign}$ 函數返回梯度的符號 (1或-1) 。
* FGSM的特點是：
    - **只需一次**梯度計算和更新
    - 攻擊後的圖像位於原始圖像周圍的**超立方體頂點上**

### 迭代式FGSM

通過[多次迭代使用FGSM](https://arxiv.org/abs/1607.02533)可以獲得更有效的攻擊：
1. 初始化：$x^0 = x_0$
2. 迭代更新：$x_t = x_{t-1} - \alpha \cdot \text{sign}(\nabla_x L(x_{t-1}))$
3. 每次迭代後檢查並調整以符合限制條件

---

## 黑箱攻擊 (Black-box Attack)

上述攻擊都是白箱攻擊 (White-box Attack) ，即攻擊者知道模型的參數。而在現實中，攻擊者往往無法獲取完整模型參數，只能進行黑箱攻擊。

黑箱攻擊的主要方法：

1. **代理模型法 (Proxy Network)**：
   - 訓練一個代理模型，使用與目標模型相似的數據
   - 對代理模型進行攻擊，產生的對抗樣本往往對目標模型也有效
2. **模型抽取 (Model Extraction)**：
   - 通過大量查詢目標模型，記錄輸入和輸出
   - 用這些數據訓練自己的代理模型
3. **集成攻擊 (Ensemble Attack)**：
   - 對多個不同模型同時進行攻擊
   - 提高轉移到未知目標模型的成功率
![image](https://hackmd.io/_uploads/rJGiDJP61g.png)

[研究](https://arxiv.org/pdf/1611.02770.pdf)表明，針對某一模型生成的對抗樣本，往往對其他模型也具有攻擊性，這種現象被稱為對抗樣本的遷移性 (Transferability)。
![image](https://hackmd.io/_uploads/rycldkDpJe.png)

---

## 對抗攻擊的本質討論

為什麼對抗攻擊如此容易成功？一種觀點認為："[Adversarial Examples Are Not Bugs, They Are Features](https://arxiv.org/abs/1905.02175)"。這意味著：

- 攻擊成功的根本原因可能**來自數據**而非模型
- **不同模型學習到的特徵相似**，因此對相似的擾動也有類似的反應
- 對抗樣本揭示了模型學習到的特徵與人類認知的差異

在高維特徵空間中，分類邊界往往非常"窄"，微小的特定方向移動就可能跨越決策邊界。
* [實驗](https://arxiv.org/pdf/1611.02770.pdf)結果：
    * 橫軸：高維特徵空間中的**特定**方向
    * 縱軸：高維特徵空間中的**隨機**方向
    * 藍色區域：輸入$x$可被辨識為小丑魚
![image](https://hackmd.io/_uploads/H1EvKkvTJg.png)

---

## 特殊的對抗攻擊形式

### 單像素攻擊 ([One-Pixel Attack](https://arxiv.org/abs/1710.08864))

僅通過修改圖像中的一個像素，就能使模型誤判。雖然這種攻擊成功率不如添加整體擾動的方法高，但表明了神經網路的脆弱性。
![image](https://hackmd.io/_uploads/r1z4i1v61g.png)

### 通用攻擊 ([Universal Adversarial Attack](https://arxiv.org/abs/1610.08401))

尋找一種通用擾動模式，添加到任何圖像上都能使模型誤判。實驗證明這種攻擊是可行的，這對於實際系統的安全有重大意義。
![image](https://hackmd.io/_uploads/SyqKsJvpkx.png)

### 物理世界攻擊 (Physical World Attack)

將對抗攻擊從數字世界帶入現實世界，如：
- [特製眼鏡](https://www.cs.cmu.edu/~sbhagava/papers/face-rec-ccs16.pdf)：戴上後可以欺騙人臉識別系統
- [改變交通標誌](https://arxiv.org/abs/1707.08945)：通過添加特定貼紙或修改形狀，誤導交通標誌識別系統

物理世界攻擊需要考慮多方面因素：
1. 從**多角度**觀察時的穩健性
2. 攝像頭**解析度**限制
3. 物理製作過程中的**顏色偏差**

### 對抗重編程 ([Adversarial Reprogramming](https://arxiv.org/abs/1806.11146))

將預訓練模型"重新編程"，使其執行與原始任務不同的功能。例如，讓ImageNet分類器變成計數器數方塊數量，而數量對應特定結果。
![未命名](https://hackmd.io/_uploads/BJjJpkP6kl.jpg)

### 後門攻擊 ([Backdoor Attack](https://arxiv.org/abs/1804.00792))

在模型**訓練階段**植入後門，使模型對特定樣本產生特定錯誤，而對其他輸入保持正常行為。這種攻擊**特別危險**，因為：
- 訓練數據和標籤看起來都是正常的
- 模型在一般評估中表現良好
- 只有當特定觸發輸入出現時才會顯現問題
![image](https://hackmd.io/_uploads/S1FDpywakl.png)
>[!Warning]留意未知來源的 dataset!

### Beyond Images：

Adversarial Attack 不限於圖像領域，還適用於：
* **語音處理**：在語音信號中添加微小擾動，使語音識別系統誤解內容。例如，將真實語音識別為合成語音。
* **[自然語言處理](https://arxiv.org/abs/1908.07125)**：修改文本 (如替換同義詞)，欺騙文本分類器。例如，改變情感分析結果。
![image](https://hackmd.io/_uploads/ryuS7gwaJx.png)

---

## 防禦策略

### 被動防禦 (Passive Defense)

在不改變已訓練模型的前提下，通過**添加預處理步驟**來削弱攻擊效果：

1. **輸入變換**：
   - **輕微模糊化**：簡單有效，可以破壞精心設計的對抗擾動
   - **[圖像壓縮/解壓縮](https://arxiv.org/abs/1704.01155)**：如JPEG壓縮，可以去除微妙擾動
![image](https://hackmd.io/_uploads/r1lERkwTyg.png)
2. **基於[生成器](https://arxiv.org/abs/1805.06605)的防禦**：
   - 使用生成模型重建輸入圖像
   - 生成過程可能會丟失對抗擾動
![image](https://hackmd.io/_uploads/HkDsAJvayl.png)

**被動防禦的缺點是一旦攻擊者知道防禦機制，就可以設計繞過該機制的攻擊。**

3. **[隨機化](https://arxiv.org/abs/1711.01991)防禦**：
   - 引入隨機元素，如隨機縮放、隨機裁剪
   - 即使對手知道防禦方法，也難以預測具體轉換
![image](https://hackmd.io/_uploads/SJ1EJgw6kx.png)

### 主動防禦 (Active Defense)

通過**改變模型訓練過程**，提高模型抵抗攻擊的能力：

1. **對抗訓練 (Adversarial Training)**：
   - 在訓練數據中添加對抗樣本
   - 迭代過程：訓練模型→生成對抗樣本→重新訓練
   - 步驟：
       1. 使用原始數據 $\{(x_1,\hat{y}_1),...,(x_N,\hat{y}_N)\}$ 訓練初始模型
       2. 對每個訓練樣本 $x_i$ 生成對抗樣本 $\tilde{x}_i$
       3. 將對抗樣本加入訓練集，保持原有標籤
       4. 重新訓練模型
![image](https://hackmd.io/_uploads/Bkcgegw6yx.png)

   對抗訓練可視為一種數據增強方法，即使沒有對抗威脅，也能提高模型的泛化能力。

   - 對抗訓練的缺點：
       - 計算成本高
       - 可能只對特定類型的攻擊有效
       - 新的攻擊方法可能繞過防禦

2. **免費對抗訓練 ([Adversarial Training for Free](https://arxiv.org/abs/1904.12843))**：
   - 減少對抗訓練的計算開銷
   - 在相同的前向/後向傳播過程中計算梯度

---

## 結語

對抗攻擊與防禦是一個持續演進的領域，新的攻擊方法和防禦機制不斷被提出。目前，完美的防禦方法尚未出現，而攻擊方法似乎總是領先一步。

在應用機器學習系統時，尤其是在安全敏感領域，必須考慮潛在的對抗攻擊風險，並採取適當的防禦措施。對抗樣本也使我們深入思考神經網路學習的本質，以及模型與人類認知之間的差異。

隨著技術的發展，攻防雙方的"軍備競賽"將繼續，最終誰勝誰負還有待觀察。

---
回[主目錄](https://hackmd.io/@Jaychao2099/aitothemoon/)

