热门标签 | 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 级硕士石孟雨翻译转述。




推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
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社区 版权所有