0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

谷歌提出能夠自動Debug神經(jīng)網(wǎng)絡(luò)的新方法

DPVg_AI_era ? 來源:未知 ? 作者:胡薇 ? 2018-08-02 09:29 ? 次閱讀

眾所周知,神經(jīng)網(wǎng)絡(luò)難以debug。谷歌大腦的Augustus Odena和Ian Goodfellow提出了一種新方法,能夠自動Debug神經(jīng)網(wǎng)絡(luò)。Goodfellow表示,希望這將成為涉及ML的復(fù)雜軟件回歸測試的基礎(chǔ),例如,在推出新版本的網(wǎng)絡(luò)之前,使用fuzz來搜索新舊版本之間的差異。

眾所周知,由于各種原因,機(jī)器學(xué)習(xí)模型難以調(diào)試(debug)或解釋。這造成了最近機(jī)器學(xué)習(xí)的“可重復(fù)性危機(jī)”(reproducibility crisis)——對難以調(diào)試的技術(shù)做出可靠的實驗結(jié)論是很棘手的。

神經(jīng)網(wǎng)絡(luò)又特別難以debug,因為即使是相對直接的關(guān)于神經(jīng)網(wǎng)絡(luò)的形式問題,解決的計算成本也很高,而且神經(jīng)網(wǎng)絡(luò)的軟件實現(xiàn)可能與理論模型有很大的差異。

在這項工作中,我們利用傳統(tǒng)軟件工程中的一種技術(shù)——覆蓋引導(dǎo)模糊測試(coverage guided fuzzing,CGF),并將其應(yīng)用于神經(jīng)網(wǎng)絡(luò)的測試。

具體來說,這項工作有以下貢獻(xiàn):

我們對神經(jīng)網(wǎng)絡(luò)引入了CGF的概念,并描述了如何用快速近似最近鄰算法( fast approximate nearest neighbors algorithms)以通用的方式檢查覆蓋率。

我們開源了一個名為TensorFuzz的CGF軟件庫。

我們使用TensorFuzz在已訓(xùn)練的神經(jīng)網(wǎng)絡(luò)中查找數(shù)值問題,在神經(jīng)網(wǎng)絡(luò)及其量化版本之間查找分歧,以及在字符級語言模型中查找不良行為。

圖1:fuzzing主循環(huán)的簡略描述。左:模糊測試程序圖,表示數(shù)據(jù)的flow。右:用算法的形式描述了模糊測試過程的主循環(huán)。

覆蓋引導(dǎo)模糊測試(Coverage-guided fuzzing)

在實際的軟件測試中,覆蓋引導(dǎo)模糊測試(Coverage-guided fuzzing)被用來查找許多嚴(yán)重的bug。最常用的兩種coverage-guided模糊測試器是AFL和libFuzzer。這些模糊測試器已經(jīng)以各種方式被擴(kuò)展,以使它們更快、或增加代碼中特定部分可以被定位的范圍。

在CGF的過程中,模糊測試過程維護(hù)一個輸入語料庫,其中包含正在考慮的程序的輸入。根據(jù)一些突變程序?qū)@些輸入進(jìn)行隨機(jī)變化,并且當(dāng)它們行使新的“覆蓋”時,突變輸入( mutated inputs)被保存在語料庫中。

“覆蓋率”(coverage)是什么呢?這取決于模糊器的類型和當(dāng)前的目標(biāo)。一種常見的衡量標(biāo)準(zhǔn)是已經(jīng)執(zhí)行的代碼部分的集合。在這種度量下,如果一個新的輸入導(dǎo)致代碼在if語句中以不同于先前的方式分支,那么覆蓋率就會增加。

CGF在識別傳統(tǒng)軟件中的缺陷方面非常成功,因此我們很自然地會問,CGF是否可以應(yīng)用于神經(jīng)網(wǎng)絡(luò)?

傳統(tǒng)的覆蓋率度量標(biāo)準(zhǔn)要跟蹤哪些代碼行已經(jīng)執(zhí)行。在最基本的形式中,神經(jīng)網(wǎng)絡(luò)被實現(xiàn)為一系列的矩陣乘法,然后是元素運算。這些操作的底層軟件實現(xiàn)可能包含許多分支語句,但其中大多都是基于矩陣的大小,或基于神經(jīng)網(wǎng)絡(luò)的架構(gòu)。因此,分支行為大多獨立于神經(jīng)網(wǎng)絡(luò)輸入的特定值。在幾個不同的輸入上運行的神經(jīng)網(wǎng)絡(luò)通常會執(zhí)行相同的代碼行,并使用相同的分支,但是由于輸入和輸出值的變化,會產(chǎn)生一些有趣的行為變化。因此,使用現(xiàn)有的CGF工具(如AFL)可能不會發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)的這些行為。

在這項工作中,我們選擇使用快速近似最近鄰算法來確定兩組神經(jīng)網(wǎng)絡(luò)的“激活”是否有意義上的不同。這提供了一個覆蓋率的度量(coverage metric),即使神經(jīng)網(wǎng)絡(luò)的底層軟件實現(xiàn)沒有使用很多依賴于數(shù)據(jù)的分支,也能為神經(jīng)網(wǎng)絡(luò)生成有用的結(jié)果。

TensorFuzz庫

從前面描述的模糊測試器中獲得靈感,我們做了一個工具,稱之為TensorFuzz。它的工作方式與其他模糊測試器類似,但它更適合神經(jīng)網(wǎng)絡(luò)的測試。

TensorFuzz不是用C或C++編寫的,而是向任意的TensorFlow graph提供輸入。TensorFuzz也不是通過查看基本的blocks或控制流中的變化來測量覆蓋率,而是通過查看計算圖的“激活”。我們在論文中詳細(xì)討論了模糊測試器的總體架構(gòu),包括數(shù)據(jù)流和基本構(gòu)建塊,以及語料庫如何抽樣,如何執(zhí)行突變,如何評估覆蓋率和目標(biāo)函數(shù)等,具體請閱讀原論文。

實驗結(jié)果

我們簡要介紹了CGF技術(shù)的各種應(yīng)用,證明它在一般設(shè)置中是有用的。

CGF可以有效地發(fā)現(xiàn)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)中的數(shù)值誤差

由于神經(jīng)網(wǎng)絡(luò)使用浮點數(shù)學(xué),因此無論是在訓(xùn)練期間還是在評估期間,它們都容易受到數(shù)值問題的影響。眾所周知,這些問題很難debug,部分原因是它們可能只由一小部分很少遇到的輸入觸發(fā)。這是CGF可以提供幫助的一個例子。我們專注于查找導(dǎo)致非數(shù)(NaN)值的輸入。

CGF可以快速地找到數(shù)值誤差(numerical errors):使用CGF,我們應(yīng)該能夠簡單地將檢查數(shù)值運算添加到元數(shù)據(jù)并運行模糊測試器(fuzzer)。為了驗證這一假設(shè),我們訓(xùn)練了一個完全連接的神經(jīng)網(wǎng)絡(luò)來對MNIST數(shù)據(jù)集里的數(shù)字進(jìn)行分類。我們故意用了一個很糟糕的交叉熵?fù)p失,這樣就有可能出現(xiàn)數(shù)值誤差。我們對模型進(jìn)行了35000步的訓(xùn)練, mini-batch size為100,驗證精度為98%。然后檢查MNIST數(shù)據(jù)集中是否有導(dǎo)致數(shù)值誤差的元素。

如圖2所示,TensorFuzz在多個隨機(jī)初始化過程中快速發(fā)現(xiàn)了NaN。

圖2:我們使用一些不安全的數(shù)值運算訓(xùn)練了一個MNIST分類器。然后,對來自MNIST數(shù)據(jù)集的隨機(jī)種子運行10次fuzzer。fuzzer每次運行都發(fā)現(xiàn)了一個non-finite元素,而隨機(jī)搜索從未發(fā)現(xiàn)過non-finite元素。左:fuzzer運行時的累計語料庫大小,運行10次。右:fuzzer找到一個滿意的圖像。

其他發(fā)現(xiàn):

基于梯度的搜索技術(shù)可能無助于查找數(shù)值誤差

隨機(jī)搜索對于查找數(shù)值誤差來說效率極低

CGF反映了模型與其量化版本之間的分歧

量化(Quantization)是一個存儲神經(jīng)網(wǎng)絡(luò)權(quán)重的過程,并使用由較少內(nèi)存位組成的數(shù)值表示來執(zhí)行神經(jīng)網(wǎng)絡(luò)計算。量化是降低神經(jīng)網(wǎng)絡(luò)計算成本或減小網(wǎng)絡(luò)尺寸的流行方法,并廣泛用于在手機(jī)上運行神經(jīng)網(wǎng)絡(luò)推理,例如 Android Neural Networks APITFLite,以及在自定義機(jī)器學(xué)習(xí)硬件中運行推理,例如谷歌的TPU或NVIDIA的TensorRT。

找到量化產(chǎn)生的誤差很重要:當(dāng)然,如果量化顯著地降低了模型的準(zhǔn)確性,那么量化就沒有多大用處。給定一個量化模型,檢查量化在多大程度上降低了精度是有用的。

通過檢查現(xiàn)有數(shù)據(jù)幾乎找不到錯誤:作為基線實驗,我們使用32位浮點數(shù)訓(xùn)練了一個MNIST分類器(這次沒有故意引入數(shù)值問題)。 然后,將所有權(quán)重和激活截斷為16-bits,我們在MNIST測試集上比較了32-bit和16-bit模型的預(yù)測精度,沒有發(fā)現(xiàn)不一致。

但是,CGF可以快速地在數(shù)據(jù)周圍的小區(qū)域找到許多錯誤,如圖3所示。

圖3:我們訓(xùn)練了一個32-bit浮點數(shù)的MNIST分類器,然后將相關(guān)的TensorFlow graph截為16-bit 浮點數(shù)。左:fuzzer運行時的累計語料庫大小,運行10次。右:fuzzer找到了16-bit 和32-bit 的神經(jīng)網(wǎng)絡(luò)分類不同的圖像

結(jié)果顯示,fuzzer在我們嘗試的70%的示例中產(chǎn)生了分歧。也就是說,CGF可以找到在測試時可能發(fā)生的真正錯誤。

在給定與CGF相同數(shù)量的突變的情況下,隨機(jī)搜索未能找到新的錯誤。

結(jié)論

我們提出了神經(jīng)網(wǎng)絡(luò)的覆蓋引導(dǎo)模糊測試的概念,并描述了如何在這種情況下構(gòu)建一個有用的覆蓋率檢查器。我們已經(jīng)通過使用TensorFuzz查找數(shù)值誤差、發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)和它們的量化版本之間的分歧、以及在RNN中找到不良行為等試驗,證明了TensorFuzz的實用性。最后,我們將同時發(fā)布TensorFuzz的實現(xiàn),以便其他研究人員既可以在我們的工作基礎(chǔ)上進(jìn)行研究,也可以使用fuzzer來查找實際的問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6105

    瀏覽量

    104794
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4726

    瀏覽量

    100315

原文標(biāo)題:谷歌大腦開源TensorFuzz,自動Debug神經(jīng)網(wǎng)絡(luò)!

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于LabVIEW8.2提取ECG特征點的新方法

    基于LabVIEW8.2提取ECG特征點的新方法1、引言目前的心電圖(ECG)還主要依賴于人工讀圖,而且對相關(guān)人員所具備的專業(yè)知識水平要求很高。在計算機(jī)自動分析識別方面,雖有研究但技術(shù)尚不成熟[1
    發(fā)表于 11-30 16:52

    容差模擬電路軟故障診斷的小波與量子神經(jīng)網(wǎng)絡(luò)方法設(shè)計

    中,從而減少故障識別的不確定度,提高模式識別的準(zhǔn)確性。文章提出了容差模擬電路軟故障診斷的小波與量子神經(jīng)網(wǎng)絡(luò)方法,利用MonteCarlo分析解決電路容差問題,又利用小波分析,取其能反映故障信號特征
    發(fā)表于 07-05 08:06

    人工神經(jīng)網(wǎng)絡(luò)實現(xiàn)方法有哪些?

    人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)是一種類似生物神經(jīng)網(wǎng)絡(luò)的信息處理結(jié)構(gòu),它的提出是為了解決一些非線性,非平穩(wěn),復(fù)雜的實際問題。那有哪些辦法能實現(xiàn)人工神經(jīng)
    發(fā)表于 08-01 08:06

    神經(jīng)網(wǎng)絡(luò)移植到STM32的方法

    神經(jīng)網(wǎng)絡(luò)移植到STM32最近在做的一個項目需要用到網(wǎng)絡(luò)進(jìn)行擬合,并且將擬合得到的結(jié)果用作控制,就在想能不能直接在單片機(jī)上做神經(jīng)網(wǎng)絡(luò)計算,這樣就可以實時計算,不依賴于上位機(jī)。所以要解決的主要是兩個
    發(fā)表于 01-11 06:20

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    十余年來快速發(fā)展的嶄新領(lǐng)域,越來越受到研究者的關(guān)注。卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型是深度學(xué)習(xí)模型中最重要的一種經(jīng)典結(jié)構(gòu),其性能在近年來深度學(xué)習(xí)任務(wù)上逐步提高。由于可以自動學(xué)習(xí)樣本數(shù)據(jù)的特征表示,卷積
    發(fā)表于 08-02 10:39

    提高傳感器精度的神經(jīng)網(wǎng)絡(luò)方法

    為使較低精度傳感器獲得較高精度,以提高傳感器的性能價格比。本文提出人工神經(jīng)網(wǎng)絡(luò)提高傳感器精度的新方法。該神經(jīng)網(wǎng)絡(luò)可以看成是一個可以濾去傳感器信號噪聲的非線性濾
    發(fā)表于 06-16 16:15 ?12次下載

    神經(jīng)網(wǎng)絡(luò)電力電子裝置故障診斷技術(shù)

    提出了一種基于神經(jīng)網(wǎng)絡(luò)故障診斷新方法。研究了基于波形直接分析和BP神經(jīng)網(wǎng)絡(luò)的電力電子整流裝置故障診斷方法。以三相橋式可控整流電路晶閘管斷路故
    發(fā)表于 06-19 08:17 ?20次下載

    基于神經(jīng)網(wǎng)絡(luò)的傳感器故障監(jiān)測與診斷方法研究

    提出了一種基于神經(jīng)網(wǎng)絡(luò)的傳感器故障監(jiān)測與診斷的新方法. 該方法先用BP 網(wǎng)絡(luò)的預(yù)測輸出和傳感器實際輸出之差來判斷傳感器是否發(fā)生了故障,然后用
    發(fā)表于 06-23 08:57 ?27次下載

    基于神經(jīng)網(wǎng)絡(luò)的傳感器故障監(jiān)測與診斷方法研究

    提出了一種基于神經(jīng)網(wǎng)絡(luò)的傳感器故障監(jiān)測與診斷的新方法. 該方法先用BP 網(wǎng)絡(luò)的預(yù)測輸出和傳感器實際輸出之差來判斷傳感器是否發(fā)生了故障,然后用
    發(fā)表于 07-04 11:14 ?18次下載

    提高傳感器精度的神經(jīng)網(wǎng)絡(luò)方法

    為使較低精度傳感器獲得較高精度,以提高傳感器的性能價格比。本文提出人工神經(jīng)網(wǎng)絡(luò)提高傳感器精度的新方法。該神經(jīng)網(wǎng)絡(luò)可以看成是一個可以濾去傳感器信號噪聲的非線性濾
    發(fā)表于 07-07 09:01 ?26次下載

    傳感器故障檢測的Powell神經(jīng)網(wǎng)絡(luò)方法

    大型熱力控制系統(tǒng)必須能夠檢測傳感器故障,并采取相應(yīng)的措施,保證控制過程的順利進(jìn)行。提出了一種基于Powell 神經(jīng)網(wǎng)絡(luò)的故障檢測新方法,為系統(tǒng)中每一個傳感器構(gòu)造一個
    發(fā)表于 07-07 09:21 ?6次下載

    神經(jīng)網(wǎng)絡(luò)在電磁場數(shù)值問題中的應(yīng)用

    針對目前電磁場數(shù)值處理中計算繁雜慢速和耗費資源過多的問題, 本文提出了一種基于神經(jīng)網(wǎng)絡(luò)小波理論進(jìn)行計算的新方法。文中著重介紹了利用小波變換神經(jīng)網(wǎng)絡(luò)的基本理論, 結(jié)合電磁
    發(fā)表于 05-18 16:58 ?24次下載
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>在電磁場數(shù)值問題中的應(yīng)用

    基于GA優(yōu)化T_S模糊神經(jīng)網(wǎng)絡(luò)的小電流接地故障選線新方法_王磊

    基于GA優(yōu)化T_S模糊神經(jīng)網(wǎng)絡(luò)的小電流接地故障選線新方法_王磊
    發(fā)表于 12-31 14:45 ?0次下載

    DENSER是一種用進(jìn)化算法自動設(shè)計人工神經(jīng)網(wǎng)絡(luò)(ANNs)的新方法

    深度進(jìn)化網(wǎng)絡(luò)結(jié)構(gòu)表示(DENSER)是一種用進(jìn)化算法自動設(shè)計人工神經(jīng)網(wǎng)絡(luò)(ANNs)的新方法。該算法不僅能搜索最佳網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),還能調(diào)整超參
    的頭像 發(fā)表于 01-10 15:49 ?6576次閱讀
    DENSER是一種用進(jìn)化算法<b class='flag-5'>自動</b>設(shè)計人工<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(ANNs)的<b class='flag-5'>新方法</b>

    一種基于深度神經(jīng)網(wǎng)絡(luò)的迭代6D姿態(tài)匹配的新方法

    在本文工作中,作者提出了DeepIM——一種基于深度神經(jīng)網(wǎng)絡(luò)的迭代6D姿態(tài)匹配的新方法。給定測試圖像中目標(biāo)的初始6D姿態(tài)估計,DeepIM能夠給出相對SE(3)變換符合目標(biāo)渲染視圖與觀
    的頭像 發(fā)表于 09-28 10:23 ?3731次閱讀