FuzzGAN: A Generation-Based Fuzzing Frameworkfor Testing Deep Neural Networks

FuzzGAN:基于生成的深度神经网络测试模糊框架 

摘要: 

        深度神经网络(dnn)在各个领域的应用越来越广泛。尽管dnn取得了惊人的进步,但众所周知,dnn存在敌对性漏洞。然后,dnn的鲁棒性受到威胁,因为它会导致带有意外输入(敌对例子)的错误分类。常用来测试传统软件的模糊技术最近被用来评估dnn的鲁棒性。目前的DNN模糊技术主要关注图像分类DNN,并通过图像变换和对抗扰动等突变生成测试用例。然而,基于突变的测试用例往往缺乏多样性,且与原始DNN输入空间存在分布偏差,影响对DNN的评价。在本文中,我们提出了一个基于生成的模糊框架FuzzGAN来检测dnn中存在的对抗性缺陷。我们将测试目的和神经元覆盖的引导整合到辅助分类器生成对抗网络的原始目标中。因此,FuzzGAN学习DNN输入空间的表示,并在不受任何具体种子输入限制的情况下生成测试用例。我们评估了FuzzGAN在两个具有经典网络结构并在公共数据集上训练的DNN模型上的性能。实验结果表明,FuzzGAN能够生成真实、多样、有效的测试用例,并能实现较高的神经元覆盖率。此外,这些测试用例可以通过对抗性再训练来提高目标DNN的性能。

介绍:

        近年来,模糊技术作为传统软件中应用最广泛的技术之一,被用于评估DNN的鲁棒性。它通过根据覆盖准则自动生成具有误导性的测试用例对dnn进行测试,以发现内部漏洞。此外,目前所有的DNN模糊算法都是基于突变的模糊算法[13]。他们对给定的种子输入应用各种突变来生成测试用例,例如摄动,图像变换[4],[6],[34]和图像平移[38]。

        然而,基于突变的模糊测试在测试用例生成方面有两个缺点。首先,测试用例的多样性受到限制,因为每个测试用例都是根据单独的种子输入变异的,并且种子输入是固定的。缺乏多样性可能会进一步影响检测 DNN 漏洞的充分性 [1]。其次,将无辜图像转换为对抗性图像进行测试通常需要巨大的变异并导致明显的分布偏转。这种偏差可能会损害测试用例的语义信息并混淆测试——无论错误分类是由测试用例的分布偏差还是DNN的缺陷引起的。

        为了减轻现有基于突变的 DNN 模糊技术的缺点,我们提出了一种新的模糊框架 FuzzGAN 来评估 DNN 的鲁棒性。 FuzzGAN 面临的挑战是使用新颖的生成方法而不是种子输入突变来提高测试用例的质量。其次,新的测试用例生成方法需要相应的测试预言机来确定 DNN 行为的正确性。此外,FuzzGAN 需要保证测试的充分性,即有效地最大化测试 DNN 的覆盖范围。在本文中,我们以神经元覆盖率[25]作为覆盖标准来指导测试用例生成。神经元覆盖在 FuzzGAN 中的成功应用可能意味着在任何其他标准中也能取得类似的成功。

        为了解决上述挑战,我们将 FuzzGAN 设计为基于生成的模糊测试框架。利用辅助分类器生成对抗网络(ACGAN)技术,FuzzGAN 中的测试用例生成器学习真实数据的表示并在指定类别下生成新的数据用例。由于生成对抗网络[10]的生成能力,生成的案例不限于单个种子,并且位置接近真实数据分布。生成过程中指定的类被用作测试预言机,以评估 DNN 对生成案例的预测的正确性。此外,我们将经过测试的DNN作为训练测试用例生成器的辅助方。除了欺骗判别网络之外,生成器的目的还在于导致测试的 DNN 发生错误分类并增加指定神经元的输出。然后,生成的案例更有可能对检测 DNN 漏洞具有对抗性,并能够增强神经元覆盖率。 

        这项工作的主要贡献包括: • 我们提出了一种基于生成的模糊框架FuzzGAN,用于评估DNN 的鲁棒性。据我们所知,FuzzGAN 是迄今为止第一代基于 DNN 的模糊框架。 • 利用生成对抗网络,FuzzGAN 实现了以下目标:1)从随机噪声中生成指定类别的真实图像,2)生成导致测试的 DNN 出错的图像,3)通过一组测试用例实现高测试覆盖率(测试套件)。 • 我们实现FuzzGAN 来分别测试在MNIST 上训练的LeNet1 模型和在LSUN 上训练的VGG-11 模型,然后通过与相关DNN 模糊器进行比较来对其进行评估。结果表明,FuzzGAN 生成的测试用例在视觉上优于基于突变的测试用例,并且在 IS 和 FID 指标以及覆盖增强方面具有可比的性能。此外,事实证明,预训练的基于生成的模糊器在生成对抗性测试用例方面比基于突变的模糊器更有效。

准备工作:

模糊测试:

        模糊测试,通常称为模糊测试,是一种通常用于编程和软件开发的测试方法。它自动生成无效的、意外的或随机的数据作为计算机程序的输入,试图导致崩溃、错误、内存泄漏等。然后检测程序是否存在缺陷和漏洞。模糊测试通常需要三个主要组成部分[2]:测试覆盖率标准作为衡量测试充分性并指导测试用例生成的指标,用于确定目标程序输出是否正确的测试预言机以及测试用例生成描述生成测试用例的自动过程的算法。根据测试用例是通过给定输入的突变生成还是由规范或其他先前知识生成,模糊技术可以分为基于突变的模糊和基于生成的模糊[13]。

        在最近的工作中,模糊技术已被用于评估 DNN 的对抗鲁棒性。 DNN 模糊测试的目标是发现可能被对抗性攻击利用的内部漏洞 [31]。针对分类 DNN,DNN 模糊器通过生成对抗性输入作为测试用例并监控不正确的分类来测试 DNN。

神经元覆盖率:

        我们将神经元覆盖率作为我们模糊框架的覆盖率标准。神经元覆盖率定义为测试套件中任何测试用例激活的神经元 T = {x0,x1, ..., xq}(一组测试用例)与所有神经元 N = {n1,n2 , ..., np} 在测试的 DNN 中。如果一个神经元的输出值足够高(高于阈值t),则该神经元被认为是被激活的,以至于它对后续层甚至输出层的神经元的影响很大。令 ni(xj) 为 DNN 中神经元 ni 对于给定测试用例 xj 的输出值。神经元覆盖率(NC)可以表示如下:

        神经元输出和权重中都存在正值和负值。因此,我们认为神经元输出的绝对值越大,意味着对后续层的影响越大,而零则意味着没有影响。此外,我们将多维神经元内所有元素的平均输出标准化为其输出值。因此,具有不同维度和值范围的神经元可以与相同的阈值进行比较。 

生成对抗网络:

        辅助分类器生成对抗网络,简称ACGAN,是FuzzGAN的重要组成部分。 ACGAN 中的两个主要组件是生成器 G 和鉴别器 D。生成器采用潜在代码 z ∼ pz 作为输入,并尝试生成假样本 x = G(z),而鉴别器则确定观察到的样本 xin 是否为真或假。 G 和 D 之间的竞争使得能够将低维随机分布 pz 中的潜在代码映射到高维空间 pdata 中语义上有意义的样本。特别是,ACGAN 是一种 GAN,除了噪声 z 之外,还涉及有条件生成具有相应类标签 c ∈ C(可用类)的图像:x = G(z|c)。除了预测给定图像是真还是假之外,ACGAN 中的判别器还预测给定图像的类标签。它允许 FuzzGAN 生成带有标签的测试用例作为测试预言机。

方法:

        在本文中,我们提出 FuzzGAN 来测试深度神经网络针对对抗性示例的鲁棒性。我们在白盒场景中研究 DNN 测试,其中测试人员可以完全访问测试的 DNN,包括训练算法、数据、网络结构和内部权重。作为模糊测试框架,FuzzGAN 自动提供对抗性输入作为 DNN 的测试用例,并监控不正确的分类输出。一般来说,FuzzGAN 采用​​ ACGAN 技术来生成给定类标签下的输入案例。生成是在神经元覆盖的指导下进行的。生成时给出的标签用作测试预言机,以确定 DNN 对生成案例的预测是否正确。在本节中,我们首先介绍 FuzzGAN 的一般流程,然后描述测试用例生成器的设计。

FuzzGAN 的总体流程:

        为了提高生成的测试用例的多样性,我们将生成对抗网络技术引入到我们的模糊测试框架中。 FuzzGAN 的生命周期包含两个阶段,即训练阶段和测试阶段(如图 1 所示)。在训练阶段,针对判别模型 D 刻意训练生成模型 G。生成器经过训练以学习原始输入的分布并合成样本,以解决第 I 节中列出的挑战。G 的详细信息将在下一小节。训练阶段可以看作是后续测试阶段的准备,以训练好的生成模型作为测试用例生成器进行模糊测试。

     在测试阶段(如算法 1 所示),FuzzGAN 针对测试的 DNN 迭代生成输入样本。我们定义一个跟踪器神经元跟踪器来记录测试 DNN 中所有神经元的激活状态。如果一个神经元到目前为止已被测试套件中的至少一个测试用例激活,则该神经元将被标记为“已激活”。测试用例生成器 G 采用三个输入参数:随机噪声 z、随机选择的类 c 和神经元 nl 的位置信息 l。神经元 nl 是从神经元跟踪器的未激活神经元中随机选择的。然后,G 将合成的输入样本 x = g(z, c, l) 输出到测试的 DNN dnn。 

        只有生成的导致测试 DNN 错误分类 (dnn(x ) = c) 的输入样本才是模糊测试的有效测试用例,并将被附加到测试套件测试套件中。一旦测试套件被新的测试用例x扩大,神经元激活跟踪器神经元跟踪器将被检查和更新。当达到所需的神经元覆盖要求 d 时,生成输入样本的循环终止。最终,测试人员通过FuzzGAN获得一组测试用例测试套件,通过测试套件可以达到较高的神经元覆盖率。

测试用例生成:

        由于 FuzzGAN 被提出作为基于生成的模糊测试框架,因此其测试用例生成器有望通过学习 DNN 输入空间的全局分布来合成测试用例,而不是从单个种子进行变异。为此,采用生成对抗网络技术对其进行训练(如图 1 所示)。 

        在训练过程中,FuzzGAN 使用判别模型 D 迭代训练测试用例生成器 G。生成器 G 将随机噪声 z、随机选择的类 c 和随机选择的神经元 nl 的位置 l 作为输入,然后综合测试 DNN dnn 的输入样本 x。判别模型 D 从真实数据集 X 或 G 生成的样本中获取输入 xin,然后将 xin 分类为 c,并区分它是真实样本 x (xin ∈ X) 还是生成样本 x (xin = g( z、c、l))。 G和D都是具有卷积层的多层感知器。它们的训练过程由代表每个模型目标的损失函数指导。该模型通过使用梯度下降法减少损失来实现其功能。

        判别器D有两个主要任务,对输入样本xin进行分类并区分输入是合成的还是真实的。因此,它的损失函数 LD 有两部分:

        我们使用 pc = {p1,p2, ..., pk} 表示将 xin 分类为每个类别的概率向量,其中 k 是类别数。我们使用pc和c之间的交叉熵损失CrossEntropyLoss(·)来表示D对Lclass分类的损失。当预测概率偏离目标类别时,它会增加。 Lreal 表示确定输入是否来自真实数据集的损失,其中 E(·) 计算期望值。 

        首先,G 的目标是在给定类别下生成有效的输入案例,这需要混淆 D 的判别功能并协调 D 的分类。因此,G 被训练为最大化 D 的辨别力损失 Lreal 并最小化 Lclass。此外,生成的数据应该解决其余目标:导致测试的 DNN 出现错误行为并最大化神经元覆盖范围。我们将经过测试的 DNN dnn 作为辅助方,借助其反馈来迭代训练 G。前一个与 DNN 相关的目标要求 G 最大化 dnn 的交叉熵损失,以便不将 x 分类到指定的类 c。最后,训练 G 来最大化由输入 l 指定的神经元的输出。 l表示神经元的位置信息,包括所属层llayer以及该层内部的具体索引lindex。当G用于测试时,l将根据跟踪的神经元激活状态进行分配。

        综上所述,G的损失函数被设计为三部分的线性组合:

        CrossEntropyLoss(·) 用于衡量测试 DNN 的分类性能(Lerror)。它也被用于 Lneuron。函数layer(x,llayer)返回包含nl的层中所有神经元的输出。通过最小化 Lneuron,指定神经元 nl(神经元编号 lindex)的平均绝对输出值与同一层(层编号 llayer)中的其他神经元有所不同。然后,nl 的归一化输出值将增加。超参数 λ1 和 λ2 是指导 LG 中每个单独损失项的重要性之间权衡的权重。 

实验:

设置:

        作为概念验证,我们实现 FuzzGAN 来测试两个 DNN。第一个测试 DNN 是 LeNet-1 [11],总共包含 6 层和 52 个神经元。它是之前在 MNIST(修改的国家标准与技术研究所数据库 [12])上训练的字符识别器,准确率为 98.34%。 LeNet-1 的输入图像大小为 28*28。 FuzzGAN 已被进一步实施来测试在数据集 LSUN [35] 上训练的 VGG-11 网络 [28]。 LSUN 中的图像分为 10 个类别,接受测试的 VGG-11 经过训练,可以对其中四个类别(塔楼、餐厅、餐厅和桥梁)的图像进行分类。测试的VGG-11以64*64尺寸的RGB图像作为输入,准确率达到93.4%。 VGG-11 包含 15 层和 4763 个神经元。

        在实验中,FuzzGAN 通过遍历 MNIST 100 个 epoch(LSUN 为 1200 个 epoch)进行训练,学习率为 0.0002(LSUN 为 0.0004)。数据集中的图像以 128 个批次为一组进行馈送,一组馈送会触发训练步骤的一次迭代。我们进行网格搜索,为每个测试的 DNN 找到最佳损失权重 λ1 和 λ2。我们根据经验将 λ1 设置为 0.5,以测试 MNIST 上的 LeNet-1,将 λ1 设置为 0.1,以测试 LSUN 上的 VGG-11。测试 DNN 的每一层的 λ2 值都不同。

评估:

        我们实现 FuzzGAN 分别测试两个 DNN 并分析测试结果。此外,我们将现有 DNN 测试技术中的 DeepXplore [25]、DeepHunter [34] 和 CAGFuzz [38](在第六节中回顾)作为我们的评估基准。由于 DeepXplore 以三种不同的方式(遮蔽、光照和遮挡)生成测试用例,并且 DeepHunter 有两种突变选择策略(tensorfuzz 和 prob),因此我们将它们视为不同的基准模糊器。与 FuzzGAN 类似,所有基准模糊器都采用模糊技术,使用神经元覆盖率作为覆盖标准,并测试在 MNIST 上训练的 LeNet-1。因此,我们将 FuzzGAN 与 LeNet1 和 MNIST 上的基准进行比较。从图像质量、误导能力和神经元覆盖增强三个角度进行评价和比较。在本节的最后,我们进一步讨论了对抗性再训练对测试 DNN 的改进。

1、图像质量:

        FuzzGAN 的主要动机是提高生成的测试用例的图像质量。如前所述,测试用例的关键问题是分布偏差和缺乏多样性。首先,通过膨胀突变生成的不切实际的测试用例可以在 DNN 系统的预处理阶段被过滤。很难确定这样的测试用例分类错误是由 DNN 漏洞还是测试用例分布偏差造成的。此外,基于突变的测试用例仅限于相应的种子输入,影响了覆盖神经元的效率。在本小节中,我们以定性方式和两个定量指标来测量 FuzzGAN 生成的测试用例的图像质量。

        首先,我们以可视化的方式讨论测试用例的现实情况。我们对人类受试者进行评估,以证明测试用例与原始数据的不可区分性。对于在 MNIST 和 LSUN 上训练的每个 DNN,FuzzGAN 学习其原始输入的表示并生成具有相似表示的测试用例。我们为每个数据集随机混合 20 个生成的图像和 20 个真实图像,并为我们的受试者构建一个测试集。我们邀请 30 名受试者来区分测试集中哪些图像是合成图像,但不告诉他们合成图像的比例。对于手写数字图像,我们的受试者的平均准确率为 49.17%,这似乎是随机猜测。然而,由于 LSUN 中的图像显示结构复杂的自然场景,我们的小尺寸(64*64)训练数据不足以让 FuzzGAN 中的生成器完美地学习每个场景的表示。 FuzzGAN 模仿 LSUN 的性能比模仿 MNIST 稍弱:受试者区分生成图像和真实图像的准确率约为 57.08%。

        此外,我们将 FuzzGAN 和基准 DNN 模糊器生成的测试用例与从 MNIST 和 LSUN 采样的真实图像进行比较(如图 2 所示)。子图(a)和(e)显示真实图像,子图(i)和(j)是FuzzGAN生成的测试用例。可以直观地发现,FuzzGAN 生成的测试用例(子图(i)和(j))看起来非常像真实图像(子图(a)和(e))。与 DeepXplore、DeepHunter 和 CAGFuzz 生成的其他测试用例相比,我们可以得出结论,FuzzGAN 生成的测试用例更加锐利、清晰和真实。

        此外,我们使用两个定量指标来衡量生成的测试用例的图像质量。 Inception Score(IS)[26]是评估生成模型生成能力的指标。它专注于生成图像的两个理想特征:每个特征都包含一个清晰的对象并且具有高度多样性。如果这两个品质都得到满足,就会产生一个很大的IS。我们计算 IS 并将数据集 MNIST 与 FuzzGAN 和基准模糊器生成的测试用例进行比较。如表一所示,FuzzGAN 生成的图像与真实图像具有相似的 IS,而其他模糊器生成的大多数测试用例的 IS 较低。证明FuzzGAN在清晰度和多样性方面表现良好。

        Fr´echet Inception Distance (FID) [9] 是评估生成数据的另一个流行指标。通过预先训练的 Inception 网络提取图像特征,FID 在特征级别测量生成图像和真实图像之间的距离。 FID 并不注重清晰度和多样性,而是捕捉图像的相似性。低 FID 对应于生成图像与真实图像的相似分布。如表 I 所示,除了具有停电和遮挡扰动的 DeepXplore 技术之外,FuzzGAN 生成的测试用例比其他测试用例更接近原始数据集。 

        值得注意的是,DeepXplore 在 DNN 模糊器中实现了最好的 IS 和 FID。它通过用噪声矩形(遮蔽)遮挡给定图像来生成测试用例。虽然它在定量指标上有更好的表现,但它生成的图像(如图2(b)所示)有相当明显的遮挡痕迹,非常容易识别。这种情况表明,目前的定量指标可以在一定程度上衡量图像质量,但仍不足以表示图像之间的视觉差异。

2、误导能力 

        评估 DNN 的对抗鲁棒性的目的是发现潜在的漏洞。 DNN 模糊技术通过精心设计的输入导致 DNN 错误分类,从而暴露漏洞。 DNN 模糊器的核心是如何生成诸如测试用例之类的对抗性输入。生成对抗性输入样本的高概率总是意味着高测试效率。我们计算每个 DNN 模糊器生成的所有样本中对抗性样本的百分比。结果表明,FuzzGAN 导致测试的 DNN 误分类的概率超过 LeNet-1 的 53.5%(VGG-11 的概率为 75.5%),这比基于突变的模糊器要高效得多(如表 I 所示)。这是因为应用于种子的每个突变步骤的程度通常都很小。突变会迭代累积,直到生成的样本导致测试的 DNN 出现错误分类。因此,在基于突变的模糊测试过程中将生成大量中间样本。 FuzzGAN 不太可能直接通过预训练的生成器生成对抗性输入案例。在同一时间内,FuzzGAN 可以生成更多的测试用例,这使得 FuzzGAN 能够比基于突变的模糊器更早地达到所需的覆盖范围并结束测试。

3、神经元覆盖增强

        正如第 III-B 小节中所介绍的,生成器被设计为合成输入样本,从而最大化由其输入 l 指定的神经元的输出。在测试阶段,根据神经元覆盖跟踪器指定神经元。

        首先,我们证明 FuzzGAN 生成的数据样本可以增强指定神经元的输出,甚至激活它。我们从每个测试的 DNN 中随机选择一组神经元(12 个来自 LeNet-1,10 个来自 VGG-11)。我们分别从 MNIST 和 LSUN 中选择 100 张图像作为对照组,并使用 FuzzGAN 为每个选定的神经元生成 100 个样本作为实验组。当将图像输入 DNN 时,我们记录其相应神经元的输出(归一化绝对值)和激活状态。我们将激活阈值设置为 0.6。统计分析表明,LeNet-1 中使用 FuzzGAN 生成的样本的选定神经元的输出比 MNIST 图像的输出大约 76.22%。对于 VGG-11,FuzzGAN 有效地将所选神经元的输出提高了约 42.95%。此外,FuzzGAN 生成的输入在 LeNet-1 中平均激活的神经元比 MNIST 多 108.90%,在 VGG-11 中激活 146.15%,如表 II 所示。

        其次,我们实现 FuzzGAN 并观察其实现的神经元覆盖率(如图 3 和图 4 所示)。我们设置了测试套件大小的上限(LeNet-1 为 30,VGG-11 为 700),并应用 FuzzGAN 来测试 DNN。结果,FuzzGAN 在测试 LeNet-1 时实现了 98.1%(阈值 t = 0.6)的神经元覆盖率,在测试 VGG-11 时实现了 75%(t = 0.4)的神经元覆盖率。与原始数据集中的图像相比,FuzzGAN 需要更少数量的测试用例来达到相同的神经元覆盖率。 MNIST 的 LeNet 上的 FuzzGAN 的性能也与基准模糊器进行了比较(见图 3)。根据我们重现的结果,FuzzGAN 的优势不够显着,但与现有的基于突变的模糊器具有竞争力。

4、提高DNN性能

        在本小节中,我们尝试通过发现 DNN 漏洞的测试用例来消除这些漏洞。 DNN 模糊测试的测试用例生成始终对测试覆盖率有要求。以神经元覆盖为例,我们直观地假设测试用例发现的漏洞可以归因于它激活的神经元。因此,DNN 模糊测试不仅可以暴露对抗性漏洞,还可以定位它们。 

        利用对抗性再训练技术 [7],我们重新训练经过测试的 DNN。我们在每个 DNN 的原始训练集中添加了 2000 个对抗性示例。然后,DNN 在增强训练集上重新训练 5 个时期。图 5 显示了重新训练模型在测试集上的准确性的增长趋势。我们将新训练的网络和以前的网络的性能与包含 1000 个测试用例和 2000 个真实样本的测试集进行了比较。结果,重新训练的 LeNet-1 和 VGG-11 网络在混合测试集上的准确率分别提高了 37.12% 和 23.70%。这说明 FuzzGAN 生成的测试用例可以在一定程度上修复错误行为,从而有效地改进测试 DNN。

相关工作:

        除了模糊测试之外,其他测试技术,例如 concolic 测试 [29]、[30] 和组合测试 [19] 也已用于测试 DNN。表三按时间顺序从三个角度比较了 FuzzGAN 与现有的 DNN 测试技术: 神经元覆盖率一栏展示了是否采用神经元覆盖率来衡量测试充分性;生成类型列显示了生成测试用例的基本方法; Test Oracle 列列出了如何确定测试 DNN 的正确性。

        首先,FuzzGAN 使用神经元覆盖率来衡量测试充分性作为最相关的工作。根据DNN的特点,现有的传统软件测试覆盖率标准对于DNN来说是不够的。许多新标准专门用于测试 DNN。裴等人。 [25]引入了神经元覆盖率来衡量 DNN 测试的充分性。然后,最近的几项工作进一步讨论了神经元的输出,并提出了精心定制的测试覆盖标准,例如神经元绑定覆盖[20]、符号-符号覆盖[29]和t路组合稀疏覆盖[19]。在所有标准中,神经元覆盖率是 DNN 测试技术中最基本且最常用的。

        其次,FuzzGAN 提出了一种不同于当前基于突变的测试技术的新颖的测试用例生成方法。例如,DeepXplore [25] 和 DeepBillboard [39] 生成具有约束扰动的测试用例。 DeepTest [32]、DeepHunter [34]、DeepSmartFuzzer [4] 和 Sensei [6] 利用图像变换。 DeepGauge [20]、DeepGini [5] 和 RobOT [33] 利用现有的对抗性攻击(例如基于雅可比的显着图攻击(JSMA)[24] 以及 Carlini 和 Wagner 攻击(C&W)[3])。 DeepConcolic [30] 和 DeepCover [29] 正式确定了覆盖标准并采用符号分析来改变种子输入。 TensorFuzz [22]、DeepCT [19]、DLFuzz [8] 和 Test4Deep [36] 提出了优化算法来生成测试用例生成的扰动。 DeepMutation [21] 改变目标模型而不是种子输入。

        为了减轻测试用例的图像质量对 DNN 性能的影响,DeepRoad [37] 和 CAGFuzz [38] 采用 GAN 来生成真实的测试用例。它们与 FuzzGAN 类似,而它们使用的 GAN 经过图像到图像翻译的训练。根据 DeepRoad 和 CAGFuzz 的说法,使用 GAN 生成的测试用例比其他突变生成的测试用例更加真实。然而,图像翻译仍然是一种突变,其中从给定的种子生成新图像。因此,他们仍然存在测试用例多样性的问题。值得注意的是,DeepRoad 不考虑覆盖标准,而 CAGFuzz 根据生成后的神经元覆盖率来过滤测试用例。

        最后,FuzzGAN 提供了一个新的测试预言机。在现有的测试技术中,测试用例是从种子输入变异而来的,因此测试用例的预测与相应种子输入的标签相关。例如,DeepGauge [20] 通过相应种子输入的标签来评估测试 DNN 对测试用例的预测。 DeepTest [32] 和 DeepHunter [34] 利用测试用例和种子输入之间特定于转换的变形关系,而 DeepGini [5] 分析错误分类的可能性。                     

        此外,DeepXplore [25] 需要多个具有与交叉引用预言机相同功能的 DNN。与现有技术不同,FuzzGAN 采用​​ ACGAN 在给定类标签下生成数据案例,用作测试预言机。除了评估 DNN 的鲁棒性之外,机器学习领域还存在广泛的其他攻击、防御和应用[14]–[18]

总结:

        为了减轻基于突变的测试用例的有限多样性和分布偏差的影响,我们提出了一种基于生成的模糊框架 FuzzGAN。它借助 ACGAN 技术生成真实的、多样化的和误导性的测试用例,而不是将突变应用于给定的种子作为基于突变的模糊测试。我们通过神经元覆盖率指导测试用例生成,并为 FuzzGAN 提供有效的测试预言机。

        据我们所知,FuzzGAN 是第一代用于测试 DNN 的模糊测试框架。我们已经实现它来测试 MNIST 上的 LeNet-1 和 LSUN 上的 VGG-11。结果表明,FuzzGAN 生成的测试用例足够真实,足以迷惑人类,并且具有与其他 DNN 模糊器生成的测试用例相当的 IS 和 FID 分数。我们的测试用例可以通过改善指定神经元的输出来增强神经元覆盖率,并导致测试的 DNN 以更高的概率出现错误分类。此外,我们表明,FuzzGAN 生成的测试用例有助于通过重新训练测试的 DNN 来消除漏洞。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值