---
# System prepended metadata

title: 【機器學習 2022】08-09 自然語言處理上的對抗式攻擊-1
tags: [機器學習]

---

20251014 筆記，內容可能有錯，請參考來源影片。

[李宏毅機器學習2022影片](https://www.youtube.com/playlist?list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8)


[【機器學習 2022】自然語言處理上的對抗式攻擊 (由姜成翰助教講授) - Part 1](https://www.youtube.com/watch?v=z-lRPFFYVJc&list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8&index=8)


[【機器學習2022】自然語言處理上的對抗式攻擊 (由姜成翰助教講授) - Part 2](https://www.youtube.com/watch?v=68lwXWFzCmg&list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8&index=9)


### 【機器學習 2022】自然語言處理上的對抗式攻擊 (由姜成翰助教講授) - Part 1 大綱

### I. 簡介與背景 (Introduction)
*   NLP 攻擊所需具備的前提知識。
*   NLP 輸入空間（離散 tokens）與 CV/Audio 輸入空間（連續向量）的根本差異。

### II. Evasion Attacks and Defenses
*   **Evasion Attacks**的定義與實例。
*   **Evasion Attacks的四大要素:**
    1.  目標 (Goal)。
    2.  轉換 (Transformations) (詞彙層級與字符層級)。
    3.  限制 (Constraints) (重疊性、文法性、語義保持)。
    4.  搜尋方法 (Search Method) (貪心搜尋、基因演算法)。
*   針對Evasion Attacks的防禦策略 (對抗訓練、異常偵測)。


---

### I. 簡介與背景 (Introduction)

#### 1. NLP 攻擊的前提知識
要完全理解本課程，要具備對多個基礎概念的了解：
*   **對抗性攻擊** (Adversarial Attack)。
*   **可解釋性人工智慧** (Explainable AI)。
*   **異常偵測** (Anomaly Detection)：因為對抗樣本本身就是一種異常的東西，需要偵測。
*   **預訓練語言模型** (Pre-trained Language Models, PLM)，特別是 BERT 和 GPT。
*   **深度學習處理人類語言** (Deep Learning for Human Language Processing)。

#### 2. CV/Audio 與 NLP 輸入空間的根本差異 (Slides 25-26)
過去的對抗性攻擊主要集中在影像處理 (CV) 或聲音 (Audio) 上，但 NLP 攻擊非常不一樣。

| 特性 | CV / Audio (影像/聲音) | NLP (自然語言處理) |
| :--- | :--- | :--- |
| **輸入空間** | **連續的時空空間**，向量 $\mathbb{R}^n$。 | **離散的空間**，由單詞 (Words) 或 tokens 組成。 |
| **數值範圍** | 影像像素在 0 到 255 之間；聲音數值在 $\pm 32678$ 之間。 | 離散 tokens 必須透過 **Word Embedding** 轉換成高維空間的連續向量才能輸入模型。 |
| **攻擊方式** | 在連續的輸入上添加**難以察覺的微小雜訊 (noise)**，通常使用梯度微分技術。 | 由於只能操作外部的離散 tokens，**不可能直接在 Word Embedding 上擾動**。攻擊必須透過在**句子結構上**來擾動。 |

### II. Evasion Attacks 

Evasion Attacks 修改輸入文本，讓模型的預測結果被破壞，但對**人類而言**，修改後的輸入與原始輸入的預測結果不應有改變。

#### 1. 對抗樣本實例 (Adversarial Example Illustrations)
*   **CV 範例 (熊貓)：** 原始影像模型判斷為熊貓。加上肉眼難以察覺的雜訊後，模型卻以高信心度判斷為長臂猿 (Gibbon)。
*   **NLP 實例：**
    *   **Sentiment Analysis:** 負面評論，僅將一個單詞從單數改為複數（加 's'），模型立即判斷為正面評論。
    *   **Dependency Parsing:** 替換句子中的一個詞（如將 `still` 換成 `quite`），導致模型輸出的句法樹結構完全錯誤。
    *   **人類的感知差異：** 在 NLP 中，對抗樣本的擾動雖然可能使句子的詞彙不同，但只要**不影響人類對最終語義或文法結構的預期判斷**，就視為合理的擾動。

#### 2. Evasion Attacks的四大要素 
生成對抗樣本需要考量四個核心要素：

#### A. 目標 (Goal)
攻擊者希望達到的目的。
*   **非目標分類 (Untargeted Classification):** 讓模型的預測結果爛掉即可，不需指定錯誤的類別。例如，讓科技新聞被誤分類為體育或世界新聞。
*   **目標分類 (Targeted Classification):** 指定模型將具有真實類別 A 的樣本誤判成類別 B。
*   **Universal Suffix Dropper:** 在機器翻譯中，插入一個觸發字串，使模型忽略該字串後面的所有內容。
*   **Wrong Parse Tree:** 產生一個錯誤的依存句法樹。

#### B. 轉換 (Transformations)
如何修改原始句子以產生潛在的對抗樣本。

**a. 詞彙層級轉換 (Word Level)**
1.  **WordNet 同義詞替換：** 使用 WordNet 找同義詞來替換，以保持語義。缺點：WordNet 無法考慮詞彙在特定語境下的多義性，可能導致替換後語義不符。
2.  **嵌入空間替換 (Embedding Space Substitution):**
    *   在詞嵌入空間中，尋找目標詞 $\mathbf{e}^*$ 附近的 $k$NN (K-Nearest Neighbors) 或 $\epsilon$-ball 內的詞進行替換。
    *   **Counter-fitted GloVe Embedding Space：** 這是透過語言學約束訓練的嵌入空間，目的是將**同義詞拉近，反義詞推遠**，以提高替換的準確性。
3.  **BERT 語言模型替換：**
    *   **MLM 預測 (Masked Language Modeling):** 將目標詞遮罩 (mask)，讓 BERT 預測最有可能的替換詞。結果可能產生與原詞義完全相反的詞。
    *   **重構 (Reconstruction, No Masking):** 不遮罩目標詞，利用 BERT 預測該位置最有可能出現的詞。這種方法產生的候選詞與原詞在嵌入空間中更接近。
4.  **詞形變化 (Inflectional Form):** 替換動詞、名詞或形容詞的 inflectional morpheme，這不會改變單詞的基本含義，但可能改變其詞性 (POS)。
5.  **梯度替換 (Gradient-based Substitution)：** 
    *   計算損失函數 $\mathcal{L}$ 對目標詞嵌入 $\mathbf{e}_{\mathbf{w}^*}$ 的偏微分 $\nabla \mathcal{L} / \nabla \mathbf{e}_{\mathbf{w}^*}$。
    *   使用**一階泰勒級數近似 (First Order Approximation)** 來估算將 $\mathbf{e}^*$ 替換為候選詞 $\mathbf{e}^{+}$ 時，損失函數的變化量：
        $$(\mathbf{e}^* - \mathbf{e}^+) \cdot \frac{\nabla \mathcal{L}}{\nabla \mathbf{e}_{\mathbf{w}^*}}$$
    *   選擇能**最大化損失**（使損失改變最大）的 $k$ 個候選詞 $\mathbf{e}_{\mathbf{w}_k}$ 進行替換。
6.  **插入與刪除：** 插入可使用 BERT MLM 在句子特定位置插入詞彙；刪除 則是將句子中的詞彙移除。

**b. 字符層級轉換 (Character Level)**
直接在字符層面進行擾動：
*   **交換 (Swap):** 交換相鄰的字符（如將 `the` 換成 `tbe`）。
*   **替換 (Substitution):** 替換字符，攻擊者常利用鍵盤上位置相近的字符進行替換，模擬打字錯誤 (如將 `t` 換成 `y`)。
*   **刪除 (Deletion)** 或 **插入 (Insertion)** 字符。
*   字符層級的擾動對人類來說可能容易理解或忽略，但對模型來說是一個強大的攻擊。



### 【機器學習 2022】自然語言處理上的對抗式攻擊 (由姜成翰助教講授) - Part 2 大綱

### I. 限制 (Constraints)
*   目標：確保擾動樣本對人類而言是「合理」的。
*   三個維度的限制：結構重疊性 (Overlap)、文法性 (Grammaticality/PPL)、語義保持 (Semantic Preserving)。

### II. 搜尋方法 (Search Method)
*   目標：在滿足限制條件下，高效地找到最佳擾動組合。
*   主要方法：貪心搜尋 (Greedy Search)、詞彙重要性排名 (WIR)、基因演算法 (Genetic Algorithm)。

### III. 逃避式攻擊範例與生成器 (Examples and Generators)
*   典型攻擊案例（TextFooler, BERT-Attack, Universal Trigger）。
*   **技術挑戰：自編碼器生成對抗樣本**與 **Gumbel-Softmax 重參數化技巧**。

---

### I. 限制 (Constraints) 

限制條件的目的是告訴攻擊者，一個**合理的對抗樣本**應該滿足什麼樣的條件。這些限制與任務的目標高度相關。

#### 1. 重疊性 (Overlap)
衡量原始樣本和擾動樣本之間的結構相似性。

*   **Levenshtein 編輯距離 (Edit Distance):**
    *   計算原詞彙與替換後詞彙之間的編輯操作（插入、刪除、替換）數量。
    *   雖然例子通常展示字符層級（如從 `kitten` 到 `sitting`），但在攻擊中也可以用於計算**詞彙層級**的距離。
*   **最大修改詞彙百分比 (Maximum Percentage of Modified Words):**
    *   限制句中被修改的詞彙數量佔總詞彙數量的百分比，以維持高重疊度。

#### 2. 文法性 (Grammaticality)
確保擾動後的句子在文法上是可接受的。

*   **詞性 (POS) 一致性：**
    *   要求替換後的詞彙與原詞彙的詞性 (Part-of-Speech) 應保持一致。例如，將動詞替換為名詞通常是不可取的，除非該替換符合特定的文法規則。
*   **文法錯誤數量：**
    *   使用外部工具來評估句子的文法正確性。
*   **Fluency / Perplexity:**
    *   使用預訓練語言模型（如 GPT-2）來評估句子的流暢度。
    *   **Perplexity 數值越低，句子越流暢**。
    *   攻擊會設定一個 Perplexity **閾值**，如果生成的句子 Perplexity 超過該閾值（數值變大，代表流暢度變差），則認為它是一個不合法的擾動，因為它聽起來不自然。

#### 3. 語義保持 (Semantic Preserving)
確保擾動後的句子語義沒有發生實質性改變。

*   **替換詞的嵌入距離相似性：**
    *   檢查替換詞的詞嵌入與原詞的詞嵌入之間的相似性（例如 $\cos \theta_{A}$）。
*   **通用句子編碼器 (Universal Sentence Encoder):**
    *   這是一種更強大的語義檢查方式。
    *   將原始句子和擾動句子分別丟入 Universal Sentence Encoder 模型中，取得**句子嵌入 (Sentence Embedding)**，然後計算這兩個嵌入之間的**餘弦相似性 (Cosine Similarity)**。
    *   攻擊通常會要求餘弦相似度必須高於某個預設閾值（例如 0.82），以確保語義被保留。

### II. 搜尋方法 (Search Method) 

搜尋方法負責在滿足所有限制條件的前提下，從眾多轉換可能性中找到最有效的擾動，以達到攻擊目標。

#### 1. 貪心搜尋 (Greedy Search)
*   **機制：** 在句子的每個位置上，評估所有可能的轉換所帶來的分數（例如，模型損失的變化或正確類別機率的下降）。
*   **替換順序：** 選擇使損失變化最大（即最有利於攻擊）的轉換，並依分數**遞減**替換單詞，直到模型的預測結果翻轉。

#### 2. 帶有詞彙重要性排名的貪心搜尋 (Greedy Search with Word Importance Ranking, WIR)
WIR 是一種優化的貪心搜尋方法，它只針對句子中**最重要**的詞彙進行嘗試替換。

*   **步驟一：計算詞彙重要性：**
    *   **Leave-One-Out (LOO) 方法：** 移除句子中的某個詞彙，觀察模型對**原始正確類別**的預測機率 $p$ 下降了多少 ($\Delta p$)。機率下降越多，表明該詞對正確分類的貢獻越大，因此**越重要**。
    *   **梯度 (Gradient) 方法：** 計算正確類別輸出對詞嵌入的**梯度大小** ($\partial y_{correct} / \partial e_{w_i}$)。梯度越大，表示該詞彙對分類結果的影響越大，因此越重要。
*   **步驟二：替換：**
    *   從排名**最重要**的詞彙開始，依次嘗試替換。
    *   在該詞彙的所有候選替換詞中，選擇能讓模型對**正確類別的機率最低**的那個詞進行替換，從而實現攻擊。
    *   這個過程是**迭代且循序漸進**的：一旦成功替換一個詞，就鎖定該詞，然後轉向下一個最高排名的未替換詞，直到攻擊成功。

#### 3. 基因演算法 (Genetic Algorithm)
這是一種基於進化和選擇的優化方法。

*   **核心概念：** 尋找最適合環境壓力（即讓分類器預測錯誤）的個體（對抗樣本）。
*   **適應度 (Fitness)：** 衡量一個對抗樣本讓模型預測錯誤類別的機率有多高。
*   **操作步驟：**
    1.  **選擇 (Selection)：** 根據適應度，選出兩個parents。
    2.  **交叉互換 (Crossover)：** 將兩個parents在每個位置隨機選擇詞彙，產生一個新的子代。
    3.  **突變 (Mutation)：** 對新產生的子代進行額外的轉換操作。
    4.  不斷循環迭代，直到攻擊成功。

### III. 逃避式攻擊範例與生成器 (Examples and Generators)

#### 1. 典型攻擊方法總結
| 攻擊名稱 | 搜尋方法 | 轉換 (Transformation) | 限制 (Constraints) |
| :--- | :--- | :--- | :--- |
| **TextFooler** | WIR 貪心搜尋 | Counter-fitted GloVe 替換 | 詞嵌入距離、USE 相似性、POS 一致性 |
| **BERT-Attack** | WIR 貪心搜尋 | BERT MLM 預測替換 | USE 相似性、最大修改詞數 |
| **Universal Trigger** | 迭代更新 (基於梯度) | 尋找與任務無關的觸發字串 | 無（目標是找到觸發器，達成目標攻擊） |

### 1. TextFooler

TextFooler 是一種高效且受限制條件約束的**非目標分類**攻擊。它將生成對抗樣本的過程視為一個優化問題，旨在找到最少的修改，使模型判斷錯誤。

| 攻擊名稱 | 目標 (Goal) | 轉換 (Transformation) | 限制 (Constraints) | 搜尋方法 (Search Method) |
| :--- | :--- | :--- | :--- | :--- |
| **TextFooler** | **非目標分類** | **Counter-fitted GloVe 替換** | 詞嵌入距離、USE 相似性、POS 一致性 | WIR 貪心搜尋 |

#### 1. 目標 (Goal)
TextFooler 旨在實現**非目標分類 (Untargeted Classification)**，即讓受害者模型的預測結果被破壞或爛掉即可，不需指定錯誤的類別。

#### 2. 轉換 (Transformation)
TextFooler 主要依賴**詞彙替換**來構造擾動。

*   **Counter-fitted GloVe 替換：** TextFooler 使用在 **Counter-fitted GloVe 詞嵌入空間**中找到的 $k$NN (K-Nearest Neighbors) 或 $\epsilon$-ball 內的詞彙進行替換。
*   **優勢：** Counter-fitted 空間是經過訓練優化的，它利用**語言學約束**（將同義詞拉近，反義詞推遠），因此能提高找到真正同義詞的機率，有助於保留句子的語義。

#### 3. 限制 (Constraints)
TextFooler 採用了多種嚴格的限制條件，以確保生成的對抗樣本對人類來說是難以察覺且合理的：

*   **詞嵌入距離 (Word embedding distance)：** 確保替換詞與原詞在嵌入空間中的距離相似性。
*   **通用句子編碼器 (USE) 相似性：** 衡量原始句子嵌入與擾動句子嵌入之間的**餘弦相似性**。相似性通常需要高於一個閾值（例如 0.82），以確保**語義保持**。
*   **詞性 (POS) 一致性：** 要求替換後的詞彙必須保持與原詞相同的詞性，以維持文法正確性。

#### 4. 搜尋方法 (Search Method)
TextFooler 採用 **帶有詞彙重要性排名的貪心搜尋 (WIR Greedy Search)**：

*   **步驟一：計算詞彙重要性 (WIR)：** 透過 **Leave-One-Out (LOO)** 等方法，計算移除句子中每個詞彙後，模型對原始正確類別的預測機率下降了多少 ($\Delta p$)。下降越多，該詞越重要。
*   **步驟二：貪心替換：** 從**最重要**的詞彙開始，依序嘗試替換。在每個詞彙的候選替換詞中，選擇能讓模型對正確類別的機率**最低**（即攻擊效果最好）的那個詞，直到模型的預測結果翻轉。

### 2. BERT-Attack

BERT-Attack 利用預訓練語言模型 (PLM) BERT 的強大能力來產生對抗樣本，並同樣使用 WIR 貪心搜尋策略。

| 攻擊名稱 | 目標 (Goal) | 轉換 (Transformation) | 限制 (Constraints) | 搜尋方法 (Search Method) |
| :--- | :--- | :--- | :--- | :--- |
| **BERT-Attack** | **非目標分類** | **BERT MLM 預測替換** | USE 相似性、最大修改詞數 | WIR 貪心搜尋 |

#### 1. 目標 (Goal)
BERT-Attack 旨在實現**非目標分類**。

#### 2. 轉換 (Transformation)
BERT-Attack 的核心在於利用 BERT 進行**詞彙替換**：

*   **BERT MLM 預測替換：** 攻擊者將目標詞遮蔽 (mask)，然後利用 BERT 的 **Masked Language Modeling (MLM)** 任務來預測最有可能填補該位置的詞彙。
*   **MLM 的特性：** 雖然 MLM 預測的詞彙在語法上可能正確，但它可能導致預測出與原詞義**完全相反**的詞（例如將 `recommend` 替換為 `doubt` 或 `envy`）。

#### 3. 限制 (Constraints)
BERT-Attack 採用相對寬鬆的限制：

*   **通用句子編碼器 (USE) 相似性：** 這是確保**語義保持**的主要手段。
*   **最大修改詞彙數量：** 限制被修改的詞彙佔總詞彙數量的百分比，以維持高**重疊性**。

#### 4. 搜尋方法 (Search Method)
BERT-Attack 採用 **WIR 貪心搜尋**，機制與 TextFooler 類似，即先計算詞彙重要性，然後依序嘗試替換，以最大化攻擊效果。

### 3. Universal Trigger

Universal Trigger (通用觸發器) 是一種特殊的攻擊，它不關注於微小擾動，而是專注於找到一個**通用的、與任務無關的字串**，實現強大的**目標攻擊**。

| 攻擊名稱 | 目標 (Goal) | 轉換 (Transformation) | 限制 (Constraints) | 搜尋方法 (Search Method) |
| :--- | :--- | :--- | :--- | :--- |
| **Universal Trigger** | **目標分類** (Targeted Attack) | **尋找與任務無關的觸發字串** | **無** | 迭代更新 (基於梯度) |

#### 1. 目標 (Goal)
Universal Trigger 的目標是實現**目標分類**。無論原始輸入是什麼，只要加入這個觸發字串，模型就必須被誤判為攻擊者指定的錯誤類別。例如，在機器翻譯中，它被用來實現「通用後綴丟棄器」，讓模型忽略觸發字串後面的所有內容。

#### 2. 轉換 (Transformation)
這種攻擊的轉換不是修改原句中的詞彙，而是**生成**一個特殊的觸發字串 (trigger string)，並將其插入到輸入中。

#### 3. 限制 (Constraints)
在原始設計中，Universal Trigger **沒有**針對文法性或語義保持的限制。它的重點在於找到一個能達成攻擊目標的字串。

#### 4. 搜尋方法 (Search Method)
Universal Trigger 的搜尋方法是**基於梯度的迭代更新**，這與前兩者的貪心替換不同，它是一種**訓練**觸發器的過程：

1.  **初始化與決定長度：** 決定觸發器需要多少個詞彙（例如三個詞）並初始化它們。
2.  **反向傳播與梯度獲取：** 將帶有觸發器的句子丟入模型，計算損失函數 $\mathcal{L}$ 對於**觸發詞嵌入**的梯度 $\nabla \mathcal{L} / \nabla \mathbf{e}$。
3.  **最小化目標函數：** 利用**一階泰勒級數近似**，計算替換觸發詞嵌入為詞彙表中其他詞 $\mathbf{e}^+$ 時，損失函數的變化量。攻擊者會尋找一個能使損失**最大化**（或使目標錯誤類別機率達到最小化）的 token $\mathbf{e}^*$。
4.  **迭代更新：** 使用這個最佳的 token $\mathbf{e}^*$ 來替換觸發器中的當前詞，然後重複步驟 1-3，直到找到一個收斂且能穩定達成目標攻擊的通用觸發器。


---

其他課程

[【機器學習 2022】01~04 機器學習原理介紹](https://hackmd.io/@JuitingChen/Sk_VtIJaeg)
[【機器學習 2022】05 各式各樣神奇的自注意力機制](https://hackmd.io/@JuitingChen/rJeNpFIpxl)
[【機器學習 2022】06 如何有效的使用自監督式模型](https://hackmd.io/@JuitingChen/BJXeLKD6xx)
[【機器學習 2022】07 語音與影像上的神奇自監督式學習](https://hackmd.io/@JuitingChen/r1q-N1uagg)
[【機器學習 2022】08-09 自然語言處理上的對抗式攻擊-1](https://hackmd.io/@JuitingChen/B14i61uTxx)
[【機器學習 2022】10~11 自然語言處理上的對抗式攻擊-2](https://hackmd.io/@JuitingChen/HkLRoFOTgx)
[【機器學習 2022】12~13 Bert 三個故事 和 各種 Meta Learning 用法](https://hackmd.io/@JuitingChen/HyjfTptTel)
