DEBUG,是程式員永無止境的日常。給神經網絡捉蟲,更是比普通程式難得多:
絕大部分bug都不會導緻神經網絡崩潰、報錯,隻能讓它訓練了沒效果,默默地不收斂。
能不能把煉丹師們從無休止無希望的debug工作中拯救出來?兩位谷歌大腦研究員Augustus Odena和Ian Goodfellow說,好像能。

他們推出了一種自動為神經網絡做軟體測試的方法:TensorFuzz。它非常擅長自動發現那些隻有少數某些輸入會引發的錯誤。
比如說,它能在已訓練的神經網絡裡發現數值誤差,生成神經網絡和其量化版本之間的分歧,發現字元級語言模型中的不良行為。
這種方法說新也不新,它來源于傳統程式設計技藝中的一種測試手段:覆寫引導的模糊測試,英語叫coverage-guided fuzzing,簡稱CGF。
模糊測試,就是通過向目标系統提供非預期的輸入并監視異常結果,來發現軟體漏洞。也就是說,用随機壞資料(也稱做 fuzz)攻擊一個程式,然後等着觀察哪裡遭到了破壞。
而所謂“覆寫引導”的模糊測試,是指在進行模糊測試時,盡量最大化程式的代碼覆寫率,測試盡可能多的代碼分支。
AFL、libFuzzer都是比較常見的模糊測試工具。
當然傳統的方法,不能直接用于神經網絡。把CGF搬到神經網絡上,不能像在傳統的測試中那樣簡單地去計算分支覆寫率。為此,深度學習的研究者們提出了不少計算覆寫率的新方法,來計算神經元覆寫率、神經元邊界覆寫率等等。
兩位谷歌大牛提出,應該存儲與輸入相關聯的激活,通過用近似最近鄰算法來檢查這些輸入有沒有導緻覆寫率的增加,
粗略地說,TensorFuzz是通過檢視計算圖的“激活”來測量覆寫率。整體架構如下圖所示,左邊是模糊測試的程式圖,标明了資料如何流動;右邊以算法形式描述了模糊測試過程的主循環。
說一下實驗結果。
1、CGF可以在訓練好的神經網絡中有效發現數值誤差
由于神經網絡使用浮點數學,是以無論是在訓練還是評估時,都很容易受到數值問題的影像。衆所周知,這些問題很難調試。而CGF可以幫助我們專注于找到導緻NaN值的輸入。
2、CGF揭示了模型和其量化版本之間的分歧
量化是一種存儲神經網絡權重的方法,本質上是使用較少的數值表示來執行神經網絡的計算。量化是降低神經網絡計算成本或尺寸的流行方法。但是一定要避免量化之後,顯著降低模型的準确性。
CGF可以在資料周圍的小區域内快速找到許多錯誤,在測試的案例中,70%的情況下模糊器能夠産生分歧。另外,在給定相同突變的情況下,随機搜尋沒有找到新的錯誤。
3、CGF揭示了字元級語言模型中的不良行為
作者運作了TensorFuzz和随機搜尋進行測試,測試目的有兩個,一是模型不應該連續多次重複相同的詞,而是不應該輸出黑名單上的詞。
測試進行24小時後,TensorFuzz和随機搜尋都生成了連續重複的詞。此外,TensorFuzz生成了十個黑名單詞彙中的六個,而随機搜尋隻有一個。
大概就醬。
總之,作者為神經網絡引入CGF的概念,并且在論文中描述了如何實作。上面的三個實驗結果,證明了TensorFuzz的實際适用性。
Goodfellow說,他希望TensorFuzz能成為包括機器學習在内複雜軟體的基礎回歸測試。例如在新版本釋出前,模糊搜尋新舊版本之間的差異。
論文傳送門在此:
https://arxiv.org/abs/1807.10875Abstract
Machine learning models are notoriously difficult to interpret and debug. This is particularly true of neural networks. In this work, we introduce automated software testing techniques for neural networks that are well-suited to discovering errors which occur only for rare inputs. Specifically, we develop coverage-guided fuzzing (CGF) methods for neural networks. In CGF, random mutations of inputs to a neural network are guided by a coverage metric toward the goal of satisfying user-specified constraints. We describe how fast approximate nearest neighbor algorithms can provide this coverage metric. We then discuss the application of CGF to the following goals: finding numerical errors in trained neural networks, generating disagreements between neural networks and quantized versions of those networks, and surfacing undesirable behavior in character level language models. Finally, we release an open source library called TensorFuzz that implements the described techniques.
作者還說了,TensorFuzz是一個開源庫。 不過嘛,目前兩位研究人員還沒放出位址,為期應該不遠了~
原文釋出時間為:2018-08-01
本文來自雲栖社群合作夥伴“
量子位”,了解相關資訊可以關注“量子位”。