热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模糊神经网络_DeepHunter:深度神经网络覆盖导向的模糊测试框架

1、引用XiaofeiXie,LeiMa,FelixJuefei-Xu,MinhuiXue,HongxuChen࿰

1、引用

Xiaofei Xie, Lei Ma, Felix Juefei-Xu, Minhui Xue, Hongxu Chen, Yang Liu, Jianjun Zhao, Bo Li, Jianxiong Yin, and Simon See. 2019. DeepHunter:a coverage-guided fuzz testing framework for deep neural networks. In Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2019). Association for Computing Machinery, New York, NY, USA, 146–157. DOI:https://doi.org/10.1145/3293882.3330579

2、摘要

基于深度神经网络(DNN)的软件应用于关键安全场景有着巨大的潜力,比如自动驾驶。与传统软件类似,DNNs 可能会出现错误的行为,由于一些隐患而导致严重的事故和损失。在本文中,我们提出了 DeepHunter,一个覆盖导向的模糊测试框架,用于检测通用 DNNs 的潜在缺陷。首先提出一个变形策略来生成新的语义保留测试,并利用多个可扩展的覆盖率标准作为反馈来指导测试生成。在此基础上,提出了基于多样性和基于新近性的种子选择策略,整体上实施并整合了 5 个现有的测试标准和 4 个种子选择策略。

大规模实验表明:(1)我们的变形变异策略能够有效地生成与原始种子语义相同的新的有效测试,其有效性高达 98%;(2)在提高覆盖率和检测缺陷方面,基于多样性的选种一般比基于新近性的选种权重大;(3) DeepHunter 在覆盖率、缺陷的数量和多样性方面优于现有技术;(4)在基于角域的准则指导下,DeepHunter 在平台迁移的 DNN 量化过程中有利于捕获缺陷。

关键字:深度学习测试,变形测试,覆盖导向模糊

3、引言

近十年来,深度学习(DL)在许多前沿智能应用领域取得了巨大成功,如图像处理、语音识别、视频、棋类游戏。然而,与传统软件一样,基于 DNN 的软件尽管在对抗攻击测试精度非常高,但仍然存在缺陷。一些真实的案例,如报道的 Tesla/Uber 事故,智能语音机器人(如 Siri, Alexa)被隐藏的命令操纵,可能会造成严重的安全隐患。因此 DL 的质量和安全保证的重要性开始引起人们的注意,特别是那些应用于安全和关键任务场景的 DL。

基于 DNN 的软件在部署前也需要进行系统测试,重点在于早期识别其潜在的缺陷和脆弱性,据此向开发人员反馈,以进一步分析根本原因,增强健壮性。传统软件和 DNN 软件编程范式和开发流程的根本差异,导致传统软件的测试技术不能直接应用于基于 DNN 的软件,这对 DL 软件的测试提出了新的挑战。传统软件的测试标准(如行覆盖、分支覆盖)直接遵循源代码结构,而 DNNs 的现有测试标准(如神经元覆盖、KMNC)则没有这种明确的结构。直观地看,增加测试标准以覆盖特定的代码片段(如分支)是检测缺陷的必要条件(见图 1)。当涉及到深度测试标准时,这种随意的联系就变得模糊。

ec711bd4da582aab49805cff28f39971.png

图 1 传统软件和 DNN 软件决策流比较。强调对最终输出决策做出主要贡献的神经元

近年来,DL 软件的测试取得了一些进展,主要围绕软件测试中的两个重要问题:1)测试标准,如神经元覆盖率、k-multisection 神经元覆盖率(KMNC)和神经元边界覆盖率(NBC);2)最大化覆盖的测试策略,如覆盖导向模糊(CGF)测试技术。但是 DNN 测试处于起步阶段,仍然有很多问题需要深入研究。DNN 软件其中一个就是不能遵守源代码结构,还有一个就是 DNN 测试期间,新生成的测试没有明确的断言,在 DNN 软件测试的框架下生成有效测试显得尤为重要。

在本文中,我们提出了一个用于 DNNs 的通用覆盖引导模糊测试框架 DeepHunter。具体地说,我们提出了一种图像生成的变形变异策略,在很大程度上保留了变异前后的测试输入语义,以及一种基于模糊化种子次数的频率感知种子选择策略。DeepHunter 是可扩展的,因为新的测试标准、种子选择策略和突变策略可以很容易地实现并插入到框架中。DeepHunter 整合了最近提出的 5 个测试标准和 4 种选种策略。本文贡献如下:

(1)提出一个生成有效测试用例的变形变异策略。通过对三个流行数据集的用户研究,证明了该方法的有效性。

(2)提出一个用于测试 DNNs 的通用 CGF 框架 DeepHunter。采用了 5 个最先进的试验标准,3 个现有的和 1 个新的选种策略。

(3)对不同测试策略和标准在增加 DNNs 的覆盖率和检测缺陷方面的有效性进行了系统的大规模研究。结果还表明,DeepHunter 比最先进的工具更有效。

(4)我们进一步进行了一个案例研究,以证明 DeepHunter 在检测 DNN 平台迁移过程中量化引入的小缺陷方面的有用性。

4、研究方法

典型的 CGF 迭代执行以下步骤:(1)从种子队列中选择种子;(2)将种子变异一定次数,以产生新的检测;(3)针对新生成的测试运行目标程序,如果检测到崩溃,则报告失败的测试,并将那些包含新跟踪的感兴趣的测试保存到种子队列中。尽管传统项目与 DNNs 存在很大差距,但 CGF 在传统项目上的成功仍可为 DNNs 的测试提供借鉴。考虑到 DNN 的独特特性,本文旨在设计一个有效的 CGF 框架,以便在 DNN 开发和部署过程中提供质量保证。

3d4fee6a481a92098a0501952647b60c.png

图 2 可扩展种子选择策略、变异策略和覆盖指导的 DeepHunter 工作流

4.1 转换和变异

4.1.1 测试断言

传统的模糊处理(例如,AFL[1])通过按位/字节翻转、块替换、输入文件之间的交叉等方式对种子进行突变。在任意变异的情况下,产生了各种各样的测试扩大覆盖范围。突变体在 DNN 测试中并不有用,因为没有明确的断言来判断突变体的结果。例如,突变器可能会生成人类无法识别的图像(如图 1 中无效的输入)。本工作采用测试图像在转换过程中的变形关系作为断言。

实际上,保证在任何情况下生成保留语义测试的完美变形变异策略可能并不存在。在本文中,我们应用特定领域的知识来设计一个允许生成具有低误报率的保留语义测试的保守变异策略。为 CGF 设计有效的变异策略,在增加变异的可变性和生成保留语义的测试之间保持平衡是一个挑战。如果突变策略使种子发生了非常小的变化,那么新生成的测试可能几乎没有变化,fuzzer 具有更低的发现失败测试或提高覆盖率的机会。如果种子更改太多,生成的测试可能会更改语义。针对这一挑战,我们提出了一种新的图像处理领域的变形变异策略。

4.1.2 变异突变

为了增加突变的可变性,我们选择了两类的 8 种图像变换:

l 像素值变换 P:图像对比度,图像亮度,图像模糊,图像噪声。

l 仿射变换 G:图像平移,图像缩放,图像剪切,图像旋转。

直观上,像素值变换改变像素值,而仿射变换(AF)移动图像的像素。这些转换已经被证明有效。为了保持突变体的语义接近于原始种子,我们采取保守策略,选择使用仿射变换只有一次(假设突变不影响精心挑选的语义参数)作为图像更不容易认出来如果他被多个仿射变换改变。可以多次使用像素值变换来增加可变性,我们使用 L0 和 L∞ 来约束像素级的变化。假设图像 s’是由 s 经过像素值变换得到的,那么 s’如果满足 f(s,s’)则为有效:

dce8db087c781f354a73240fc7279438.png

其中 0 <α&#xff0c; β <1&#xff0c;L0(s&#xff0c;s’)表示 s 与 a 之间的最大变化像素数。

4.1.3 变异突变算法

如图 3 算法所示&#xff0c;以一个图像 s 和将要生成的图像总数 K 作为输入&#xff0c;创建一组新生成的测试 T 作为输出。第一行首先获得初始种子 s0 和参考图像 s0’&#xff0c;然后生成 K 个新测试(第 3- 20 行)&#xff0c;为生成一个测试&#xff0c;DeepHunter 尝试用最大试验次数 TRY_NUM 对种子 s 进行突变(5-18 行)。如果参考图像与种子相同&#xff0c;则表示没有采用仿射变换。这样&#xff0c;既可以选择仿射变换&#xff0c;也可以选择像素值变换(第 7 行)&#xff0c;否则只能使用像素值变换(第 9 行)。所选择的转换 t&#xff0c;它随机选择一个参数(第 10 行)并执行转换(11 行)。如果选择了仿射变换&#xff0c;它将更新参考图像(14- 15 行)。如果经过最大次数训练后没有成功的突变则将原始图像 s 添加到 T 中(第 20 行)。

fc0bf55c5c27bb7eae8b5d3898cb1b24.png

4.2 可扩展的测试标准

有各种各样的标准被提出来测量神经网络的内部行为。在本文中&#xff0c;我们实现了 5 个现有的标准作为不同的反馈度量&#xff0c;比如深度学习系统的多粒度测试标准&#xff0c;从而确定是否应该保留新生成的测试以备进一步突变。该标准代表了现状并已被证明是有用的&#xff0c;以捕获内部 DNN 状态。

4.3 种子优先级

在传统的程序中&#xff0c;如果一个种子覆盖了一个分支&#xff0c;因为分支之间存在层次关系它更有可能通过改变种子来覆盖下面的分支。因此&#xff0c;传统的覆盖引导模糊器通常倾向于从队列中选择新生成的测试。当前的技术遵循类似的想法&#xff0c;对新生成的测试进行优先级选择。在 DeepHunter 中实现了两个策略&#xff1a;1)从队列中随机选择一颗种子的均匀采样策略。2)一种根据种子被模糊化的次数概率选择种子的新策略。选择种子 s 的概率由下面公式决定

7328ced5c9f0881bc2532b0b48c5e60b.png

其中 g(s)代表了多少次种子已经春光&#xff0c;pmin > 0 是一个选择种子最低概率。γ 是约束概率下降率的参数。

5、实验设计与分析

选择三个流行的公开数据集(即 MNIST、CIFAR-10 和 ImageNet)作为评估主题数据集。对于每个数据集&#xff0c;我们研究了之前工作中使用的几个流行的预训练 DNN 模型&#xff0c;从而达到测试精度。

afb95d0f09814580db04cbe726e03bb7.png

我们对三种不同的限制测试图像(DeepHunter、TensorFuzz、TensorFuzz)生成的策略进行了用户研究&#xff0c;并评估了它们在生成有效测试图像方面的有效性。对于每个数据集&#xff0c;随机选取 30 幅图像作为种子&#xff0c;三种突变策略每一种都生成 5000 幅图像。最后生成 9 个集合&#xff0c;共 45000 张测试图像(&#61;3 个数据集 x 3 个策略 x 5000 代)。我们为用户研究招募了 9 名参与者&#xff0c;并为每个参与者分配了一个测试集。考虑此外还现有的检测准则是否有助于指导误差检测和在不同的检测准则下&#xff0c;种子选择策略如何影响检测的有效性(包括检测到的误差的覆盖率、数量和多样性)这两个方面进行控制实验。以不同测试标准的结合为指导&#xff0c;对以下 5 种策略进行了深入的评估&#xff1a;

没有覆盖指导的随机测试(RT)&#xff1b;

DeepHunter&#43;同类 (DH&#43;UF)&#xff1b;

DeepHunter &#43;概率(DH &#43;概率)&#xff1b;

深度测试种子选择策略与覆盖指导&#xff1b;

TensorFuzz 种子选择策略与覆盖指导。

5.1 RQ1 变异突变的用户研究

表 2 显示了通过手动分析不同策略生成的无效图像的数量。三种策略中&#xff0c;CIFAR-10 的无效率普遍高于 MNIST 和 ImageNet。原因是 CIFAR-10 的分辨率相对较低。因此&#xff0c;即使是能够被 DNN 正确预测的有效输入&#xff0c;CIFAR-10 图像也很难被人类识别。虽然 DeepTest 中使用的转换参数相当保守&#xff0c;但它会生成许多没有约束的无效图像。例如&#xff0c;CIFAR-10 和 ImageNet 的无效图像分别占 32.0%和 18.3%。

8e4cd2d6e7803a5713eb6175cf1f1a22.png

图 2 不同突变策略产生的无效图像的数量和比例

用户研究表明&#xff0c;每种变形变异策略都可能产生无效图像。通过适当的约束设计和参数调整&#xff0c;有可能进一步降低失效率。我们的变异策略生成的测试图像具有较高的有效性。

5.2 RQ2 覆盖率增加的结果

表 3 显示了不同标准下的平均覆盖率结果。行 Init 显示初始种子所达到的覆盖度&#xff0c;粗体数字表示使用不同策略的特定标准的最佳情况。总的来说&#xff0c;我们有以下发现&#xff1a;

尽管与传统软件有本质上的不同&#xff0c;CGF 仍然比随机测试有效地最大化覆盖率&#xff0c;特别是对于那些难以覆盖的标准。尽管现有的 DL 测试标准没有像源代码中那样显示出显式的结构信息&#xff0c;但是这些标准可能仍然包含一些隐藏的决策流信息&#xff0c;这些信息使得覆盖指导策略在提高覆盖率方面更加有效。

与传统软件的 fuzzers 通常优先选择新生成的测试不同&#xff0c;在 DNN 测试中从队列中取样不同的种子也很重要。总的来说&#xff0c;在许多情况下&#xff0c;DH&#43;UF 和 DH&#43;Prob 比 Tensorfuzz 和 DeepTest 获得更高的覆盖率。后两种倾向于选择新生成的测试&#xff0c;而前两种倾向于选择更多样化的种子。

不同标准提高覆盖率的难度不同。对于 KMNC、TKNC 和 NC 来说&#xff0c;提高覆盖率相对比较容易。对于 NBC 和 SNAC 来说&#xff0c;由于它们代表的是边缘区域&#xff0c;所以很难覆盖&#xff0c;这样的结果已经在其他论文中得到验证。

ecf08efefb5a0ae9845375b9fe40b4f8.png

图 3 使用不同配置的模糊器运行超过 10 次的平均覆盖结果(%)

5.3 RQ3 误差检测结果

从队列中选择种子多样性是重要的&#xff0c;因此从某种程度上讲&#xff0c;误差的数量越多越好。例如&#xff0c;在大多数情况下&#xff0c;DH&#43;Prob 比其他策略检测到更多的错误。在较小的模型中&#xff0c;DH&#43;Prob 和 DH&#43;UF 检测到的错误数量是相似的。然而&#xff0c;当模型变得更复杂时&#xff0c;DH&#43;Prob 比 DH&#43;UF 检测到更多的错误。例如&#xff0c;在 VGG16 中&#xff0c;DH&#43;Prob 检测到 10553 个唯一错误&#xff0c;而 DH&#43;UF 只发现了 5437 个唯一错误。除了误差的数量&#xff0c;误差的多样性也很重要。不同的错误提供了更多的反馈&#xff0c;使开发人员能够理解问题&#xff0c;从而进一步增强的健壮性。研究表明&#xff0c;种子选择策略在 DNN 检测中具有重要意义。对选种的强烈偏好可能会达到极值&#xff0c;但会导致产生缺乏多样性的试验。一个简单的随机选择增加了多样性&#xff0c;但可能找不到角落的情况。

覆盖引导的模糊检测方法是一种有效的检测 DNNs 误差的方法。这种有效性受到测试策略的高度影响。在种子选择中同时考虑多样性和优先性的平衡策略 DeepHunter&#43;Prob 可以有效地检测出不同的错误。

5.4 RQ4 量化的错误检测

30600b744a6c205e6ccbefbd434c534b.png

表 4 DeepHunter&#43;Prob 和 TensorFuzz 在不同的 DNN 数量比设置(从 32 位到 16 位)下运行 5 次时检测到的唯一错误的平均数量。

表 4 总结了 DeepHunter&#43;Prob 和 TensorFuzz 在量化过程中引入的错误检测结果。在我们的实验中&#xff0c;对于所有情况&#xff0c;每个数据集的所有初始种子都无法检测量化前后的误差。

我们可以看到在不同的覆盖指导下 DeepHunter 发现的错误数量是不同的。使用 NBC 时&#xff0c;DeepHunter 发现 LeNet-5 和 ResNet-20 的错误更多。对于 MobileNet&#xff0c;错误发现与 NBC&#xff0c; SNAC&#xff0c; TKNC 超过其他两个标准。结果显示&#xff0c;代表 DNNs 总体主要行为的 KMNC 和 NC 在此类场景中相对无效。基于角域的标准对于捕获量化误差可能更有用。

在基于角域的标准下&#xff0c;DeepHunter 对于检测 DNN 量化过程中引入的误差更有用。较大的 QR 常常在量化前后引入较大的决策逻辑不一致性。同样&#xff0c;在较大的模型中&#xff0c;相同的 QR 通常会带来更高的影响力。

6、讨论与总结

主题数据集和 DNN 模型的选择可能对有效性构成威胁&#xff0c;我们试图通过使用 3 个经过充分研究的具有不同复杂性的数据集和流行的预训练的 DNN 模型来解决这个问题。此外&#xff0c;变异突变不能保证在所有情况下生成的图像的有效性&#xff0c;测试生成和混合精度模型量化过程中的随机性因素也是一大威胁。我们通过对每个配置重复多次、生成多个量化模型并平均结果来解决这个问题。

我们提出的 DeepHunter 是可扩展的&#xff0c;目前集成了四种种子选择策略和五种测试标准。进行大规模的比较研究来评估不同测试策略对不同标准的影响&#xff0c;最终证明了 DeepHunter 的有效性。由于关于深度学习质量保证的调查仍处于早期阶段&#xff0c;我们希望 DeepHunter 能让 SE 和 AI 社区都受益&#xff0c;并促进构建高质量 DNN 软件的进一步广泛研究。

7、致谢

本文由南京大学软件学院 2021 级硕士石孟雨翻译转述。




推荐阅读
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • D17:C#设计模式之十六观察者模式(Observer Pattern)【行为型】
    一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份& ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
author-avatar
潮人-小麦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有