白盒测试职工基本医疗_DeepConcolic:深度神经网络的测试与调试

摘要

深度神经网络(DNN)已被广泛应用。 我们引入了一种称为 DeepConcolic 的 DNN 测试和调试工具,该工具能够以足够的严格度检测错误,从而适用于在高安全性要求的应用程序中测试 DNN。 DeepConcolic 是第一个为 DNN 实施 Condicolic 测试技术的工具,也是第一个为用户提供调查 DNN 特定部分的功能的测试工具。 该工具已开放,可以在https://youtu.be/rliynbhoNLM上找到演示视频。

1. 介绍

在高安全性要求的应用(例如自动驾驶汽车,医疗保健和无人机)中广泛部署深度神经网络(DNN)增加了对测试,验证并最终证明实现 DNN 软件可靠性的工具的需求。 测试一直是提供支持安全性保证的主要方法,并且可以对高安全性要求的软件系统进行认证。 由于其复杂性,DNN 通常被视为黑盒,因为很难通过检查来了解其行为。 相比之下,白盒方法利用程序的结构来收集安全性保证。 以找到支持系统行为安全性保证的方式来应用白盒测试具有挑战性。

我们考虑结构覆盖率指标,这是白盒测试的一个典型范例。例如,具有 100%语句覆盖率的测试套件至少会执行一次程序的所有语句。虽然结构覆盖率不能保证正确的功能,但是它经常用作测试套件穷举性的代理指标。结构覆盖率指标,例如修改后的条件/决策覆盖率(MC / DC),被用作评估包括航空电子设备在内的许多应用领域中许多高层安全标准中测试套件穷举性的一种方法。目前已经存在结构覆盖标准来检查 DNN ,并指导测试套件的生成以支持对 DNN 的等效测试。虽然 DNN 中的结构覆盖率不能直接反映行为的置信度,但是当与其他技术结合使用时,所提出的技术可能会提供一种理解测试体系是否足够的手段。

在本文中,我们介绍了 DeepConcolic,一种用于测试和调试 DNN 的工具。 它的测试生成是根据声明覆盖率和 MC / DC 的覆盖率准则进行的; 它采用了一种 Concolic 的分析方法用于检查 DNN 的不同行为,并能够隔离 DNN 中可能存在问题的组件。 Concolic 测试是一种用于测试软件的混合方法,最近已应用到 DNN 的测试中。 更具体地说,测试过程会在 DNN 的具体执行及其符号执行之间反复切换,以找到触发特定行为的输入。

该工具不仅对使用基于覆盖率测试 DNN 的 DNN 测试工程师有用,而且对需要分析 DNN 内部结构的 DNN 开发人员也很有用。

A.DNN

dfa0949732382289b68657c12e01146b.png

DNN 中的层可以是密集(完全连接)层,卷积层,归一化层或最大池化层,其激活函数为例如 ReLU,softmax 等。特别是每个卷积层中的神经元都属于所谓的特征图,该特征图由内核操作定义。 对于任何输入,DNN 都会分配一个标记为 N(x).label 的标签。

B.DNN 的安全性

e0785df013f6a18112b801126229e1be.png

已经提出了许多算法来寻找对抗性样例。 但是,这种攻击方法无法量化到用于测试 DNN 的足够级别。 这一事实激发了最近为 DNN 开发覆盖率标准。

已经为 DNN 设计了几种结构覆盖率标准,包括神经元覆盖及其扩展,以及 DNN 的 MC / DC 变体。 此类覆盖标准旨在定义更可能捕获 DNN 中对抗行为的测试条件。 神经元覆盖率要求,对于网络中的每个神经元,必须至少存在一个使其激活值大于某个阈值的输入。 另外的标准将神经元覆盖范围从单个神经元推广到一组神经元。 DNN 的 MC / DC 变体捕获了一个事实,即层中(一组神经元)的特征(决策)直接由上一层中其连接的特征(条件)决定。因此需要测试条件使得每个条件特征必须显示,无论其对决策功能的影响如何。

2.DeepConcolic 工具

DeepConcolic 工具的总体架构如图 1 所示。原则上,给定 DNN 模型和覆盖标准,DeepConcolic 会生成测试套件并返回覆盖结果。 为了为 DNN 生成有意义的测试用例,还提供了一些输入测试数据作为查找合适的附近测试用例的参考。

817627e82d49fb36477f93d9d9369b4b.png

图 1 DeepConcolic 工具

具体来说,该工具有以下特征

a)测试标准:DeepConcolic 是一种覆盖率指导的测试工具,目前支持神经元覆盖率和 DNN 的 MC / DC 变体。

b)预处理:预处理模块格式化输入数据并配置后端测试引擎,即生成测试用例的后端引擎和梯度上升(GA)搜索引擎。 特别的,定义了一个 testobjectt 类来对格式化的输入和用于运行 DeepConcolic 的命令行配置进行编码。 同时,coveringlayert 类封装要覆盖的每个 DNN 层,并实现覆盖标准所需的数据结构。

c)Concolic 引擎:Conolicic 引擎是我们两个测试用例生成引擎之一。 它实现了 Y. Sun 等人在” Concolic testing for deep neural networks”文中阐述的算法。 Concolic 测试结合了具体输入的执行和符号分析技术,可以有效地满足指定覆盖率标准中的测试条件。 用户可以从以下两种符号技术中进行选择:(1)线性规划(LP)方法:使用范数进行优化,这是两个输入的每个维度之间的最大变化; (2)全局优化方法:适用于(输入图像的)像素级的 L0 范数。 在” Concolic testing for deep neural networks”文中提供了更多细节。

d)GA 搜索引擎:我们集成了 Y. Sun 等人在”Structural test coverage criteria for deep neural networks”一文中提及的自适应 GA 搜索算法以生成测试用例。 基于梯度的搜索算法已在其他几篇近期著作中证明对 DNN 测试有效。

e)测试套件:DeepConcolic 生成的测试套件由一组输入对以及它们之间的距离组成。

f)Oracle:Oracle 遵循 1.B 节中对抗性样例的定义,根据该定义,从测试套件中挑选出对抗性样例。 这可以通过指定正确分类的输入在进行不同分类之前可以偏离多远的距离来实现。

g)覆盖率报告:该报告包括达到指定标准的覆盖率级别,以及在每个步骤中生成的测试用例的数量,对抗性样例的数量,每个对抗性样例的距离以及一些可追溯性信息等。

h)其他:作为白盒测试工具,DeepConcolic 的目的之一是帮助开发人员了解和诊断 DNN 的内部结构。 DeepConcolic 的便捷命令行选项可用于指定要测试的特定层或神经元子集。 除了覆盖率报告外,DeepConcolic 还向对抗性样例返回定量统计数据,以说明网络的健壮性。 请注意,此类统计信息需要在目标应用程序的上下文中进行分析,并且其可接受性需要在安全性论证中进行验证。

总而言之,我们发现使用 DeepConcolic 有以下优点。 它根据指定的测试条件为 DNN 生成测试用例和对抗性样例。 开发人员可以使用测试结果来比较不同的 DNN 模型,并且可以使用对抗性样例来改进和重新训练 DNN 或制定对抗性样例缓解策略。 此外,使用 DNN 的主要安全挑战是由于缺乏对 DNN 决策方式的了解。 DeepConcolic 工具能够测试 DNN 的每个特定组件,这有助于对 DNN 的内部结构进行人工分析。 通过了解这些结构,我们改善了 DNN 的置信度。 这与提供保证不同,就像测试常规软件并不提供保证。

DeepConcolic 用 Python 实现,并且是开源的。 它在 GitHub 上公开可用。 唯一的其他公共 DNN 结构覆盖率指导测试工具是 K. Pei 等人在” DeepXplore: Automated whitebox testing of deep learning systems”文中介绍的 DeepXplore,专用于神经元覆盖率。 DeepConcolic 和 DeepXplore 之间的初步比较在” Concolic testing for deep neural networks”文中详细介绍。

A.使用示例

DeepConcolic 工具为用户提供了命令行选项列表。 在这里,我们通过示例解释其用法。 例如,以下命令

python deepconcolic.py --model cifar10.h5 --cifar10-data --outputs outs --layer-index 3 --feature-index 0 --criterion ssc --cond-ratio 0.1

调用 DeepConcolic 来测试在 CIFAR-10 数据集上训练的 DNN 模型,并使用“--cifar10-data''标志自动加载输入数据。 随后,所有测试结果将被存放到指定的目录输出中。 --layer-index 和--feature-index 分别设置要测试的层索引和特征图索引。 选项--criterion ssc --cond-ratio 0.1 配置 DNN 的 MC / DC 变体。

以下命令在预训练的 VGG16 模型上运行 DeepConcolic。 输入数据存储在名为 inputs 的目录中。 --top-classes 5 表示该模型将考虑 top-5 精度,而--labels labels.txt 指定输入数据的标签。

python deepconcolic.py --vgg16 --data inputs --outputs outs --criterion ssc --cond-ratio 0.1 --top-classes 5 --labels labels.txt

3.实验

在本节中,我们通过将 DeepConcolic 应用到使用 CIFAR-10 数据集训练的中等大小的 DNN 模型中来证实其实用性,该数据集包含 10 种不同类别(例如,汽车)中的 60,000 张 32x32 彩色图像。 实验是在具有 2.90GHz Intel Core i7、16GB 内存和 NVIDIA Quadro M1200 的移动工作站上进行的。

在实验中,我们通过运行 DeepConcolic 获得每个选定层的十个特征图,然后测试两个单独的卷积层(第 2 层和第 7 层),然后检查神经元覆盖范围和 DNN 的 MC / DC。 对于每个特征图,如果 DeepConcolic 工具未在 12 小时内终止,则将其强制停止。 总体而言,MC / DC 覆盖需要数十万个测试用例,这与仅需要数千个测试用例的神经元覆盖相反。

在图 2 中,我们给出了有关特征图的覆盖率结果。 也就是说,每次应用 DeepConcolic 生成针对具有特定特征图的测试条件的测试时,似乎在后一层的特征图很难覆盖,并且覆盖结果显示出更高的标准偏差。 这可能可以通过多次运行该工具来解决的。

f4b08507818d153dea9f90e9f8c47cff.png

图 2 与特征图相关的覆盖率结果

图 3 报告了在生成的测试用例中对抗性样例所占的百分比。 由 DNN 的 MC / DC 变体定义的测试条件证明,在捕获对抗性示例方面具有优势,并且能够找到比神经元覆盖范围高得多的对抗性示例。 尽管如此,有趣的是,在神经元覆盖的情况下,在更深的层中发现了更多的对抗性例子; 这可能表明神经元激活在随后的层中对对抗行为具有更强的影响。

44c1a37f12ad26ccf6d59dacb6002efa.png

图 3 各个特征图中检测到的对抗性样例

图 4 展示了几个检测到的对抗样例。 我们还绘制了图 5 中来自 MC / DC 的 DNN 的总对抗示例的分布图,表明它们在较深的层中检测到较小的输入扰动。 在 DNN 中,可以将较新的层视为对较早层活动的改进,并且由针对 DNN 的 MC / DC 变体定义的测试条件确实捕获了这种关系。

f39a89ca9ffcfc29712ea45c12146f31.png

图 4 对抗性样例

75445d03155de01f0e1998cd72695997.png

图 5 每个距离内的累积对抗样例

4.相关工作

寻找对抗性样例的现有研究应用了基于梯度下降或进化技术的启发式搜索算法。 他们无法回答这些产生的对抗性例子代表什么,或者它们彼此之间有多么相似或不同。

最近已经提出了几种可以回答这些问题的覆盖率指导的测试用例生成方法。神经元覆盖率度量了测试套件激活的神经元的百分比。这种方法的的扩展指定了一组神经元(在同一层)的测试条件。 DNN 的 MC / DC 变体是捕获 DNN 中相邻层要素之间因果关系的唯一覆盖标准。A. Odena 等人在” TensorFuzz: Debugging neural networks with coverage-guided fuzzing”文中介绍了近似最近邻算法用于指导 DNN 中的模糊测试。C.-H. Cheng 等人在” Quantitative projection coverage for testing ML-enabled autonomous systems”中的阐述的覆盖率要求,当将测试数据集投影到指定的有限分区中时,每个区域中至少应有一个数据点,且不少于相关的权重。在 M. Wicker 等人的” Feature-guided black-box safety testing of deep neural networks”和 M. Wu 等人的” A gamebased approximate verification of deep neural networks with provable guarantees”的论文中,将输入空间离散为超矩形,以便为每个超矩形生成一个测试用例。当超矩形足够小时,此方法将彻底搜索输入域。R. Ashmore 等人的” Boxing clever: Practical techniques for gaining insights into training data and monitoring distribution shift”的文中介绍了一种“Boxing Clever”方法,通过将输入域划分为一系列超矩形来评估训练数据。

DeepConcolic 的 condicolic 引擎与 DNN 的形式验证有关。 基于 SAT / SMT 或 MILP 的典型符号验证方法只能缩放到具有数百个隐藏神经元的 DNN。 使用全局优化的最新研究能够处理更大的网络。 相比之下,在每个步骤中,condicolic 测试都仅象征性地编码了整个 DNN 行为的一部分。

5.结论

DeepConcolic 是用于测试和调试深度神经网络的工具。 测试用例的生成取决于 DNN 的神经元覆盖范围和 MC / DC 变体,这些变体可能适合不同的标准。 我们认为,这种白盒测试工具的一个有价值的应用是评估 DNN 的内部结构,这有助于为 DNN 提供安全性和鲁棒性的依据。

致谢

本文由南京大学软件学院 2020 级硕士生曹振飞翻译转述 感谢国家重点研发计划(2018YFB1003900)和国家自然科学基金(61832009,61932012)支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值