# 第十章:來自人類的惡意攻擊 (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/)