from 今日头条-慕测科技
论文ppt:
百度网盘
提取码: 8dee
摘要
深度神经网络(DNNs)越来越多地将其实际应用扩展到各个领域,例如图像处理、语音识别和自然语言处理。然而,就测试数据的质量和模型鲁棒性而言,对 DNN 测试的工具支持仍然有限。在本文中,我们介绍了一种用于深度神经网络的基于突变测试的工具 DeepMutation++,该工具可以促进 DNN 的质量评估,同时支持前馈神经网络(FNNs)和有状态循环神经网络(RNNs)。它不仅可以针对整个输入来对 DNN 模型的鲁棒性进行静态分析,还可以通过运行时分析来识别顺序输入(例如音频输入)的脆弱部分。值得注意的是,DeepMutation++具有对 RNN 突变测试的支持的特点。可以在项目网站
https://sites.google.com/view/deepmutationpp 上找到该工具的演示视频。
一.介绍
深度神经网络(DNNs)在诸如自动驾驶、机器翻译、医疗保健和机器人技术等许多应用领域中都取得了巨大的成功。通常来说,当前最新的深度神经网络可以背大致分为前馈神经网络(FNNs)和循环神经网络(RNNs).FNN 和 RNN 在处理特定类型的应用程序中都起到重要的作用。典型的前馈神经网络(例如完全连接的神经网络、卷机神经网络)逐层处理输入的信息作为正向传播直到作出输出决定为止。FNN 被证明可以有效地提取和处理具有区域局部特征的输入,并且在许多最新的图像处理应用中扮演关键角色。
另一方面,循环神经网络(例如长短期记忆网络 LSTM、GRU 神经网络)经常利用存储单元、控制单元或部分向后传播信息来捕获顺序输入的时序信息。特别得,在当前的时间范围内,RNN 的输出不仅取决于给定的输入,而且取决于其内部状态。这样的特性有助于 RNN 在处理诸如音频、自然语言文本和金融股票预测等顺序数据方面取得成功。
尽管有着质量保证,尤其是对于 DNN 的测试要求很高又具有一些可提供的初始研究,当前对于 DNN 的测试仍然处于面临着许多挑战性问题的早期阶段。测试工具的支持可能是促进解决方案探索以应对这些挑战的必不可少的因素。
在传统软件中,变异测试是分析测试数据质量的重要技术。一个关键的想法是通过将故障注入到原始程序中来生成一组变异的程序。测试数据的质量可以通过它区分原始数据和变异体的行为的能力来体现。
遵循传统软件变异测试的类似精神,在本文中我们介绍了 DeepMutation++,一种针对 FNN 和 RNN 的变异测试框架。DeepMutation++结合了 DeepMutation 中引入的 FNN 模型的八个模型级算子,并且进一步提出了九种专门用于 RNN 模型的新算子。特别地,为了满足 RNN 的特性,DeepMutation++支持静态变异体生成以整体分析测试数据和支持动态变异体生成以在运行时检测测试输入的易受攻击段。注意,段是在 RNN 的迭代中处理的大块输入数据。与 DNN 的结构覆盖标准不同,DeepMutation++可以直接针对输入提供 DNN 的鲁棒性反馈。直观上来说,靠近神经网络决策边界的输入相对较难被 DNN 强健地处理。因此,通过分析测试数据以区分 DNN 和生成的变异体的行为的方式可以评估 1)DNN 的鲁棒性,2)潜在触发 DNN 的易受攻击决策的行为的测试数据的质量。
我们演示了 DeepMutation++在 DNN 鲁棒性分析和测试数据易受攻击片段的检测这两种典型情况下的可用性:1)在 MNIST 数据集上的基于 FNN(即 LetNet-5)的图像处理,以及 2)在 IMDB 数据集上的基于 RNN(即 LSTM 和 GRU)的基于文本的情感分析。我们报告了在 DNN 变异体生成中我们框架的效率以及鲁棒性分析结果。我们还发现,基于变异测试定义的度量标准可能是 DNN 鲁棒性的重要指标,并且与 DNN 抵抗对抗攻击的鲁棒性密切相关。
二.DeepMutation++框架
图 1 显示了 DeepMutation++框架的简化工作流程概述。总体而言,DeepMutation++支持两种典型类型的神经网络,即 FNN 和 RNN。给定 DNN 模型和一组正在分析的测试数据,DeepMutation++首先利用提供的变异算子来生成一组具有使用者指定质量阈值的高质量 DNN 变异体。在生成了一定数量的变异体后,DeepMutation++会针对为了鲁棒性性分析而提供的测试输入来分析原始 DNN 和生成的 DNN 变异体的行为差异。此外,DeepMutation++专门的具有动态模式,从而为基于动态生成变异体的 RNN 模型来分析易受攻击的输入段。最后,DeepMutation++输出分析报告,这些报告同时指示测试数据质量和 DNN 鲁棒性。
图 1: DeepMutation ++框架的工作流程概述
A 变异体产生
编译蒜子是变异测试中的关键组成部分。DeepMutation++支持八个 FNN 变异算子和九个 RNN 变异算子。
FNN 变异算子:对于 FNN,DeepMutation++合并了 DeepMutaion8 个提出的的模型级变异算子(请参见表 1)。在选择 DeepMutation++的运行时变异算子时,我们更倾向于选择 weight-level 和 neuron-level 算子,因为我们发现三个 layer-level 的算子通常可以生成质量阈值以下的模型,从而增加了变异生成的时间成本。这些运算符的更多详细信息,请参见“深度变异:深度学习系统的变异测试”。
表 1:FNN 变异算子
RNN 变异算子:除了支持 FNN,DeepMutation++还在支持 RNN 的变异测试上具有特色。 在本文中,我们专注于两种典型的 RNN 类型,即 LSTM 和 GRU。除了基础权重,RNN 通常由门单元和存储单元组成,其中不同的门将模型权重分成多个部分。例如,LSTM 通常由四种类型的单元组成:输入门,忘记门,输出门和存储单元,而典型的 GRU 包含三种类型的单元:复位门,更新门和存储单元。 考虑到 RNN 在变异测试中的独特特性和使用情况,DeepMutation++从两个级别(即静态级别和动态级别)支持 RNN 变异算子。
表 2 总结了提出的 RNN 变异算子。特别得,静态级别的算子用于执行脱机变异模型的生成。生成的变异体存储在用户指定的位置,此后可以进行 post-phase 变异分析。但是,生成的脱机变异体仅允许整体分析顺序输入数据的质量。为了启用输入的 segment-level 的分析,动态算子逐段转变 RNN 实时运行的内部运行时状态(即内存状态,门控制状态)。请注意,dynamic-level 算子不存储变异体,它们只是修改原始模型中单位的计算方式以获得相应的新预测结果。提出的 RNN 变异算子的描述如下。
表 2:RNN 变异算子
- 权重高斯模糊:在 RNN 的所有权重之间随机采样用户指定的比率,并基于模糊所选权重执行高斯分布。
- 权重精度降低:随机采样用户指定的权重比并降低其精度。
- 状态清除:将运行时状态值清除为零,以使 RNN 忘记其先前的存储。
- 状态重置:将当前运行时状态重置为以前的状态。该算子不会忘记所有存储,而是将 RNN 恢复到先前的状态。
- 状态高斯模糊:按照高斯分布来变异当前的运行时状态。
- 状态精度降低:降低运行时状态的精度,即减小浮动位大小或获取舍入结果。
- 门清除:选择门类型,然后将运行时门值清除为零,从而在当前迭代时阻塞门。
- 门高斯模糊:随机选择一个门,并按照高斯分布来变异运行时门的值。
- 门精度降低:随机选择一个门,并降低运行时门值的精度。
B 变异测试分析
由于传统软件的变异测试成本是一个主要问题,我们就变异体生成阶段和后分析阶段来解释 DeepMutation++的时间成本。静态变异体的生成遵循四个关键步骤:1)加载模型,2)解析参数,3)选择和变异参数,4)存储生成的变异体模型。在这些步骤中,参数解析,选择和突变通常非常有效。时间开销主要归因于模型的加载和存储。动态变量生成会扰乱 RNN 的运行时内部状态,以分析对 DNN 决策的潜在影响。
为了分析模型对抗输入的鲁棒性,DeepMutation++将由原始模型正确分类的所有测试数据放入每个变异体以进行预测。与传统软件的变异测试不同,测试数据的预测可以分批进行。借助 GPU 支持,我们可以有效地完成对大量数据的预测。另外,对不同变异体的预测也可以作为平行过程轻松地进行。对于运行时分析,由于所有输出差异都是在线分析的,因此 DeepMutation++只需要计算平均值作为段的易伤性结果,因此,段级别分析的开销也非常有效。时间成本分析的详细结果在我们的网站上。
C 指标
DeepMutation++当前支持两个杀伤得分指标,以近似估计输入或段的易受攻击性。
指标 1(KScore1):给定输入 t、一个 DNN m 及其变异体 m',如果输出在 t 处不一致,则我们定义 t 被 m'杀死,即 m(t)≠m'(t)。给定一组变异体 DNN M,我们将杀伤得分定义为:
指标 2(KScore2):给定输入 t 的第 i 个段 ti,一个 RNN 模型 m 和其通过使用 dynamic-level 算子对 ti 进行变异生成的变异体 m'。给定一组变异 RNN M,我们将 segment-level 杀伤得分定义为:
它指示了输出上的预测概率差异。
KScore1 用于计算整个数据的杀伤得分,而 KScore2 用于计算一个段的杀伤得分。对于输入,我们定义 KScore1 的值越大,则针对输入的模型的鲁棒性就越差。对于输入的一个段,KScore2 的值越大,针对该段的模型的鲁棒性就越差。
D 后期鲁棒性分析和排序
DeepMutation++能够分析模型的鲁棒性,并检测易受攻击的数据或测试数据的易受攻击的段。它提供了两个接口 sortdata 和 sortsegment 以进行后阶段的鲁棒性分析。
给定变异体的结果路径和测试数据,接口 sortdata 根据变异体和指标 KScore1 对测试数据进行排序。使用 sortdata 计算得出的结果体现了输入的易攻击性的从轻到重的排序。最后,sort_data 将分析结果输出为 Numpy 文件和直方图报告文件。Numpy 文件保存 KScore1 结果,直方图描述了变异体的杀伤分布。
对于动态分析,给定一个记录动态变异结果的 CSV 文件,sortsegment 根据结果和指标 KScore2 对数据段进行排序。sortsegment 的结果也代表了段的从轻到重的易受攻击性。最后,sort_data 将输出一个 Numpy 文件和一个散点图报告文件。Numpy 文件保留 KScore2 结果,散点图描述了变异前后每个段的行为差异。请注意,当使用 dynamic-level 的算子对某个段的状态或门值进行变异时,DeepMutation++会记录原始输出和突变后的新输出,并以此为基础计算 KScore2。
E.实施
DeepMutation++是在基于 Keras2.2.4 的 Python 中以 TensorFlow1.13 作为后端实现的。 该工具的源代码和详细用法说明可在我们的网站上找到。静态变异算子的实现直接位于 Keras API 的顶部,例如 model.layer(),model.get weights()。RNN mutator 的实现有点困难,因为它无法通过 Keras API 轻松控制 RNN 的内部状态,这迫使我们不得不在 Keras 库级别内(例如 keras.layers.recurrent.py)部分桥接实现。
三.使用示例:变异 DNN 生成
DeepMutation++当前作为命令行工具提供。我们给出了有关使用 DeepMutaion++生成变异体的一个基本用法示例。我们在网站上提供了更详细的工具用法,例如鲁棒性分析。
在这种情况下,DeepMutation++从路径 mnist.h5(-modelpath)加载模型,并遵循高斯模糊算子 0(-operator)和变异比 0.01(-ratio)生成变异。为了管理变异体的质量,DeepMutation++会加载所有 mnits(-datatype)测试数据以计算变异体的准确性,并且只有那些准确性高于阈值 0.9(-threshold)的变异体才会存储在文件夹 mutants 中(-save_path)。
四.实验
我们在整个输入级别和段级别的 DNN 鲁棒性分析中演示了 DeepMutation++的两个用例。基于 LeNet-5 模型,我们首先使用高斯模糊算子在不同的变异率下产生 200 个变异体。然后,我们使用这些变异体进行分析以计算 KScore1。表 3 显示了结果,其中每一行给出了得分在相应范围内的变异体的数量(如在每一列中)。我们可以看到,对于每个得分范围,随着我们增加变异率,变异体的数量往往会增加。在这种情况下,KScore1 大于 0.5 的数据杀伤了最多的变异体,这些数据需要特别注意以进行进一步分析。
表 3:LeNet-5 不同变异率下每个 KScore1 范围内 LeNet-5 变异体的数量
我们将进一步研究 IMDB 情绪分析中 RNN 模型(即 LSTM 和 GRU)的鲁棒性。我们仅详解段级别的分析,并在我们的网站上提供更完整的信息。具体来说,我们随机选择 50 个由原始模型正确处理的测试输入。假设 RNN 使用 n 次迭代(即 n 段)对其进行处理,对于 n 个段中的每个段,我们将状态值变异 100 次并获得 100 个预测结果。然后,为每个段计算 KScore2 以测量鲁棒性。对于每个段,我们将 FGSM 对抗攻击难度(即成功攻击的时期数)用作针对该段的模型鲁棒性的直接指标。我们分析了 KScore2 与攻击难度之间的相关性(例如攻击步骤数)。表 4 总结了平均结果。#KS2 列显示所有输入段的 KScore2。#E.列显示了用于生成对抗示例的平均时期。统计分析证实了显著的负相关。结果表明,如果 KScore2 小(大),则该模型在细分市场上往往更健壮(更容易受到攻击)。结果还证实了我们的变异分析工具对于在段水平上测量 RNN 模型鲁棒性的有用性。
表 4:在各输入的各段上的模型的鲁棒性
五.相关的工作
在过去的几年中,DNN 测试一直在被研究。然而正如我们所知道的,结合 FNN 和 RNN 变异测试特点的工具有限。
DeepXplore 提出了神经元覆盖标准以测量激活的神经元的百分比。 DeepGaugen 进一步基于对 DNN 内部状态的观察,提出了针对深度学习系统的多粒度测试范围。DeepCT 提出的一组组合测试标准可以平衡缺陷检测能力和合理数量的测试。与覆盖率指导的测试标准不同,Kim 等人引入了一个测试充分性标准,该标准将输入作为 DL 系统行为中输入与训练数据之间的差异进行测量。DeepMutation++与这些现有工作之间的最大区别是 DeepmMutation++是一种基于变异测试技术的工具,所有这些现有方法都可以在变异测试后进一步对测试数据执行。
作为 DL 系统的第一种变异测试技术,DeepMutation 提出了 source-level 和 model-level 的算子来验证测试数据的质量。Wang 等使用 DeepMutaion 中的 model-level 变异算子生成变异体并相应地检测对抗样本,这项工作从侧面证明了变异测试的有用性。相比之下,DeepMutation++不仅包含 DeepMutation 中的所有 model-level 变异算子,而且还支持 RNN 模型。
六.结论
我们介绍了 DeepMutation++,这是一种用于深度学习系统的变异测试的工具。DeepMutation++支持为 FNN 和 RNN 静态生成高质量的变异体,并动态改变 RNN 的运行时状态。我们演示了 DeepMutation++在分析 DNN 鲁棒性、易受攻击的输入以及相应的易受攻击的段中的用途和实用性。