神经网络自动DEBUG大法来了!谷歌优化模糊测试,发布TensorFuzz

admin 2025-01-12 250人围观 ,发现28个评论

DEBUG,是程序员永无止境的日常。给神经网络捉虫,更是比普通程序难得多:

绝大部分bug都不会导致神经网络崩溃、报错,只能让它训练了没效果,默默地不收敛。

能不能把炼丹师们从无休止无希望的debug工作中拯救出来?两位谷歌大脑研究员AugustusOdena和IanGoodfellow说,好像能。

他们推出了一种自动为神经网络做软件测试的方法:TensorFuzz。它非常擅长自动发现那些只有少数某些输入会引发的错误。

比如说,它能在已训练的神经网络里发现数值误差,生成神经网络和其量化版本之间的分歧,发现字符级语言模型中的不良行为。

模糊测试,就是通过向目标系统提供非预期的输入并监视异常结果,来发现软件漏洞。也就是说,用随机坏数据(也称做fuzz)攻击一个程序,然后等着观察哪里遭到了破坏。

而所谓“覆盖引导”的模糊测试,是指在进行模糊测试时,尽量最大化程序的代码覆盖率,测试尽可能多的代码分支。

AFL、libFuzzer都是比较常见的模糊测试工具。

当然传统的方法,不能直接用于神经网络。把CGF搬到神经网络上,不能像在传统的测试中那样简单地去计算分支覆盖率。为此,深度学习的研究者们提出了不少计算覆盖率的新方法,来计算神经元覆盖率、神经元边界覆盖率等等。

两位谷歌大牛提出,应该存储与输入相关联的激活,通过用近似最近邻算法来检查这些输入有没有导致覆盖率的增加,

粗略地说,TensorFuzz是通过查看计算图的“激活”来测量覆盖率。整体架构如下图所示,左边是模糊测试的程序图,标明了数据如何流动;右边以算法形式描述了模糊测试过程的主循环。

说一下实验结果。

1、CGF可以在训练好的神经网络中有效发现数值误差

由于神经网络使用浮点数学,因此无论是在训练还是评估时,都很容易受到数值问题的影像。众所周知,这些问题很难调试。而CGF可以帮助我们专注于找到导致NaN值的输入。

2、CGF揭示了模型和其量化版本之间的分歧

量化是一种存储神经网络权重的方法,本质上是使用较少的数值表示来执行神经网络的计算。量化是降低神经网络计算成本或尺寸的流行方法。但是一定要避免量化之后,显著降低模型的准确性。

CGF可以在数据周围的小区域内快速找到许多错误,在测试的案例中,70%的情况下模糊器能够产生分歧。另外,在给定相同突变的情况下,随机搜索没有找到新的错误。

3、CGF揭示了字符级语言模型中的不良行为

作者运行了TensorFuzz和随机搜索进行测试,测试目的有两个,一是模型不应该连续多次重复相同的词,而是不应该输出黑名单上的词。

测试进行24小时后,TensorFuzz和随机搜索都生成了连续重复的词。此外,TensorFuzz生成了十个黑名单词汇中的六个,而随机搜索只有一个。

大概就酱。

总之,作者为神经网络引入CGF的概念,并且在论文中描述了如何实现。上面的三个实验结果,证明了TensorFuzz的实际适用性。

Goodfellow说,他希望TensorFuzz能成为包括机器学习在内复杂软件的基础回归测试。例如在新版本发布前,模糊搜索新旧版本之间的差异。

论文传送门在此:

Abstract

,weintroduceautomatedsoftwaretestingtechniquesforneuralnetworkst,wedevelopcoverage-guidedfuzzing(CGF),randommutationsofinputstoaneuralnetworkareguidedbyac:findingnumericalerrorsintrainedneuralnetworks,generatingdisagreementsbetweenneuralnetworksandquantizedversionsofthosenetworks,,wereleaseanopensourcelibrarycalledTensorFuzzthatimplementsthedescribedtechniques.

作者还说了,TensorFuzz是一个开源库。不过嘛,目前两位研究人员还没放出地址,为期应该不远了~

—完—

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

վ'ᴗ'ի追踪AI技术和产品新动态

猜你喜欢
    不容错过