DLFuzz:深度學習系統的差分模糊測試

DLFuzz:深度學習系統的差分模糊測試

摘要

深度學習(Deep learning,DL)系統越來越多地應用於諸如自動駕駛汽車等安全關鍵領域。保證 DL 系統的可靠性和魯棒性具有重要意義。現有的測試方法總是不能在測試數據集中包含罕見的輸入,並且神經元覆蓋率較低。

在本文中,我們提出了 DLFuzz,這是第一個用於指導 DL 系統暴露錯誤行為的差分模糊測試框架。DLFuzz 保持微小的輸入變異,以最大化神經元覆蓋範圍以及原始輸入和變異輸入之間的預測差異,而無需人工標記工作或交叉引用來自其他具有相同功能的 DL 系統的預言。我們對兩個著名的數據集進行了實證評估,以證明其有效性。與目前最先進的 DL 白盒測試框架 DeepXplore 相比,DLFuzz 不需要額外的努力就可以找到類似的功能性 DL 系統進行交叉引用檢查,但可以在 89.82%的較小擾動下產生 338.59%的對抗性輸入,平均獲得 2.86%的較高神經元覆蓋率,並節省 20.11%的時間消耗。

關鍵詞

模糊測試,深度學習,神經元覆蓋

1 簡介

在過去的幾年裡,深度學習系統(DL)已經在很多領域顯示出了它的競爭力,例如圖像分類、自然語言處理甚至腦電路重建。這些令人鼓舞的成就激發了 DL 系統在安全關鍵領域的廣泛應用,如自主駕駛、無人機、機器人和惡意軟件檢測,測試和提高 DL 系統的魯棒性有著很大的需求。

對於 DL 測試,經典的方法是收集足夠的人工標記數據來評估 DL 系統的準確性。然而,測試的輸入空間非常大,以至於很難收集所有可能的輸入來觸發 DL 系統的每個可行邏輯。文獻[16]證明了通過在測試輸入中添加小擾動可以愚弄最先進的 DL 系統。儘管 DL 系統在圖像分類任務上表現出令人印象深刻的性能,但通過應用不可察覺的擾動,分類器也很容易導致不正確的分類,如圖 1 所示。因此,DL 測試非常具有挑戰性,但對於確保這些安全關鍵實踐的正確性是必不可少的。

提出了幾種提高 DL 系統測試效率的方法,其中的一些利用像 Z3 這樣的解算器在 DL 模型的形式化約束下生成對抗性輸入。這些技術是準確的,但工作在一個沉重的白盒方式和資源消耗的約束求解。一些黑盒方法利用啟發式算法對輸入進行變異,直到獲得對抗性輸入為止。這些方法非常耗時,並且在很大程度上依賴於人工提供的地面真值標籤。對抗性深度學習的其他方法側重於通過對輸入應用不可察覺的擾動(主要是以基於梯度的方式)來愚弄 DL 系統。它們的工作效率很高,但神經元覆蓋率低。最近,DeepXplore 作為最新的 DL 系統白盒測試框架被提出,並首次引入了神經元覆蓋作為測試度量的概念。同時,它需要多個 DL 系統,這些系統具有與交叉引用 Oracle 相似的功能,以避免手動檢查。然而,交叉引用仍然存在可伸縮性問題,並且很難找到類似的 DL 系統。

在本文中,我們提出了 DLFuzz,第一個差分模糊測試框架,旨在最大化神經元覆蓋和為給定的 DL 系統生成更多的對抗性輸入,而不交叉引用其他類似的 DL 系統或手動標記。首先,DLFuzz 反覆選擇值得激活的神經元以覆蓋更多邏輯,並通過應用微小擾動來引導 DL 系統暴露錯誤行為,從而對測試輸入進行突變。在突變過程中,DLFuzz 保持突變的輸入,使得後續的模糊處理對神經元覆蓋率有一定的提高,並將微小擾動限制為不可見,保證了原始輸入和突變輸入的預測結果一致。這樣,DLFuzz 能夠獲得稀有輸入,並且能夠通過差分測試自動識別錯誤行為,即當突變輸入的預測結果與原始輸入不一致時觸發錯誤。

DLFuzz:深度學習系統的差分模糊測試

圖 1:DL 模型 AlexNet 的對抗輸入。(左)被正確地預測為“校車”(schoolbus),(中)擾動應用於左以獲得右,(右)對抗性輸入被預測為“鴕鳥”(ostrich)。

為了評價 DLFuzz 的有效性,我們在兩個流行的數據集 MNIST 和 ImageNet 上對六個 DL 系統進行了實證研究。DL 系統和數據集與 DeepXplore 使用的完全相同。與 DeepXplore 相比,DLFuzz 不需要額外的努力來收集相似的功能性 DL 系統來進行交叉引用標籤檢查,但可以產生的對抗輸入增加 135%-584.62%,擾動減小 79.56%-96.77%,神經元覆蓋率提高 1.10%-5.59%。就時間效率而言,它平均節省了 20.11%的時間消耗,其中 ImageNet 的一種例外情況比 DeepXplore 節省了 59.42%

2 動機

由於深度神經網絡(DNN)和軟件程序的內部結構完全不同,DL 測試與傳統的軟件測試存在很大的差距。研究人員投入了很多精力將軟件測試以白盒和黑盒的方式應用於 DL 測試。我們旨在通過 DLFuzz 打破黑盒測試技術的資源消耗限制和白盒測試技術的交叉引用障礙,DLFuzz 是第一個利用不可察覺的擾動來確保輸入和變異輸入之間的不可見差異的差分模糊測試框架。

模糊測試(Fuzzing testing)被認為是軟件測試中最有效的漏洞檢測方法之一,其表現為捕獲的大量漏洞。核心思想是生成隨機輸入,以執行儘可能多的程序路徑,從而導致程序暴露違規和崩潰。可以看出,模糊測試和 DL 測試有著相似的目標,即實現更高的覆蓋率,以及獲得更多的異常行為。一般來說,我們將模糊化關鍵階段的知識結合到 DL 測試中,如下所示:

(1) 優化目標。達到更高的神經元覆蓋率和暴露更多異常行為的目標可以看作是一個聯合優化問題。這個優化問題可以用基於梯度的方法來實現。

(2) 種子養護。在模糊化過程中,根據在隨後的模糊化過程中不斷提高神經元覆蓋率的潛力,將有助於一定程度提高神經元覆蓋率的變異輸入保留在種子列表中。

(3) 突變策略的多樣性。我們設計了許多神經元選擇策略來選擇可能覆蓋更多邏輯和觸發更多錯誤輸出的神經元。此外,測試輸入的多種變異方法已經被實踐,並且易於集成。

3 DLFUZZ 方法

3.1 結構

DLFuzz 的總體架構如圖 2 所示。本文將 DLFuzz 應用於圖像分類,以驗證其可行性和有效性。其他任務(如語音識別)中的自適應非常簡單,也遵循圖 2 中的相同工作流。

DLFuzz:深度學習系統的差分模糊測試

具體來說,給定的測試輸入是要分類的圖像,DNN 是被測的特定卷積神經網絡(CNN),如 VGG-16。突變算法將微小的擾動應用於 t 和獲取 t’,這顯然與 t 是不可區分的。如果突變輸入和原始輸入都被輸入到 CNN,但被歸類為不同的類別標籤,我們將其視為不正確的行為,並將 t’視為對抗性輸入之一。突變前後的分類結果不一致,表明其中至少有一個是錯誤的,因此此處不需要手動標記。 相反,如果 CNN 預測兩者屬於同一類別標籤,則 t'將繼續通過變異算法進行變異,以測試 CNN 的魯棒性。

3.2 算法

突變算法是 DLFuzz 算法的主要組成部分。它是通過求解一個最大化神經元覆蓋率和錯誤行為數的聯合優化問題來完成的。基於覆蓋更多神經元可能觸發更多邏輯和錯誤行為的演示,DLFuzz 還利用了與 DeepXplore 相同的神經元覆蓋定義和計算方式。輸出值大於設定閾值的神經元被視為被激活(覆蓋)。

突變算法的核心過程在算法 1 中。該算法包含三個要詳細討論的關鍵部分。

DLFuzz:深度學習系統的差分模糊測試

優化問題 正如第 1 節所討論的,基於梯度的對抗性深度學習在幾個方面優於其他方法,特別是在時間效率方面。 它通過優化輸入以使預測誤差最大化來建立擾動[16],這與在訓練 DNN 時優化權重以使預測誤差最小相反。以損耗函數為目標,採用梯度上升法使損耗最大化,易於實現。

DLFuzz:深度學習系統的差分模糊測試

模糊化過程 模糊化過程揭示了算法 1 的總體工作流程。給定測試輸入 x 時,DLFuzz 維護一個種子列表,以保留有助於神經元覆蓋的中間變異輸入。首先,種子列表只有一個輸入,正好是 x。接下來,DLFuzz 遍歷每個種子 xs 並獲得構成其優化目標的元素。然後,DLFuzz 計算梯度方向以用於以後的突變。在變異過程中,DLFuzz 迭代地將經過處理的梯度作為擾動應用於 xs 並獲得中間輸入 x'。每次突變後,獲取中間類別標籤 c',覆蓋率信息,x 和 x'的 l2 距離。如果需要通過 x'和 l2 距離提高神經元覆蓋率,則將 x'添加到種子列表中。最後,如果 c'已經與 c 不同,則種子 xs 的突變過程終止,並且 x' 將包含在對抗輸入中。 因此,DLFuzz 能夠為某個原始輸入生成多個對抗輸入,並探索進一步改善神經元覆蓋範圍的新方法。

對於迭代突變過程,首先,當獲得梯度時,可以使用多種處理方法來生成擾動,包括僅保留符號,模仿現實情況等。這些用於輸入的突變策略很容易擴展到 DLFuzz。其次,DLFuzz 採用 l2 距離來測量擾動,其計算方法與[12]相同,以確保 x 和 x'之間的距離不可察覺。至於第 18 行中保持種子的條件,DLFuzz 將我們所需的距離限制在相對較小的範圍內(小於 0.02),以確保不被察覺。隨著一個輸入的神經元覆蓋率改善隨時間下降,用於保留種子的相應閾值也隨運行時間而降低。此外,配置 DLFuzz 的輸入和超參數對性能有一定影響,需要進行一些探索。此外,我們可以提高種子保持的閾值,以更遠的距離保留更多的變異輸入。

神經元選擇策略 為了最大化神經元覆蓋率,我們提出了四種啟發式策略來選擇更有可能提高覆蓋率的神經元,如下所示。對於每個種子 xs,將使用一種或多種策略來選擇 m 個神經元,這些策略可以在算法輸入的策略中進行自定義。

(1) 策略 1。選擇在過去的測試中經常覆蓋的神經元。受傳統軟件測試實踐經驗的啟發,經常或很少執行的代碼片段更有可能引入缺陷。經常或很少被覆蓋的神經元可能會導致異常的邏輯並激活更多的神經元。

(2) 策略 2。由於上述考慮,在過去的測試中,選擇的神經元很少被覆蓋。

(3) 策略 3。選擇權重最高的神經元。 根據我們的假設提出,權重最高的神經元對其他神經元的影響可能更大。

(4) 策略 4。選擇接近激活閾值的神經元。如果激活/失活的神經元的輸出值略低於/大於閾值,則更容易加速。

4 實驗

4.1 實驗設置

我們在 DL 系統的廣泛框架 Tensorflow 1.2.1 和 Keras 2.1.3 的基礎上實現了 DLFuzz。Tensorflow 和 Keras 為梯度計算提供了有效的接口,並支持每次 DNN 預測後記錄所有神經元中間輸出的過程。我們在具有 4 個內核(Intel i7-7700HQ @ 3.6GHz),16GB 內存,NVIDIA GTX 1070 GPU 和 Ubuntu 16.04.4 作為主機操作系統的計算機上開發和評估了 DLFuzz。

我們選擇了兩個數據集(MNIST 和 ImageNet)以及 DeepXplore 用於圖像分類任務的相應 CNN,以評估 DLFuzz。MNIST 是一個包含 60000 個訓練圖像和 10000 個測試圖像的手寫數字的大型數據庫。ImageNet 是一個大型的可視化數據庫,包含超過 1400 萬個用於對象識別的圖像。與 DeepXplore 一樣,DLFuzz 為每個數據集測試了三個預先訓練的模型,也就是說,LeNet-1、LeNet-4、LeNet-5 用於 MNIST 和 VGG-16、VGG-19、ResNet50]用於 ImageNet。考慮到公平性,我們還隨機從每個 CNN 的數據集中選擇 20 個圖像作為測試輸入,與 DeepXplore 相同。對於輸入中配置的超參數,我們嘗試了很多可能的設置組合。如果未指定,則由於它們在許多 DNN 上的良好性能,這些超參數 k、m、strategyes、iter_times 的默認設置分別為 4、10、“strategy1”、3。

4.2 結果

與 DeepXplore 相比,表 1 顯示了 DLFuzz 的有效性。DLFuzz 在提高神經元覆蓋率、在同一時間範圍內產生更多的對抗性輸入、限制不可察覺的干擾等方面顯示出其優越性。首先,如表的第三列所示,對於測試的 6 個 cnn,DLFuzz 在不同設置下的平均神經元覆蓋率比 DeepXplore 高 1.10%到 5.59%。在最佳設置下,DLFuzz 能夠獲得 13.42%的神經元覆蓋率。...

DLFuzz:深度學習系統的差分模糊測試

DLFuzz:深度學習系統的差分模糊測試

其次,DLFuzz 產生的對抗性輸入具有更小的擾動。如圖 3 所示,DeepXplore 生成的擾動是可見的,而 DLFuzz 生成的擾動是不可見和不可察覺的。這樣,DLFuzz 為圖像突變前後的一致性提供了更有力的保證。如表 1 的第四和第五列所示,DLFuzz 平均產生了 338.59%的對抗輸入,而擾動卻減少了 89.82%。此外,DLFuzz 在這些 DL 系統上生成每個對抗輸入的時間縮短了 20.11%。一個例外的情況是,與 ResNet50 的 DeepXplore 相比,DLFuzz 在生成對抗性輸入上花費的時間更多,這是由於在測試由大量神經元組成的 DL 系統時神經元選擇所需的時間更多(94056)。

我們還在兩個 CNN 上嘗試了所有建議的神經元選擇策略,並在圖 4 中描述了結果。所有策略都比 DeepXplore 對神經元覆蓋率的改善貢獻更大,但它們之間的性能相似。“策略 1”的表現稍好一些。此外,為了驗證 DLFuzz 的實際應用,我們將 114 幅對抗性圖像加入到 MNIST 上的三個 cnn 訓練集中,並對其進行再訓練,看其準確性是否能夠提高。最後,我們在 5 個週期內將其準確性提高了 1.8%。 如果在培訓過程中包含更多對抗性輸入,則有望獲得更大的改進。

DLFuzz:深度學習系統的差分模糊測試

4.3 討論

模糊理論在 DL 測試中的適用性 DLFuzz 的有效性表明,將模糊知識應用於 DL 測試是可行的,並且可以大大提高現有 DL 測試技術(如 DeepXplore)的性能。 基於梯度的優化問題解決方案保證了框架的易於部署和高效率。 種子維持的機制為改善神經元覆蓋範圍提供了多樣化的方向和更大的空間。 如圖 3 所示,它還能夠為一個輸入獲得增量對抗輸入。各種用於神經元選擇的策略被證明可以很好地找到對增加神經元覆蓋率有益的神經元。

不用人工操作 為了證實這一點,我們檢查了 DLFuzz 生成的 366 個對抗輸入,儘管 DLFuzz 在限制閾值下保持了很小的 l2 距離。我們還沒有發現任何對抗性輸入在突變後已經改變了它們的身份。對抗性輸入與原始輸入幾乎相同,且擾動是不可察覺的。

未來的工作 由於 DLFuzz 對圖像分類任務的顯著影響,我們將致力於 DLFuzz 在 DL 領域其他流行任務(如語音識別)上的部署。將相應任務的輸入突變的特定約束添加到通用工作流。此外,一些領域知識可以用來提供更有效的變異操作,提高 DLFuzz 的效率。

5 結論

我們設計並實現了 DLFuzz,作為一種有效的 DL 系統模糊測試框架。DLFuzz 首先將模糊測試的基本思想結合到 DL 測試中,並證明了其有效性。與 DeepXplore 相比,DLFuzz 在獲得相同輸入量的情況下,平均可以獲得高 2.86%的神經元覆蓋率,併產生 338.59%的對抗示例,且擾動減少 89.82%。DLFuzz 還克服了依賴 DeepXplore 中具有類似功能的多個 DL 系統的麻煩。 此外,DLFuzz 通過將這些對抗性輸入合併到 DL 系統中並穩步提高其準確性,展示了其實際用途。首映結果展示了它的潛在用途,可以在早期暴露 DL 系統的錯誤行為,並確保可靠性和健壯性。

致謝

本文由南京大學軟件學院 2020 級碩士生李彤宇翻譯轉述。 感謝國家重點研發計劃(2018YFB1003900)和國家自然科學基金(61832009,61932012)支持!


分享到:


相關文章: