夏乙 发自 凹非寺
量子位 报道 | 公众号 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是一个开源库。 不过嘛,目前两位研究人员还没放出地址,为期应该不远了~

加入社群

量子位AI社群18群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;

此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。

进群专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

实习生招聘

量子位正在招募活动运营实习生,策划执行AI明星公司CEO、高管等参与的线上/线下活动,有机会与AI行业大牛直接交流。工作地点在北京中关村。简历欢迎投递到quxin@qbitai.com

具体细节,请在量子位公众号(QbitAI)对话界面,回复“实习生”三个字。

量子位 QbitAI · 头条号签约作者

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

自动给神经网络找bug,Google发布TensorFuzz相关推荐

  1. 海王星给你好看!FineUI v4.0公测版发布暨《你找BUG我送书》活动开始

    海王星是太阳系八大行星中距离太阳最远的,体积是太阳系第四大,但质量排名是第三.海王星的质量大约是地球的17倍.海王星以罗马神话中的尼普顿(Neptunus)命名,因为尼普顿是海神,所以中文译为海王星. ...

  2. 海王星给你好看!FineUI v4.0公测版发布暨《你找BUG我送书》活动开始(活动已结束!)...

    <FineUI v4.0 你找BUG我送书>活动已结束,恭喜如下三位网友获得由 FineUI 作者亲自翻译的图书<jQuery实战 第二版>! 奋斗~ 吉吉﹑ purplebo ...

  3. 谷歌学术 rss_如何自动将博客RSS供稿发布到Google plus页面?

    谷歌学术 rss I have a blog with RSS feeds. Feeding to twitter and facebook is supported by many tools. B ...

  4. NeuralFinder:集成人工生命和遗传算法自动发现神经网络最优结构

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ 张俊林 黄通文 马柏樟  薛会萍                一.为什么要做神经网络结构自动发现 从16年年中开始,我们开始 ...

  5. 一周AI新闻 | 追踪眼球找BUG,AI可从眼球运动中学习

     追踪眼球找 BUG   AI 智能体可从眼球运动中学习  「 程序员的眼里有什么? 」 人类在从事认知要求高的任务时所做的眼球运动其实暗藏很多沟通.而一个有经验的程序员会将注意力放在程序的信息部分以 ...

  6. 软件测试工程师除了找BUG,还能干啥?

    大部分的人都认为,软件测试工程师的工作就只是找BUG.其实不然,找BUG只是软件测试工程师众多工作中的一部分.今天,编就来给大家说一说,软件测试工程师的主要工作内容. 测试.自动化.性能,这三个不管项 ...

  7. 谷歌叫你来找bug!不会的还包教!

    Vulnerability Rewards Program,即漏洞赏金计划(VRP),是目前很多科技公司查找自家漏洞的主要方法之一.谷歌自其漏洞奖励计划年底启动以来,已经累计为全球2022名安全研究人 ...

  8. Google 发布 Cloud AutoML 降低机器学习门槛,调参民工前景堪忧

    翻译 | AI 科技大本营(rgznai100) 参与 | 刘畅.林椿眄 编辑 | 周翔.Donna 本周三,Google 发布了最新的 Cloud AutoML 技术,该技术能使企业开发者们通过 G ...

  9. 客户花钱雇黑客,竟是为Zoom找bug:风口浪尖的视频会议No.1,安全问题如此魔幻...

    白交 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 客户花钱找黑客,帮你产品找Bug-- 这样的客户哪里找?这样的产品又究竟有怎样的福报? Zoom,疫情之下最火爆的视频会议公司,又上演 ...

最新文章

  1. 组态王浏览器java_1工程浏览器是组态王的集成开发环境在这里可以
  2. RDB和AOF的持久化配置
  3. 【Laravel】连接 sqlite 数据库 Database [xxx] not exist
  4. 一文读懂云上用户如何灵活应用定制化网络服务
  5. Python自动化测试框架有哪些?
  6. android 设备占用_如何查看正在占用Android设备的空间
  7. 分数化简_分数应用题七讲 (一) 图示法解分数应用题
  8. 【mysql】提取字符串中的数字、字母、中文,或任意组合
  9. 传递实体类对象_Java I/O 流之对象流中的序列化和反序列化
  10. vue 调用移动录像_vue调用摄像头拍照 (移动)2020-11-18
  11. Android 《第1行代码》-所有知识点架构
  12. python经典编程100例(1)
  13. 票据纸张尺寸对照表_纸张小科普 | 白卡纸
  14. tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解
  15. PS CC2017安装及破解
  16. 第一篇--读刘同的《别做那只迷途的候鸟》
  17. Windebug专题
  18. python 线程通信的几种方式_Python 线程、线程通信、多线程
  19. 组合数学在计算机中的应用,组合数学在计算机科学中的应用
  20. windows 远程连接 快捷键

热门文章

  1. gui卡顿 python_视频下载神器(youget),在 Python 中怎么使用?
  2. createsolidcaret 后 很快就不闪烁了_【文献推送】Adv. Mater. | 单分散硅基闪烁体实现X射线介导的深层肿瘤光动力治疗...
  3. Linux线程ID是32位的,对于linux中线程id的讨论
  4. 支持pygame的python有哪些版本_完整构建文件支持PYGAME
  5. 用html代码实现做题记分,html解析cricinfo记分卡
  6. mysql byte函数_mysql8 参考手册-format_bytes()函数
  7. 添加防火墙策略_网络安全文章基础篇(第5张)防火墙项目实战笔记
  8. python中修饰器_python 中的修饰器
  9. python函数作用域_Python命名空间和作用域的基本认识和一点小魔法
  10. 使用 json-server 作为 mock 数据