DeepGini:优先进行大规模测试以增强深度神经网络的鲁棒性

原文地址

思考
问题
已解决⭐
重点

Abstract

  1. 为给定输入定义正确输出的测试预言在自动测试中通常不可用。 为了获取理论信息,基于DNN的系统的测试任务通常需要提前进行人工贴标签。
  2. DeepGini,一种基于DNN统计视角设计的测试优先级划分技术。这样的统计角度使我们能够将测量错误分类概率的问题减少到测量固定杂质的问题,使我们能够快速识别可能错误分类的测试。
  3. DeepGini在优先考虑有效性和效率方面的测试方面优于现有的基于覆盖的技术。并且由DeepGini优先进行的测试在提高DNN质量方面更为有效。特别针对图像分类DNN

Introduction

  1. 背景:常规软件测试依靠程序员手写建立业务逻辑,而DNN测试依靠数据驱动的编程范例(data-drivenprogramming paradigm),所以足够的带有oracle信息的数据对于基于DNN的软件错误行为的检测十分重要。
  2. 问题:无法自动测试Oracle。
  3. 启发:在测试基于DNN的系统时,软件测试人员通常将注意力集中在那些可能导致系统运行不正常的测试上,因为诊断这些测试可以洞察程序中的各种问题。 这一事实自然促使我们提出一种对测试进行优先级排序的技术,以便可以在其他测试之前对引起故障的测试进行标记和分析。
  4. 现有测试优先级排序技术:代码覆盖率用作指导优先级排序过程的度量, 两种主要的基于覆盖的技术称为覆盖总数测试和覆盖范围附加测试优先级划分[46]。
    覆盖总数测试方法主要是如果它覆盖更多程序元素,我们就优先选择它进行测试。
    覆盖范围附加测试方法首选的测试则是是否可以覆盖更多之前测试未发现的程序元素。
    上述的基于覆盖的方法预期效果不是很好。
    原因:
    1. 这些标准是用来衡量测试充分性的,使用这些覆盖标准测试DNN后,往往不清楚如何提高DNN的质量
    2. 需要非常高的时间复杂度O(mn^2)
  5. 直观地讲,如果DNN为每个类别输出相似的概率,则DNN可能会将测试分类为错误的类别。
  6. 缺点:我们的方法需要运行所有测试以获得输出矢量
  7. 本文实验思路:将DeepGini与使用现有神经元覆盖标准的基于覆盖的方法进行比较。 从两个方面评估了我们方法的有效性。 首先,我们计算平均故障检测百分比(APFD)[46]的值,这是评估优先级排序技术的标准方法。 其次,我们评估我们的技术是否可以提高DNN的质量。 为此,我们在训练集的前面添加了优先级最高的测试,并将重新训练的DNN的准确性与原始训练进行了比较。

Background

深度学习和测试优先级的背景知识

  1. Neuron Coverage Criteria(NAC(k),神经元**覆盖率)
    定义为覆盖神经元数量与神经元总数的比率,k值自设,神经元输出值大于k认为它被**。

  2. k-Multisection Neuron Coverage (KMNC(k),k-多段神经元覆盖率)
    假设神经元的输出位于一个区间[lowo,higho]中,在大多数情况下,单个测试必须覆盖每个神经元的一部分。 只有极少数的测试没有覆盖间隔中的一个部分,而是覆盖了边界,即(-∞,lowo]和[higho,+∞)。(KMNC(k))定义为覆盖部分数与部分总数之比。 因此,几乎所有单个测试的KMNC(k)覆盖率都相同。

  3. Neuron Boundary Coverage (NBC(k),神经元边界覆盖)
    与KMNC(k)不同,NBC(k)并非旨在覆盖[lowo,higho]中的所有部分,而是旨在覆盖(-∞,lowo]和[higho,+∞)的边界。
    定义为覆盖边界数与边界总数之比。
    度量了给定测试输入集覆盖极端案例区(上边界区和下边界区)的程度。由于每个神经元都有一个上限和一个下限,因此边界总数是神经元数的两倍。

  4. Strong Neuron Activation Coverage (SNAC(k),强神经元**覆盖率)
    可以看作是NBC(K)的特例。
    定义为覆盖上边界的数目与上边界总数的比率,其中上边界总数实际上等于DNN中的神经元数目。

  5. Top-kNeuron Coverage (TKNC(k),top-k神经元覆盖)
    度量的是每一层中成为**值最大的前k个神经元的数量。
    定义为每一层上的前k活跃的神经元的总数与DNN中的神经元总数的比率。
    当且仅当神经元输出结果不小于神经元层中第k个最大值时,我们认为这个神经元被这个测试覆盖。
    这个度量只能用于将两个测试集与一个以上的测试进行比较。

  6. Likelihood- and Distance-based Surprise Coverage (LSC(k)and DSC(k),基于可能性和距离的意外覆盖)
    · SA: 意外充分性(Surprise Adequacy )
    衡量新用例相对于训练集中用例的多样性程度.指标越大分类器越容易分错。
    SA旨在衡量给定新输入相对于用于训练的输入的相对新颖性,是DL系统如何对未知输入做出反应的指标。
    两种计算方法:
    · LSA: 基于可能性的SA (Likelihood-based Surprise Adequacy)
    采用核密度估计(KDE)来获得输入数据的分布密度函数。在选定Nl层后,对于所有的训练集中的用例,每个用例使用核函数计算该用例与新输入x的**迹的差值。
    概率密度降低了,证明输入更加稀有,概率密度增高了,证明输入更加相似。
    · DSA: 基于距离的SA (Distance-based Surprise Adequacy)

    · SC: 意外覆盖率 (Surprise Coverage)
    被覆盖的段数除以总段数
    一组具有较高SC的输入是一组多样化的输入

  7. 基于覆盖率的测试优先级
    · 覆盖率的尽早最大化将导致早期发现故障。

    • Coverage-Total Method (CTM):
      · 总是选择覆盖率最高的测试
      · O(nlogn)
    • Coverage-Additional Method (CAM)
      · 根据先前选择的反馈选择下一个测试。
      · 选择一个可以覆盖更多未发现的代码结构的测试。
      · 在达到最大覆盖率之后,我们可以使用CTM对其余未优先测试进行 优先级排序。ACDB为什么不行?
      · O(mn^2)

Approach

对测试进行优先排序的方法及其在提高DNN质量方面的应用

  1. 两次随机取样有不同结果的概率如下,概率越低,纯度越高。
    DeepGini:优先进行大规模测试以增强深度神经网络的鲁棒性

  2. DeepGini:优先进行大规模测试以增强深度神经网络的鲁棒性

  3. 即使DNN将输入测试分成两个以上的类,ξ也具有类似的分布:

DeepGini:优先进行大规模测试以增强深度神经网络的鲁棒性
· ξ(t1)>ξ(t2)暗示t1更有可能被错误分类。 因此,对于一组优先测试,我们需要运行测试以收集输出,然后根据ξ的值对这些测试排序。
· 假设我们有四个测试A、B、C和D,DNN试图将它们分类为三个类别。 表2显示了它们的输出向量和ξ的值。 根据ξ的值,我们可以对测试ABCD进行优先排序。
DeepGini:优先进行大规模测试以增强深度神经网络的鲁棒性
4. 一般情况下,我们可以在训练集上增加更多的测试,并重新训练DNN以增强其鲁棒性。DeepGini可在有限的时间预算内增强DNN健壮性。因为DeepGini在前面优先处理的测试比在后面优先处理的测试更能有效地提高DNN质量,而且比在前端优先但基于覆盖的优先技术更能有效地提高DNN的质量。
DeepGini有效性背后的原理实际上遵循了主动机器学习的理论,它倾向于在决策边界附近的测试。

Experiment

  1. 实现了我们的方法以及各种基于神经元覆盖的测试优先级排序方法。https://github.com/deepgini/deepgini
  2. 每个比较实验都在四个模式下进行,涉及两个方面:(1)使用CTM或CAM对测试进行优先级排序;和(2)在原始数据集中对测试进行优先级排序或对结合原始测试和对抗性测试的测试进行优先级排序
  3. DeepGini是否可以找到比基于神经元覆盖的方法更好的测试排列?
    计算故障检测平均百分比(APFD), 较高的APFD值表示更快的误分类检测率
  4. DeepGini比基于神经元覆盖的方法更有效吗?
    通过记录优先排序的时间成本来提供答案。某些优先级排序方法无法在数小时内完成,这在工业环境中不可行。跟题目有什么关系?
  5. DeepGini可以指导DNN的再培训以提高其准确性吗?
    利用对抗测试来回答。测试集T和验证集V,我们将前1%,2%,··,10%的测试加回到训练集中,并重新训练新的DNN。我们不会添加超过50%的测试来重新训练DNN, 因为我们观察到DNN的准确性不会随着更多测试而发生显着变化。使用V,我们计算新DNN的准确性。答案是可以。

Result

介绍了测试优先级排序(RQ1和RQ2)的结果,然后分析了我们的方法是否可以更好地指导DNN的再训练(RQ3)。

  1. 我们将DeepGini的结果与现有的两组基于覆盖的方法:(1)NAC,NBC和SNAC; (2)TKNC,LSC,DSC和KMNC

  2. 结果:
    (效力和效率 问题1,2)
    • DeepGini能够在2秒内确定成千上万次测试的优先级
    • DeepGini的APFD故障检测平均百分比非常接近1
    第一组:NAC,NBC,SNAC
    • 不足0.5%的测试足以达到以下三个覆盖率标准的最大覆盖率,无论其参数设置如何:NAC,NBC和SNAC
    • 在MNIST的10,000个原始测试中,非常少量的测试就足以实现最大覆盖率:NAC(0.75),22个测试可以达到最大覆盖率(84%);NBC(0.5),有5个测试可以达到最大覆盖率(0.97%); SNAC(0.5),有5个测试可以达到最大覆盖率(2%)。由于我们可以很快达到最大覆盖率,因此CAM将很快退化为CTM,因此,对于这些数据集,CAM的有效性和效率几乎与CTM相同。
    效力:图四绘制了检测到的错误分类测试的百分比(y轴)与优先级​​测试百分比(x轴)的对比。
    • 首先,与NAC,NBC和SNAC相比,DeepGini获得了更高的APFD值。
    • 其次,如图4中的虚线所示,基于神经元覆盖的优先级排序方法,有时甚至比随机优先级策略还差。
    效率:表5
    • 对于原始测试集,NAC,NBC和SNAC基于CAM的优先级排序过程分别花费至少2、5、7秒,而DeepGini仅花费0.45秒。
    • 类似地,对于带有对抗性示例的测试集,我们发现三个基线的基于CAM的优先级排序过程花费了超过11秒的时间,而DeepGini仅花费了2秒的时间。
    • 这些数据表明DeepGini与NAC,NBC和SNAC相比具有更高的效率
    第二组:TKNC,LSC,DSC,KMNC
    • 每个测试的TKNC,LSC和DSC覆盖率均相同,而与参数k无关
    • 因此,如果我们使用这些覆盖率指标对测试进行优先级排序,则⭐CTM无法正常工作(5.1.2节)CTM本来就是按照覆盖率的大小进行优先级排序的,覆盖率相同了就无法排序了。 不幸的是,使用这些覆盖率指标,CAM也无法很好地工作。 主要原因是少于5%的测试足以实现最大覆盖率。 在对5%的测试进行优先级排序后,CAM会退化为CTM,无法按照上述说明进行操作。
    • 如果我们使用KMNC来对测试进行优先级排序,则CTM无法正常工作,因为几乎所有单个测试都具有相同的KMNC覆盖率,而与参数k无关。 但是,KMNC可以使用CAM优先级排序方法。 因此,我们仅将基于KMNC的CAM与我们的优先级方法进行比较:
    效力:
    • DeepGini在优先测试的有效性方面明显优于四个基准
    效率:
    • 表5显示,基于这些覆盖率指标的优先级排序方法比我们的方法慢20倍-2000倍

    (问题3)
    图5-a和图5-b展示了LeNet-5在MNIST上的结果。 曲线显示了再训练后DNN的准确性
    在表6中,我们用前10%的优先测试对DNN进行了重新训练后,还提供了精度值。从表中可以看出,虽然基线标准可以达到0.83-0.85的准确度,但DeepGini可以将准确度值提高到0.96。

对于其中一些标准,我们观察到原始测试的很小一部分(约1%至5%)足以实现最大覆盖率。覆盖率标准无法区分不同的测试。在我们的实验中,随机优先排序策略甚至优于NAC和TKNC,这意味着这些覆盖标准可能会误导发现新的错误DNN行为。
KMNC标准在有效性和效率方面都未能很好地发挥作用。 还需要进行更多的研究,以探索其潜力和改进之处。