深度神经网络测试覆盖率与对抗样本间的相关性研究

论文价格:150元/篇 论文用途:硕士毕业论文 Master Thesis 编辑:vicky 点击次数:119
论文字数:27855 论文编号:sb2021031310074934923 日期:2021-04-02 来源:硕博论文网
本文首先介绍了本次研究的背景和意义,并对深度神经网络测试和测试用例优先级技术的国内外现状进行简要阐述,指出虽然目前传统软件的软件测试技术比较成熟,但是 DNN 与传统软件的本质区别决定了传统的软件测试技术无法直接应用于 DNN 测试,因此对 DNN 测试的覆盖率测试以及测试的充分性准则还需要进行深入的研究。接着本文从神经网络的结构、计算过程、激活函数和对抗样本等方面详细地介绍了关于神经网络的相关基础概念。

第一章 绪论

1.1研究背景和意义
随着计算机技术的快速发展,越来越多的软件和应用在人类生活中占据了举足轻重的地位。这些应用不仅给人类带来了很多的便利,提高做各种事情的效率,还给人们带来了许多可能性,做到了以前无法做到的事情。在近些年,深度学习(DL)系统在各种应用中获得了极大的普及,例如语音处理[1]、医学诊断[2]、图像处理[3]和人工智能机器人[4]等等。深度神经网络(DNN)作为一种深度学习的系统是近期成功背后的关键驱动力。然而万物都有两面性,基于深度神经网络的软件系统在给人类带来惊喜和便利的同时,还会带来许多隐患。例如前几年发生的谷歌自动驾驶[5]汽车发生了车祸,有人因此失去生命,还有多起自动驾驶车辆无法处理意外以及角落的情况而发生的不同程度后果的案件[6][7],这都是深度神经网络软件表现出的导致严重后果的错误行为。在安全攸关的领域和其他关键领域,深度神经网络表现出错误行为会导致无法挽回的严重后果。因此对深度神经网络进行充分的测试以尽可能地避免错误行为是必要的。
在之前的时间里,传统的软件测试技术已经逐渐成熟[8],然而由于传统的软件与神经网络之间存在着本质区别,因此传统软件测试技术无法直接应用于 DNNs 测试中。我们一般将使用高级编程语言(如 C、C++、JAVA、Python 等)编写的任何程序视为传统软件。传统软件的程序中每个语句执行某些特定的操作,这些操作要么将输出从前一条语句转换到下一条语句,要么就更改程序的状态[9]。对于传统软件,学者们已经在不同级别上定义了许多的覆盖标准,以便从不同的角度分析软件运行时的行为。从代码的级别来看,目前已经有语句覆盖、分支覆盖、数据流覆盖和突变测试[10][11][12]。其中语句覆盖率衡量了目标是否已经执行了每一条的指令,分支覆盖率则将测试目标放到控制结构的每一个分支是否都被覆盖到(一般指 if语句和 switch-case 语句),这两个都是基于控制流的语句。数据流覆盖则是统计每个变量的定义是否被覆盖从而检测数据流的异常。从模型的级别来看,目前已有状态覆盖率和基于转换的覆盖率[13][14]。基于模型的覆盖标准旨在通过抽象的模型来覆盖到更多的程序行为。以上众多多方面的覆盖准则可以适应不同的测试方法和粒度。
.................

1.2国内外研究现状
1.2.1 深度神经网络测试
深度学习系统在众多方面都得到了广泛应用,包括语音识别、图像处理、机器人人工智能、自动驾驶等等。深度神经网络作为深度学习的核心内容,一直都是相关领域学者们的重点研究对象。人们在享受着深度学习系统带来的智能与便利的同时也必须应对其可能会带来的潜在威胁,例如近年发生的骇人听闻的谷歌自动驾驶致人死亡的事故,在一些攸关性命的领域,我们不希望神经网络存在会做出错误行为的情况,因此如今对深度神经网络的测试越来越受到关注。
在实际的测试中,技术人员经常通过往正确的数据集里故意添加细微的干扰形成新的样本,该样本与原样本仅有很小的差别但是却会让模型以一个高确信度给出一个错误输出,这种样本也就是对抗样本[23]。近年来,已经有许多文献[24][25]研究深度神经网络中对抗样本的生成。截止目前,在深度学习中关于对抗攻击的方法以攻击环境来说可以分为两大类,即白盒攻击和黑盒攻击[26],其中使用黑盒攻击时攻击者对模型的内部结构、训练参数、防御方法等等一无所知,只能通过输入与输出与模型进行交互,而在白盒攻击中攻击者对模型的一切都可以掌握,目前大多数的攻击算法都是白盒攻击。其中常用的攻击算法有快速梯度符号法(FGSM[27])、JSMA算法[28],以及两种添加噪声的方法,即Gaussiannoise 和Uniformnoise 方法[29]。 在进行DNNs测试时,能够进行有效测试的基础就是有一组合适的测试用例,因此人们已经开始研究测试覆盖的设计和测试用例的生成。首先Pei 等人提出首个系统性测试现实深度学习系统的白盒框架DeepXplore[30],该框架解决了生成输入和没有手动干涉时识别深度学习系统的不正确行为的两大难题。接着LeiMa等人针对深度学习系统的组合测试进行研究,提出了使用组合测试引导测试用例生成的技术,并被证明组合测试在深度学习系统中也是一个可行的研究方向。
...................

第二章 相关背景知识介绍

2.1深度神经网络
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络[34][35]。深度学习的“深度”是指流向图的属性,在深度神经网络中,数据从输入层输入,经过神经网络的隐藏层后从输出层输出结果,数据所涉及的计算可以通过流向表示,这种流向图的属性也就是深度。神经网络就是深度学习的基础,它是一种模拟人脑的神经网络以期望能够实现人工智能的机器学习的技术[36][37]。
2.1.1 神经网络的结构
深度神经网络由若干层的众多神经元构成,简单地说就是将多个神经元连接起来,组成一个网络。图 2.1 就是一个最常见的全连接的神经网络的模型。图中每一个圆圈代表一个神经元,其中绿色的圆圈代表的是组成输入层的输入神经元,红色的圆圈就是组成输出层的神经元,蓝色的圆圈代表的就是隐藏层的所有神经元。在图 2.1 中可以看出,该模型有 2 个输入层的神经元以及 2 个输出层的神经元和 6 个隐藏层的神经元组成,其中隐藏层有两层,各包含了 3 个神经元。一般来说,输入层与输出层的神经元个数是固定的,由输入的数据以及输出的格式所决定,而隐藏层中隐藏层的个数以及每一个隐藏层的神经元个数都是不固定的,可以由训练的程序员自己定义。神经元之间的连线代表这神经元的互动,每个连线对应一个权重。像图中所有的神经元都与邻层所有神经元存在连接的层被称为全连接层。
图 2.1 简单的神经网络模型
.......................

2.2深度神经网络测试
2.2.1 深度神经网络测试
截至目前,基于 DNN 的软件测试仍然处于早期阶段,虽然传统软件测试技术已经日趋成熟,但是由于 DNN 与传统软件之间存在着本质的区别,我们很难将传统软件测试技术直接应用到 DNNs 测试中去,因此 DNNs 测试需要更多的深入研究与创新[42]。
我们一般将传统软件视为任何以高级编程语言(例如 C 语言、C++、JAVA、Python 等)编写的程序。在传统的程序中,每个语句都会执行特定的操作,这些操作有的将输出从前一条语句转换到下一条语句,有的会改变程序的状态,例如将新值分配给变量。在这些过程中,由于开发人员进行了不正确的操作,可能会引入软件缺陷(或错误)从而导致意外的输入甚至引发程序崩溃。为了检测出这些缺陷,软件测试是软件行业中使用最广泛的软件验证技术之一。在软件测试时,通常会给出一组测试数据,测试人员将这些测试数据作为输入提供给程序,并通过比较程序运行时的行为来验证程序的正确性,并通过使用覆盖率标准来衡量测试的充分性,覆盖率标准是量化软件测试程度的重要的措施[43],同时也有众多计算覆盖率的软件测试工具陆续被发布[44][45]。具有较高测试覆盖率的程序通常表明其包含缺陷的可能性比较低,许多软件测试标准要求在软件使用前对产品进行全面测试,并以较高的测试覆盖率完成测试,在对一些安全攸关的软件进行测试时,某些测试覆盖率甚至要求达到 100%[46]。虽然传统软件测试已经投入使用多年,但是与开发人员使用确定性算法进行编程的传统软件不同,DNNs 通过训练数据,选择功能和网络结构来进行编程。简单地概括来说,DNN由在多个层上的多个相互连接的神经元组成,层包括了输入层,输出层和多个隐藏层。每个神经元都是一个计算单元,通过将激活函数应用于其输入来计算其输出。在经典的 DNN 中,每个神经元都与下一层上的所有神经元完全连接,并且每个连接都有权重来表示神经元之间连接的强度。总的来说,DNN 可以被视为将给定输入转换为输出的函数,并且此函数由其计算单元的聚集效应来决定,每个计算单元都对整个计算过程有所贡献。正是 DNN 与传统软件组成架构上的完全不同,使得 DNNs 测试需要新的研究。DNN 中的软件测试,我们需要把更多的关注放到神经元本身的状态以及神经元之间的互动关系上,举例来说,如果存在一个神经网络,一组测试用例的覆盖率很高,但是这个神经网络中激活的神经元占比仅有 30%,那么当目前没有激活的神经元被激活的时候,神经网络就可能会出现错误的结果,而这个错误结果很有可能就会引发严重的后果。
图 3.1 MNIST 图像示例图
...........................

第三章 深度神经网络覆盖测试的相关性研究.......................... 16
3.1研究问题.............................. 16
3.2实验对象.................................. 16
第四章 深度神经网络中基于覆盖率的测试用例选择............................ 30
4.1研究问题....................... 30
4.2实验对象............................ 30
第五章 总结与展望...................... 41
5.1总结................... 41
5.2展望..................... 42

第四章 深度神经网络中基于覆盖率的测试用例选择

4.1研究问题
本文针对深度神经网络进行测试用例挑选,以覆盖率为指标进行排序,其中覆盖率由前章的十一个覆盖准则计算得到。通过实验可以回答如下的两个问题:
RQ1 对于每个覆盖准则,以其覆盖率为引导进行测试用例选择后,是否可以提升对抗样本检测能力?
RQ2 如果以覆盖率为引导进行测试用例选择后的序列对对抗样本检测能力是有帮助的,其原因是什么?如果没有帮助,其原因又是什么?
本实验与第三章的实验类似,也是基于深度神经网络做的实验,所用的数据集也是MNIST 与 CIFAR10 数据集,其中 MNIST 数据集有 Lenet-5、L-3、L-5 和 L-10 模型,CIFAR10数据集有 VGG-16 和 VGG-19 模型,实验的样本也是原始数据集加上使用 FGSM、GaussionNoise、JSMA 和 Uniform Noise 对抗算法生成的对抗样本集混合的数据集。关于模型、数据集的详细内容参考 3.2 节。
........................

第五章 总结与展望

5.1总结
随着计算机技术的飞快发展,深度学习和深度神经网络在人们的日常生活中逐渐占有越来越重的地位。在深度学习系统被应用到一些安全攸关的重要领域时,我们对其安全性测试就显得更加必要。在前几年的谷歌自动驾驶汽车出了安全事故使行人丢了性命后,这个话题更是闹得沸沸扬扬。很显然,如果例如自动驾驶、自动医疗诊断、人脸识别系统等关键领域因为神经网络中的一些错误而使系统做出了完全错误的行为,其结果不堪设想。虽然目前人们对传统软件的测试已经日趋成熟,但由于深度神经网络和传统软件存在着本质区别,因此传统软件测试技术无法直接应用到深度神经网络测试中去。因此,如何测试深度神经网络、怎样判断一次测试的充分性成了近期的难题。
本文首先介绍了本次研究的背景和意义,并对深度神经网络测试和测试用例优先级技术的国内外现状进行简要阐述,指出虽然目前传统软件的软件测试技术比较成熟,但是 DNN 与传统软件的本质区别决定了传统的软件测试技术无法直接应用于 DNN 测试,因此对 DNN 测试的覆盖率测试以及测试的充分性准则还需要进行深入的研究。接着本文从神经网络的结构、计算过程、激活函数和对抗样本等方面详细地介绍了关于神经网络的相关基础概念。接着以目前的许多研究成果为例,具体地介绍了 DNNs 的测试,着重介绍了以 DeepXplore 为例的深度学习系统的白盒测试技术和框架以及目前已经发布的若干 DNNs 测试工具。然后提出了DNN 鲁棒性的概念,指出鲁棒是“健壮”的英文单词的音译,指代神经网络在异常和危险情况下系统的生存能力,并提出深度学习的测试技术的目的就是提高深度神经网络的鲁棒性。最后从概念和计算公式两方面详细地介绍了目前提出的共计 11 个深度神经网络的覆盖准则,这些覆盖准则可以分为基于神经元状态、基于单层神经元的组合和基于邻层神经元的组合三大类,这些覆盖准则也是后文实验的实验对象。
参考文献(略)
上一篇:基于智能优化的WSN定位算法研究与改进
下一篇:面向智能问答系统的答案选择与自然语言推理模型