《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 開源 | 谷歌大腦提出TensorFuzz,用機器學習debug神經網絡

開源 | 谷歌大腦提出TensorFuzz,用機器學習debug神經網絡

2018-08-01

機器學習尤其是深度學習很難調試與修正,而最近谷歌大腦 Ian Goodfellow 等研究者發布了一個名為 TensorFuzz 的神經網絡 Debug 開源庫。他們將傳統軟件工程中由覆蓋性引導的模糊方法引入到神經網絡,并借助機器學習方法實現 Debug 過程。


神經網絡正逐漸影響人類生活環境,包括醫學診斷、自動駕駛、企業和司法決策過程、空中交通管制、以及電網控制。這些人類可以做到的事,神經網絡也有可能做到。它可以拯救生命、為更多的人提供幫助。然而,在實現這些應用之前,我們首先需要確定神經網絡到底是不是可靠的,因此它的修正和調試方法恰恰是我們現在所缺失的。


眾所周知,由于各種原因,機器學習模型難以調試或解釋,一是從概念上難以說明用戶想要了解的模型信息,而且通過統計和計算也難以獲得指定問題的答案。這個特性導致最近的機器學習出現「復現危機」,因為我們很難對不好調試的技術做出可靠的實驗結論。


即使是與神經網絡直接相關的簡單問題也可能會有巨大的計算量,而且使用深度學習框架實現的神經網絡也可能和理論模型相去甚遠,所以神經網絡非常難以調試。例如,ReluPlex 可以形式上地驗證神經網絡的一些特性,但由于計算成本太高,無法擴展到實際模型中。此外,ReluPlex 通過將 ReLU 網絡描述為一個分段線性函數來進行分析,它使用一個矩陣乘法都為線性的理論模型。但實際上,由于浮點算法的存在,計算機上的矩陣乘法并非線性的,機器學習算法可以學習利用這種特性進行非線性運算。這并不是要批評 ReluPlex,而是想說明應該需要更多與軟件直接交互地測試算法,以便更客觀地測試因為深度學習框架而偏離理論的模型。


在 Ian Goodfellow 等人的這項研究中,他們使用傳統軟件工程已有的技術,即由覆蓋性引導的模糊方法(coverage-guided fuzzing,CGF),并修正這種技術以用來測試神經網絡。根據 Goodfellow 等研究者在原論文中所述,該項工作的主要貢獻有以下幾點:


為神經網絡引入 CGF 概念,并描述了快速近似最近鄰算法如何以通用的方式檢查覆蓋性。

為 CGF 技術構建了一個名為 TensorFuzz 的開源庫。

使用 TensorFuzz 可在已訓練神經網絡搜索數值問題、在神經網絡和對應經量化處理的網絡間生成不一致性度量、在字符級語言模型中表現的不良行為。


下圖描述了整體的 Fuzzer 過程,它與普通計算機程序的 CGF 結構非常相似,只不過它不與經檢測的計算機程序交互,而是與 TensorFlow 的靜態計算圖進行交互。

微信圖片_20180801154022.jpg


如上左圖所示,Fuzzer 由 Seed 語料庫開始,它為計算圖提供至少一組輸入。研究者將這些輸入限制為有效的網絡輸入,例如對于圖像輸入,研究者可以限制輸入數據有正確的圖像尺寸和 RGB 通道數。在給定 Seed 語料庫后,輸入選擇器將從輸入語料庫中選擇不同的元素,例如輸入選擇器可以是以隨機的方法選擇輸入。


給定有效的輸入,Mutator 會對輸入做一些修改,這種修改可能只是簡單地翻轉圖像像素,同樣也可以是在修改總量的某些約束下對圖像進行修改。Mutator 輸出的修改數據隨后可以輸入到神經網絡中,TensorFuzz 需要從神經網絡抽取出兩種信息,即抽取一組元數據數組以計算目標函數,抽取一組覆蓋性數組以計算實際覆蓋性。計算覆蓋性后,如果 Mutator 修改的數據需要執行覆蓋,則將它添加到輸入語料庫中,如果計算的目標函數滿足條件,則可以添加到測試案例列表中。


如上右圖為 Fuzzer 主體過程的偽代碼,在滿足迭代數的情況下,從輸入語料庫中抽取樣本為 parent,并使用 Mutate() 函數對該樣本做修改以產生新的樣本 data。樣本 data 隨后輸入到神經網絡,并通過 Fetch() 函數從該神經網絡抽取覆蓋性 cov 和元數據 meta 兩個向量。接下來只需要通過 IsNewCoverage() 和 Objective() 兩個函數判斷 cov 和 meta 兩個向量是不是滿足條件,滿足的話就能分別將 data 樣本加入到輸入語料庫和測試案例列表。


以上只是 Fuzzer 主體過程的一般描述,Chooser、Mutator 以及 Fetcher 的具體結構與算法讀者可詳細查閱原論文。

微信圖片_20180801154049.jpg

論文:TensorFuzz: Debugging Neural Networks with Coverage-Guided Fuzzing



論文地址:https://arxiv.org/pdf/1807.10875.pdf


眾所周知,機器學習模型的解釋和調試非常困難,神經網絡更是如此。在本文中,我們為神經網絡引入了自動化軟件測試技術,該技術非常適合發掘僅在少量輸入下出現的錯誤。具體而言,我們為神經網絡開發了由覆蓋引導的模糊(coverage-guided fuzzing,CGF)方法。在 CGF 中,神經網絡輸入的隨機變化由覆蓋性度量(coverage metric)引導,以滿足用戶指定的約束。我們描述了快速近似最近鄰算法如何為神經網絡提供這種覆蓋性度量方法,并討論了 CGF 在以下目標中的應用:在已訓練神經網絡中搜索數值誤差、在神經網絡和對應經量化處理的網絡間生成不一致性度量、在字符級語言模型中表現不良行為。最后,我們發布了一個名為 TensorFuzz 的開源庫,它實現了本論文所描述的技術。


4 實驗結果


我們簡要展示了 CGF 技術的一些應用以證實它的通用性質。


4.1 CGF 可以高效地找到已訓練神經網絡的數值錯誤


由于神經網絡使用浮點數運算,它們對于訓練期間及評估過程中的數值錯誤很敏感。眾所周知,這些問題是很難調試的,部分原因是它們可能僅由一小部分很少遇到的輸入所觸發。這正是 CGF 能發揮作用的一個案例。我們專注于尋找導致非數(not-a-number,NaN)值的輸入。并總結出如下結論:


找出數值錯誤很重要。數值錯誤,尤其是那些導致 NaN 的數值錯誤,假如在現實應用中首次遇到這些錯誤,重要系統將做出嚴重的危險行為。CGF 可以用于在部署系統之前找到大量的錯誤,并減少錯誤在危險環境中造成的風險。


CGF 可以快速找到數值錯誤。通過 CGF,我們可以簡單地添加檢查數值選項到元數據中,并運行我們的 fuzzer。為了測試這個假設,我們訓練了一個全連接神經網絡來分類 MNIST[26] 數字。我們故意使用了一個實現效果比較差的交叉熵損失函數,以增加數值錯誤出現的可能性。我們用 100 的 mini-batch 大小訓練了 35000 個迭代步,直到達到 98% 的驗證準確率。然后我們檢查到,不存在導致數值錯誤的 MNIST 數據集元素。盡管如此,TensorFuzz 卻在多個隨機初始化中快速找到了 NaN,如圖 2 所示。


基于梯度的搜索技術可能無法幫助尋找數值錯誤。CGF 的一個潛在缺陷是,基于梯度的搜索技術可能比隨機搜索技術更加高效。然而,我們并不清楚如何明確基于梯度搜索的目標。目前不存在度量模型的真值輸出和 NaN 值相似性的直接方法。


隨機搜索在尋找某些數值錯誤方面是極度低效的。為了證實隨機搜索不夠高效且覆蓋引導對于提高效率很有必要,我們對比了隨機搜索方法。我們實現了一個基線隨機搜索算法,并用 10 個不同的隨機初始化在語料庫的 10 萬個樣本上運行了該算法。基線算法在所有實驗中未找到一個非限定元素。

微信圖片_20180801154114.jpg

圖 2:我們訓練了一個包含某些不穩定數值運算的 MNIST 分類器。然后我們在 MNIST 數據集的隨機種子上運行 fuzzer10 次。fuzzer 在每次運行中都找到了一個非限定元素。而隨機搜索未能找到一個非限定元素。左圖:運行過程中(共運行 10 次)fuzzer 的累積語料庫大小。右圖:由 fuzzer 找到的滿足條件的圖像示例。


4.2 CGF 解決模型和量化版本不一致的問題


量化(quantization)[18] 是一種神經網絡權重被保存,且在執行神經網絡計算的時候使用更少計算內存位數來表示數值的過程。量化常被用來減少神經網絡的計算成本或大小。它還被廣泛用于在手機的安卓神經網絡 API 或 TFLite 上,以及在自定制機器學習硬件(例如谷歌的 Tensor Processing Unit[20])上運行神經網絡推理。


尋找由量化導致的錯誤非常重要:當然,如果量化顯著減少了模型準確率,那量化就沒有什么意義了。給定一個量化模型,如果能檢查出多少量化減少了準確率最好。


僅檢查已有的數據只能找到很少的錯誤:作為基線實驗,我們訓練了一個使用 32 位浮點數的 MNIST 分類器(這一次沒有故意引入數值錯誤)。然后把所有權重和激活值修剪為 16 位。之后,我們對比了 32 位和 16 位模型在 MNIST 測試集上的預測,沒有找到任何不一致性。

微信圖片_20180801154146.jpg

CGF 可以快速在數據周圍的小區域中找到很多錯誤:然后運行 fuzzer,變化限制在種子圖像周圍的半徑為 0.4 的無限范數球中,其中僅使用了 32 位模型作為覆蓋的激活值。我們將輸入限制在種子圖像附近,因為這些輸入幾乎都有明確的類別語義。模型的兩個版本在域外的垃圾數據(沒有真實類別)上出現不一致性并沒有什么意義。通過這些設置,fuzzer 可以生成 70% 樣本的不一致性。因此,CGF 允許我們尋找在測試時出現的真實錯誤,如圖 3 所示。


隨機搜索在給定和 CGF 相同的變化數量下無法找到新的錯誤:如 4.1 節所述,我們試驗了一個基線隨機搜索方法以表明覆蓋引導在這種設置下特別有用。隨機搜索基線在給定和 fuzzer 相同的變化數量下無法找到新的任何不一致性。


圖 3:我們訓練了一個 32 位浮點數的 MNIST 分類器,然后將對應的 TensorFlow 圖修剪為 16 位浮點數圖,原始的和修剪后的圖都在 MNIST 測試集的全部 10000 個元素上執行相同的預測,但 fuzzer 可以找到大約 70% 的測試圖像中半徑為 0.4 的無窮范數球中的不一致性。左圖:fuzzer 的累積語料庫大小隨運行次數(共 10 次)的變化。那些一路朝右的曲線對應失敗的模糊化(fuzzing)運行。右圖:由 fuzzer 找到的被 32 位和 16 位神經網絡分類為不同類別的圖像。



本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 在线看mv的网站入口免费 | 国产精品久久一区 | 亚洲不卡视频在线观看 | 免费国产高清精品一区在线 | 日韩精品视频在线播放 | 簧片免费网站 | 日韩欧美中文字幕在线播放 | 一级aaa毛片| 日本欧美午夜三级 | 欧美日韩国产在线 | 亚洲 欧美 手机 在线观看 | 亚洲一区二区三区免费 | 亚洲全网成人资源在线观看 | 男女午夜爽爽 | 成年人在线看 | 国产全黄三级国产全黄三级书 | 夜夜骑狠狠干 | 欧美日韩无线码在线观看 | 婷婷亚洲图片 | 日韩色视频一区二区三区亚洲 | 性做久久久久久久免费看 | 黄色片一级免费看 | 成人www视频 | 亚洲人体一区 | 成人福利网址 | 日本久久精品视频 | 久草欧美 | 国产在线黄色 | 国产免费一级高清淫日本片 | 国产欧美日韩精品a在线观看 | 成年网址网站在线观看 | 欧美日韩视频二区三区 | 欧洲1区二区三区二页 | 国产高清美女一级a毛片久久 | 国产成人精品视频在放 | 亚洲欧美国产一区二区三区 | 九九热九九热 | 日本三级欧美三级香港黄 | 久久国产精品广西柳州门 | 午夜视频入口 | 亚洲欧美日韩综合精品网 |