自动给神经网络找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是一个开源库。 不过嘛,目前两位研究人员还没放出地址,为期应该不远了~

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2018-08-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏理查德的专栏

通用文本标注工具 labelme

一个支持文本类目标注和关键词打分的通用标注工具,为文本分类模型和关键词抽取任务提供训练和测试数据。

4.4K4
来自专栏QQ大数据团队的专栏

神盾推荐——离线算法平台

1.7K7
来自专栏企鹅号快讯

如何用Python和深度神经网络识别图像?

视觉 进化的作用,让人类对图像的处理非常高效。 这里,我给你展示一张照片。 如果我这样问你: 你能否分辨出图片中哪个是猫,哪个是狗? 你可能立即会觉得自己遭受到...

4569
来自专栏AI研习社

微软开源 repo 1.0 ,旨在创造深度学习框架通用语言

AI 研习社按,日前,微软提出深度学习框架的通用语言——repo1.0,号称希望通过构建这一深度学习框架「Rosetta Stone(罗塞塔石碑)」,让研究者们...

1352
来自专栏AI科技大本营的专栏

10行代码实现目标检测,请收下这份教程

作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学。该领域主要包括图像识别,目标检测,图像生成,图像超分辨率等多个方向。...

1301
来自专栏机器之心

资源 | ChainerCV:基于Chainer的深度学习计算机视觉实用库(内含工具集)

选自GitHub 作者:二井谷勇佑(Yusuke Niitani) 机器之心编译 参与:黄小天、蒋思源 近日,Preferred Networks 通过其研究博...

32511
来自专栏新智元

MXNet 作者李沐:用深度学习做图像分类,教程+代码

2135
来自专栏AI科技大本营的专栏

如何通过深度学习轻松实现自动化监控?

【导读】这是一篇关于使用基于深度学习的目标检测来实现监控系统的快速教程。在教程中通过使用 GPU 多处理器来比较不同目标检测模型在行人检测上的性能。

1145
来自专栏MelonTeam专栏

老司机用神经网络带您安全驾驶

0 概述 随着今年深度学习的热潮的来临,神经网络已经被应用在越来越多的应用中。而在印象中对于神经网络进行训练的往往需要借助大量的计算资源与数据。其实通过一定的...

2555
来自专栏社区的朋友们

老司机用神经网络带您安全驾驶

通过一定的方法,配合预训练好的网络,我们完全可以在自己的PC上训练出一个准确率较高、实用性也非常不错的网络。下面我就以Kaggle上的一个竞赛为例,带领各位司机...

8301

扫码关注云+社区

领取腾讯云代金券