自動給神經網路找bug,Google發布TensorFuzz
夏乙 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
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.10875
Abstract
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是一個開源庫。 不過嘛,目前兩位研究人員還沒放出地址,為期應該不遠了~
—完—
※自主晶元+國產系統!天河三號原型機研製完成,中國超算有望重回No.1
※蘋果架構調整:AI、機器學習和Siri合併,由前谷歌AI負責人領導
TAG:量子位 |