题目: DeepGauge: multi-granularity testing criteria for deep learning systems.【DeepGauge:深度学习系统的多粒度测试标准】
发表年份: 2018
期刊/会议: Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering(ASE, CCF-B会议, ASE最佳论文奖)
论文链接: https://dl.acm.org/doi/abs/10.1145/3238147.3238202
作者信息: Lei Ma, Felix Juefei-Xu, Fuyuan Zhang, Jiyuan Sun, Minhui Xue, Bo Li, Chunyang Chen, Ting Su, Li Li, Yang Liu, Jianjun Zhao, Yadong Wang
Abstract
1 Introduction
2 Preliminaries
2.1 Coverage Criteria in Traditional Software Testing(传统软件测试的覆盖标准)
2.2 Deep Neural Network Architecture
3 Coverage criteria for testing DL systems(测试DL系统的覆盖标准)
3.1 Neuron-Level Coverage Criteria(神经元级别的覆盖标准)
3.2 Layer-Level Coverage Criteria(网络层级别的覆盖标准)
4 Experiments
4.1 Evaluation Subjects
4.2 Evaluation Setup
4.3 Experimental Results
4.4 Comparison with DeepXplore’s Neuron Coverage (DNC)(与DeepXplore的神经元覆盖率比较)
4.5 Threats to Validity and Discussion
5 Related work
5.1 Testing of DL Systems
5.2 Verification of DL Systems
5.3 Attacks and Defenses of DL Systems
6 Conclusion and future work
Deep learning (DL) defines a new data-driven programming paradigm that constructs the internal system logic of a crafted neuron network through a set of training data. We have seen wide adoption of DL in many safety-critical scenarios. However, a plethora of studies have shown that the state-of-the-art DL systems suffer from various vulnerabilities which can lead to severe consequences when applied to real-world applications. Currently, the testing adequacy of a DL system is usually measured by the accuracy of test data. Considering the limitation of accessible high quality test data, good accuracy performance on test data can hardly provide confidence to the testing adequacy and generality of DL systems. Unlike traditional software systems that have clear and controllable logic and functionality, the lack of interpretability in a DL system makes system analysis and defect detection difficult, which could potentially hinder its real-world deployment. In this paper, we propose DeepGauge, a set of multi-granularity testing criteria for DL systems, which aims at rendering a multi-faceted portrayal of the testbed. The in-depth evaluation of our proposed testing criteria is demonstrated on two well-known datasets, five DL systems, and with four state-of-the-art adversarial attack techniques against DL. The potential usefulness of DeepGauge sheds light on the construction of more generic and robust DL systems.
深度学习(DL)定义了一种新的数据驱动编程范式(a new data-driven programming paradigm),它通过一组训练数据(through a set of training data)构建了精心制作的神经元网络(a crafted neuron network)的内部系统逻辑(internal system logic)。我们已经看到DL在许多安全关键场景(safety-critical scenarios)中被广泛采用。然而,大量的研究表明,最先进的DL系统存在各种各样的漏洞,当应用到实际应用中时,这些漏洞可能导致严重的后果。目前,DL系统的测试充分性通常用测试数据的准确性来衡量。考虑到可访问的高质量测试数据的局限性,良好的测试数据精度性能很难为DL系统的测试充分性和通用性提供信心。与传统软件系统具有清晰可控的逻辑和功能不同,DL系统中缺乏可解释性使得系统分析和缺陷检测变得困难,这可能会潜在地阻碍其在现实世界的部署。在本文中,我们提出了一套用于DL系统的多粒度测试标准DeepGauge,其目的是绘制测试平台的多面描述。我们提出的测试标准的深入评估在两个知名的数据集、五个DL系统和四种针对DL的最先进的对抗攻击技术上进行了演示。DeepGauge的潜在用途为构建更通用、更健壮的DL系统指明了方向。
实验数据集: MNIST数据集、ImageNet数据集
神经网络模型: LeNet-1,4,5、VGG-19、ResNet-50
实验数据: 原始测试数据、对抗测试输入+原始测试输入组成的新的测试数据
实验结果:
MNIST数据集上的实验结果表明,由对抗攻击方法生成的新的测试数据,神经元覆盖指标要高于原始测试数据,而对抗样本本身就代表DNN的某些缺陷,这个实验结果表明,由各种对抗攻击手段生成的新的测试输入确实可以探索到一些仅由原始测试输入无法覆盖的DNN内部状态,而通过提升本文提出的这些神经元覆盖指标也会有助于检测DNN的缺陷。
ImageNet数据集上的实验结果表明,规模越大、复杂度越高(例如VGG-19或者ResNet-50)的网络可能更难以被测试输入覆盖到,不过这个规律并不总是成立。此外,对抗样本集往往能够触发更多的神经元成为top-k神经元,且神经网络每一层中往往会有一个固定的神经元子集,这个子集的神经元才可能成为顶级激活神经元,这说明每一层中最活跃的若干个神经元就已经大体表达了神经元网络的主要功能。比较Top-k神经元模式可以发现,每一层上的顶级激活神经元也很固定。实验结果表明,生成的测试输入能够覆盖的top-k神经元模式越多,其发现DNN缺陷的机会也就越大。
总之,DNN缺陷既可能出现在主要功能区(major function region),也可能出现在极端案例区(corner-case region),从测试的角度而言,两部分都应该被测试样本覆盖到。不过,测试样本更容易覆盖到主要功能区,要设计更好的DL测试技术,需要考虑如何才能更多地覆盖极端案例区。DeepGauge能发现对抗样本和原始样本的差异,由DeepGauge定义的覆盖率越高,越容易找到DNN缺陷。不过,作者也指出,传统软件测试中的覆盖率提升未必就能检测出缺陷,这个结论在DNN测试中也同样存在。尽管如此,DeepGauge对于指导DL系统测试过程、评价测试质量以及检测DL缺陷仍有其意义。
DL系统测试存在的问题: 测试的充分性准则(如何验证测试是否充分)
代码覆盖率定义:
代码覆盖率 = 所有测试用例覆盖的代码行数 / 总代码行数 代码覆盖率 = 所有测试用例覆盖的代码行数 / 总代码行数 代码覆盖率=所有测试用例覆盖的代码行数/总代码行数
传统软件测试中,测试用例如果执行到了某一行代码,我们就说这一行代码被覆盖了。因此,传统软件系统测试中,可以用代码覆盖率来判断当前测试是否充分。理想情况下,覆盖率越高,说明代码测试越充分。但这一指标在深度学习系统中无法直接套用。
深度学习系统测试中,很多工作一味准求DL系统的高准确率,并将其作为测试准则。尽管,系统的输出和准确率可以在一定程度上反映系统的质量和通用性,但这种办法并没有涉及DL系统内部神经元活动及其网络行为。仅仅从DL系统的决策输出和准确率去度量DL系统质量的做法过于片面,得出的结论也不可靠。