對抗性機器學習:如何攻擊和防禦 ML 模型

已發表: 2022-03-11

如今,計算機視覺中的機器學習模型被用於許多現實世界的應用中,如自動駕駛汽車、人臉識別、癌症診斷,甚至在下一代商店中,以跟踪客戶下架的哪些產品,以便他們的信用離開時可以刷卡。

這些機器學習系統不斷提高的準確性令人印象深刻,因此自然而然地導致了大量使用它們的應用程序。 儘管它們背後的數學基礎在幾十年前就已經被研究過了,但相對較新的強大 GPU 的出現為研究人員提供了實驗和構建複雜機器學習系統所必需的計算能力。 今天,最先進的計算機視覺模型基於具有多達數百萬個參數的深度神經網絡,並且它們依賴於十年前尚不可用的硬件。

2012 年,Alex Krizhevsky 等人成為第一個展示如何實現深度卷積網絡的人,這在當時成為了對象分類中最先進的模型。 從那時起,已經發布了對其原始模型的許多改進,每個改進都提高了準確性(VGG、ResNet、Inception 等)。 最近,機器學習模型在許多計算機視覺任務中已經成功地實現了人類甚至高於人類的準確性。

幾年前,從機器學習模型中得到錯誤的預測曾經是常態。 如今,這已成為例外,我們開始期望它們能夠完美運行,尤其是當它們部署在實際應用程序中時。

直到最近,機器學習模型通常在實驗室環境中進行訓練和測試,例如機器學習競賽和學術論文。 如今,隨著它們被部署在現實世界的場景中,來自模型錯誤的安全漏洞已經成為一個真正的問題。

本文的想法是解釋和演示用於圖像識別的最先進的深度神經網絡如何很容易被惡意行為者愚弄,從而產生錯誤的預測。 一旦我們熟悉了通常的攻擊策略,我們將討論如何保護我們的模型免受攻擊。

對抗性機器學習示例

讓我們從一個基本問題開始:什麼是對抗性機器學習示例?

對抗性示例是旨在欺騙機器學習模型的惡意輸入。

在本文中,我們將把注意力限制在執行圖像分類的機器學習模型上。 因此,對抗樣本將是模型無法正確分類的攻擊者製作的輸入圖像。

作為一個例子,讓我們以一個在 ImageNet 上訓練的 GoogLeNet 作為我們的機器學習模型來執行圖像分類。 下面有兩張人眼無法區分的熊貓圖像。 左邊的圖像是 ImageNet 數據集中的干淨圖像之一,用於訓練 GoogLeNet 模型。 右邊是第一個的輕微修改,通過在中央圖像中添加噪聲向量創建。 正如預期的那樣,模型預測第一張圖像是熊貓。 相反,第二個被預測(以非常高的信心)是長臂猿。

熊貓的兩張並排圖像。第二張圖片看起來與第一張相同,但被標記為不同的動物。第三張看似隨機靜態的圖像位於它們之間,展示了添加到第二張熊貓圖像以混淆模型的圖層。

添加到第一張圖像的噪聲不是隨機的,而是攻擊者仔細優化的輸出。

作為第二個例子,我們可以看看如何使用 3D 打印機合成 3D 對抗樣本。 下圖顯示了作者打印的 3D 海龜的不同視圖以及 Google Inception v3 模型的錯誤分類。

顯示海龜圖像網格的圖像,其中一些被正確歸類為海龜,其中一些被歸類為步槍,還有一些被歸類為其他

具有高於人類分類精度的最先進模型怎麼會犯這種看似愚蠢的錯誤?

在深入研究神經網絡模型往往具有的弱點之前,讓我們記住,我們人類有自己的一組對抗性示例。 看看下面的圖片。 你看到了什麼? 螺旋形還是一系列同心圓?

顯示視錯覺的圖像。

這些不同的例子還揭示了機器學習模型和人類視覺在理解圖像中的內容時必須使用完全不同的內部表示。

在下一節中,我們將探索生成對抗樣本的策略。

如何生成對抗樣本

讓我們從一個簡單的問題開始:什麼是對抗樣本?

通過獲取模型正確分類的干淨圖像並找到導致新圖像被 ML 模型錯誤分類的小擾動來生成對抗性示例。

讓我們假設攻擊者擁有關於他們想要攻擊的模型的完整信息。 這實質上意味著攻擊者可以計算模型$J(\theta, X, y)$的損失函數,其中$X$是輸入圖像, $y$是輸出類, $\theta$是內部模型參數。 該損失函數通常是分類方法的負損失可能性。

在這種白盒場景下,有幾種攻擊策略,每一種都代表了產生它們的計算成本和成功率之間的不同權衡。 所有這些方法本質上都是試圖最大化模型損失函數的變化,同時保持輸入圖像的擾動很小。 輸入圖像空間的維度越高,就越容易生成人眼無法與乾淨圖像區分的對抗樣本。

L-BFGS法

我們通過解決以下框約束優化問題找到了對抗性示例的${x}'$

$$ \begin{矩陣} \text{最小化} c \cdot \left \| x - {x}' \right \|^2_2 + \text{loss}_{f,1} {x}' \\ \text{這樣 } {x}' \epsilon \left [0, 1 \right ]^n \end{矩陣} $$

其中$c > 0$是一個也需要求解的參數。 直觀地說,我們尋找對抗性圖像${x}'$使得相對於乾淨圖像的失真( $\left | x - {x}' \right |$ )和相對於錯誤的類是最小的可能。

對於像深度神經網絡這樣的複雜模型,優化問題沒有封閉形式的解決方案,因此必須使用迭代數值方法。 因此,這種 L-BFGS 方法很慢。 但是,它的成功率很高。

快速梯度標誌 (FGS)

使用快速梯度符號 (FGS) 方法,我們對初始點周圍的損失函數進行線性逼近,由乾淨圖像向量$X$和真實類別$y$給出。

在這個假設下,損失函數的梯度表示我們需要改變輸入向量以產生最大損失變化的方向。 為了使擾動的大小保持較小,我們只提取梯度的符號,而不是其實際範數,並將其縮放一個小因子 epsilon。

通過這種方式,我們確保初始圖像和修改後的圖像之間的像素差異總是小於 epsilon(這個差異是 L_infinity 範數)。

$$ X^{adv} = X + \epsilon \text{ 符號} \left( \bigtriangledown_x J \left( X, y_{true} \right) \right) $$

可以使用反向傳播有效地計算梯度。 這種方法是實現速度最快且計算成本最低的方法之一。 但是,它的成功率低於 L-BFGS 等更昂貴的方法。

Adversarial Machine Learning at Scale的作者表示,它對 ImageNet 數據集的 top-1 預測的成功率在 63% 到 69% 之間,epsilon 在 2 到 32 之間。對於線性模型,如邏輯回歸,快速梯度符號方法是準確的。 在這種情況下,另一篇關於對抗性示例的研究論​​文的作者報告成功率為 99%。

迭代快速梯度符號

前一種方法的一個明顯擴展是使用較小的步長 alpha 多次應用它,並裁剪總步長以確保乾淨圖像和對抗圖像之間的失真低於 epsilon。

$$ X^{adv}_0 = X, X^{adv}_{N + 1} = Clip_{X, \epsilon} \left\{ X^{adv}_{N} + \alpha \text{ 符號} \left( \bigtriangledown_X J \left( X^{adv}_N, y_{true} \right) \right) \right\} $$

其他技術,如 Nicholas Carlini 的論文中提出的技術,是對 L-BFGS 的改進。 它們的計算成本也很高,但成功率很高。

然而,在大多數現實世界的情況下,攻擊者並不知道目標模型的損失函數。 在這種情況下,攻擊者必須採用黑盒策略。

黑盒攻擊

研究人員反復觀察到,對抗性示例在模型之間的遷移非常好,這意味著它們可以針對目標模型 A 設計,但最終對在類似數據集上訓練的任何其他模型都有效。

這就是所謂的對抗樣本的可遷移性屬性,當攻擊者無法訪問有關模型的完整信息時,他們可以利用它來發揮自己的優勢。 攻擊者可以通過以下步驟生成對抗樣本:

  1. 使用$i=1…n$的輸入$X_i$查詢目標模型並存儲輸出$y_i$
  2. 使用訓練數據$(X_i, y_i)$ ,構建另一個模型,稱為替代模型。
  3. 使用上面顯示的任何白盒算法為替代模型生成對抗性示例。 他們中的許多人將成功轉移並成為目標模型的對抗樣本。

此計算機視覺基金會論文中介紹了該策略對商業機器學習模型的成功應用。

對抗性例子的防禦

攻擊者利用他們擁有的關於模型的所有信息進行攻擊。 顯然,模型在預測時輸出的信息越少,攻擊者就越難成功攻擊。

在生產環境中保護您的分類模型的第一個簡單措施是避免顯示每個預測類別的置信度分數。 相反,模型應該只提供最有可能的前$N$ (例如,5 個)類。 當向最終用戶提供置信度分數時,惡意攻擊者可以使用它們來數值估計損失函數的梯度。 這樣,攻擊者可以使用例如快速梯度符號方法進行白盒攻擊。 在我們之前引用的計算機視覺基金會論文中,作者展示瞭如何針對商業機器學習模型執行此操作。

讓我們看一下文獻中提出的兩種辯護。

防禦性蒸餾

該方法試圖生成一個新模型,其梯度遠小於原始無防禦模型。 如果梯度非常小,則 FGS 或迭代 FGS 之類的技術將不再有用,因為攻擊者需要對輸入圖像進行很大的扭曲才能實現損失函數的充分變化。

防禦性蒸餾向網絡的最後一個 softmax 層引入了一個新參數$T$ ,稱為溫度:

$$ \text{softmax} \left( x, T \right)_i = \frac{e^{x_i/T}}{\Sigma_j e^{x_j/T}} $$

請注意,對於 T=1,我們有通常的 softmax 函數。 $T$的值越高,損失相對於輸入圖像的梯度越小。

防禦性蒸餾過程如下:

  1. 訓練一個網絡,稱為教師網絡,溫度為 $T » 1$
  2. 使用訓練有素的教師網絡為訓練集中的每個圖像生成軟標籤。 圖像的軟標籤是模型分配給每個類別的一組概率。 例如,如果輸出圖像是鸚鵡,那麼教師模型可能會輸出軟標籤,例如 (90% parrot, 10% papagayo)。
  3. 在軟標籤上訓練第二個網絡,即蒸餾網絡,再次使用溫度$T$ 。 使用軟標籤進行訓練是一種減少過度擬合併提高蒸餾網絡的樣本外精度的技術。
  4. 最後,在預測時,運行溫度$T=1$的蒸餾網絡。

防禦性蒸餾成功地保護網絡免受在蒸餾中嘗試的一系列攻擊,作為對深度神經網絡的對抗性擾動的防禦

顯示基於蒸餾溫度的成功率的表格圖像。通常,對於 MNIST 和 CIFAR10 對抗樣本,溫度越高,成功率越低。

不幸的是,加州大學伯克利分校的研究人員後來發表的一篇論文提出了一套新的攻擊方法,可以擊敗防禦性蒸餾。 這些攻擊是對 L-BFGS 方法的改進,證明防禦性蒸餾不是對抗對抗樣本的通用解決方案。

對抗訓練

如今,對抗性訓練是最有效的防禦策略。 訓練模型時會生成和使用對抗性示例。 直觀地說,如果模型在訓練期間看到對抗性示例,那麼它在預測時的性能對於以相同方式生成的對抗性示例會更好。

理想情況下,我們希望使用任何已知的攻擊方法在訓練期間生成對抗樣本。 然而,對於具有高維數的大數據集(如 ImageNet),L-BFGS 等穩健的攻擊方法和伯克利論文中描述的改進在計算上過於昂貴。 在實踐中,我們只能使用 FGS 之類的快速方法,或者可以使用迭代 FGS。

對抗訓練使用修改後的損失函數,它是乾淨示例上的通常損失函數和對抗性示例的損失函數的加權和。

$$ 損失 = \frac{1}{\left( m - k \right)} \left( \sum_{i \epsilon CLEAN} {L \left( X_i | y_i \right) + \lambda} \sum_{i \epsilon ADV} {L \left( X*{adv}_i | y_i \right)} \right) $$

在訓練期間,對於每批$m$乾淨圖像,我們使用網絡的當前狀態生成$k$對抗性圖像。 我們針對乾淨和對抗性示例前向傳播網絡,並使用上面的公式計算損失。

本會議論文中提出的對該算法的改進稱為集成對抗訓練。 不是使用當前網絡生成對抗性示例,而是使用幾個預訓練模型來生成對抗性示例。 在 ImageNet 上,這種方法增加了網絡對黑盒攻擊的魯棒性。 該防禦是NIPS 2017 對抗性攻擊防禦競賽第一輪的獲勝者。

結論和進一步的步驟

到今天為止,攻擊機器學習模型比防禦它更容易。 如果不採用防禦策略,部署在實際應用程序中的最先進模型很容易被對抗性示例愚弄,從而為潛在的關鍵安全問題打開了大門。 最可靠的防禦策略是對抗性訓練,在訓練時生成對抗性示例並添加到干淨示例中。

如果您想評估圖像分類模型對不同攻擊的魯棒性,我建議您使用開源 Python 庫cleverhans。 許多攻擊方法可以針對您的模型進行測試,包括本文中提到的那些。 您還可以使用此庫對模型進行對抗性訓練,並提高其對對抗性示例的魯棒性。

尋找新的攻擊和更好的防禦策略是一個活躍的研究領域。 需要更多的理論和實證工作來使機器學習模型在實際應用中更加健壯和安全。

我鼓勵讀者嘗試這些技術並發布新的有趣結果。 此外,作者非常歡迎對本文提出任何反饋。

有關的:
  • 健全的邏輯和單調的 AI 模型
  • 梯度下降在 TensorFlow 中的眾多應用