精读《基于神经元覆盖的深度神经网络白盒测试》_Jing Yu

时间:2022.03        TNNLS_B刊

一.前提:

        DeepXplore和LFuzz等研究表明,在对DNN的测试中,NC越高,对DNN的逻辑探索就越丰富。这意味着更高的NC可以使我们提高检测出(DNN潜在缺陷)的概率。

二.要解决的问题:

        1.如何选择和激活神经元以提高NC?

         2.如何提高测试生成[14]的效率?,即在有限的时间内生成更多具有高级别神经元覆盖率的测试用例来捕获各种错误和故障。

        3.如何进行测试结果的判定?即判别(测试用例的真实标签)与(DUT的预判结果)是否一

致。

        4.生成的对抗用例是否有助于提高DNN的鲁棒性。

三.方法:

        提出Test4Deep方法,神经元选择策略。

        当任意的神经元n的输出值>阈值t,就认为n被激活, 给出NC的公式:

根据DeepXplore,测试用例覆盖的神经元越多,表明测试用例的多样性就越大,这就会触发DUTs更多的错误行为。因此本文也采用神经元覆盖率作为测试指标。下图是框架:

由于对种子和输出约束的细微扰动叠加,x不需要人工标记,即x直接接收到种子的标记,从而形成一个测试用例τ,并将其加入到维持的测试用例集T中。

        下式表明失活神经元的和,再乘以一个超参数。使obj1(x)函数变大,倾向于激活更多的失活神经元。

在DLFuzz中,基于四种神经元选择策略,选择了m个失活神经元。而Test4Deep对所有的失活神经元进行求梯度,也不需要进行神经元选择。

        下式用来偏离原始标签,利用L2距离度量了(测试用例的类别向量)与(种子的类别向量)。并添加一个惩罚项来通过一个梯度来控制向同一方向偏离的扰动。(添加惩罚项的意义在于通过对模型的参数进行限制或约束,来避免过拟合和提高模型的泛化能力。)

        在DLFuzz中, 用来偏离种子标签的目标函数如下:Test4Deep区别于DLFuzz的是,它直接优化了L2距离,即目的是产生与种子变异程度较大的测试用例。而DLFuzz倾向于生成具有前k个标签中的某一个的测试用例,并削弱当前类别的概率。直觉上来看,DLFuzz产生对抗用例的能力看起来更强。

        Test4Deep联合优化目标函数如下:

        完整算法如下:

四.实验:本文具有丰富的实验

        1.Introduction的内容:

        与DLFuzz和DeepXplore相比,在相同的输入量下,Test4Deep的神经元覆盖率平均提高了32.87%和35.69%,生成时间效率提高了58.37%和53.24%。此外,Test4Deep生成的测试用例增加了43.12%和58.94%,而干扰减少了23.81%和98.40%。与DLFuzz中报道的两种最佳神经元覆盖率策略相比,即使在较高的神经元激活阈值(t = 0.75)下,Test4Deep也能提高4.34%和23.23%的神经元覆盖率,并节省94.48%和85.67%的生成时间。

       2. 超参数设置:

DLFuzz:k = 4, m = 10, λ = 1, iter_time = 3 (ImageNet)或5 (MNIST), Strategy.1(取值为0)。

 

DeepXplore:图像数据集λ1 = 1, λ2 = 0.1, s = 10。 pdf数据集λ1 = 2, λ2 = 0.1, s = 0.1。

Test4Deep:图像数据集λ1 = 0.5, λ2 = 0.1, s = 0.005。PDF数据集λ1 = 0.5, λ2 = 0.5, s = 0.1

神经元激活阈值t = 0.25。种子输入来自每个数据集的200个随机选择,每个算法的数据集相同。

数据集如下:

        3.实验要论证的问题:

       3.1Test4Deep的有效性,即由Test4Deep生成的测试用例是否可以达到更高的覆盖率?

       3.2Test4Deep的效率,即Test4Deep是否可以更快地生成测试用例?

       3.3Test4Deep生成的测试用例是否需要手动标注?

       3.4Test4Deep是否有助于增强DUT?

3.1.1更高的神经元覆盖率

        在神经元激活阈值t=0.25时:在9个dut上,Test4Deep在MNIST、ImageNet和adjacent /Virustotal的平均神经元覆盖率分别比DLFuzz高11.53%、56.85%和31.40%,比DeepXplore高16.13%、60.15%和31.98%。

 当t=0.75时的表现:

 

 3.1.2更多的对抗用例生成

        在t=0.25的情况下,相比于另外2种的算法,Test4Deep在相同数目的种子下生成了更多的对抗用例。

        但是,光看对抗用例的数量是不够的。本文认为具有相同神经元覆盖的对抗用例是等价的,因此做出了如下折线图:由于Test4Deep覆盖了更高的神经元,表明生成的更多的对抗用例是有意义的。

3.1.3激活阈值t对NC的影响:

        即使在t = 0.75时,Test4Deep的最低NC仍大于55%,而其他三种方法的NC均小于50% (MNIST)。NC逐渐下降说明Test4Deep、DLFuzz和DeepXplore有策略地诱导了神经元的激活。显然,Test4Deep的指导方针更有效地触发大量被激活的神经元,以尽可能多地生成测试用例,而随机选择方法则相对盲目和无指导。

3.2.1Test4Deep算法的效率:

        计算了三种测试方法在所有dut上生成每个测试用例的平均时间,如表II的第9、10、11列所示。对于每个生成的测试用例,Test4Deep在MNIST、ImageNet和康塔格特/Virustotal中分别比DLFuzz节省58.32%、51.80%和80.40%的时间,而比DeepXplore减少60.53%、51.48%和60.12%的时间。

        如表三的最后一列所示,在LeNet-4和ResNet50中,DLFuzz使用两种最优神经元选择策略[10]生成每个测试用例的时间消耗分别是Test4Deep的18.12和6.98倍,DeepXplore的2.53和6.50倍。采用最优神经元选择策略的DLFuzz在测试用例生成早期获得了更高的神经元覆盖率和时间效率(与DeepXplore相比)。在连续生成的过程中,dlfuzzy需要不断维护适合选择策略的神经元列表,dlfuzzy的模糊过程必须在每次迭代中遍历所选神经元的各种组合。因此,随着种子数量的增加,DLFuzz的时间效率降低。如Section IV-B中的分析所示,在生成的后期,在DLFuzz与Test4Deep重叠的组合策略和神经元选择策略中,Strategy.3将失去效力。然而,Test4Deep没有保存神经元列表的开销。DeepXplore在每次迭代中随机选择一个不活跃神经元。该策略的弱点是需要对每个测试用例输出进行大量的迭代。此外,基于多dnn差分决策的框架也导致了输出时间开销的增加。

        Test4Deep尝试在每个迭代中触发所有不活跃的神经元,并持续跟踪它们,在生成之前,在接下来的连续迭代中激活它们,以获得最大的神经元覆盖。这种神经元选择策略受dut中神经元数量的影响较小,有利于产生高神经元覆盖率的测试用例。因此,我们认为Test4Deep是一种具有较高时间效率和神经元覆盖率的测试方法。

3.3.1区别对生成用例的标签进行自动判定和手工判定:

        DeepXplore采用平均L1距离度量测试用例的平均多样性(AD)。

其中|#Cases|是生成的测试用例的数量。

        DLFuzz引入了平均相对l2距离作为度量扰动的度量,并将其作为图像数据集输出测试用例的约束之一:

文中采用\overline{l_{2}dist.}< 0.02作为其生成算法的输出约束之一,并验证该约束能够保证修改前后测试用例标识的一致性。但是,在DLFuzz的源代码中,不是用 \overline{l_{2}dist.}< 0.02作为生成所有测试用例的约束条件。而是用来判断生成的测试用例是否可以作为新的种子用例加入种子池的条件。通过运行源代码如下图所示,在MNIST中约束对抗用例的\overline{l_{2}dist.}< 0.02时,是无法产生对抗用例的。

        我尝试调整添加扰动时的步长。当步长为0.02时,由下图可见,五次连续迭代中,第一次变异生成的测试用例都无法满足约束条件 \overline{l_{2}dist.}< 0.02:

 

        调整步长到0.005时,只有每个种子变异的第一次才能满足约束条件  \overline{l_{2}dist.}< 0.02,而第一次变异生成的测试用例却无法成为对抗用例:

         Test4Deep也采用\overline{l_{2}dist.}< 0.02进行度量,同时也考虑AD。

        <1>\overline{l_{2}dist.}和AD都是最低。如果能让DUT误判,就是非常好的对抗用例。

        <2>\overline{l_{2}dist.}是最低的,AD不低。这种是次优的。

        <3> \overline{l_{2}dist.}不是最低的,AD是最低的。这种依旧是与种子标签一致的测试用例。

        <4> \overline{l_{2}dist.}不是最低的,AD不是最低的。需要手工进行判定。在这种情况下,由于生成的测试用例本身是无意义的,因此对这样的测试用例讨论其NC是没意义的。

        基于生成的经过精细修改的测试用例与种子图像高度相似的直觉判断,我们分别采用pHash[38]和FSIM[39]计算出在灰度图像数据集和RGB图像数据集上输出与输入的相似度定量指标。pHash算法是一种用于高精度计算灰度图像相似度的感知哈希算法。FSIM算法是目前最先进的评估RGB图像相似性的算法。测试用例和种子之间的差异越小,pHash和FSIM的值就越高。需要注意的是:反过来并不一定适用。

表明 Test4Deep不需要手工进行标签的标注:

 3.4.1通过Test4Deep改进DUT:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值