MetaPri: Test Input Prioritization based on Metamorphic Testing 论文精读

0 阅读10分钟

MetaPri: Test Input Prioritization based on Metamorphic Testing (基于蜕变测试的测试输入优先级排序方法)

论文来源

会议:2025 7th International Conference on Software Engineering and Computer Science (CSECS 2025) 作者:Jinyin Chen、Zheng Fang 访问链接:DOI: 10.1109/CSECS64665.2025.11009647

论文内容

研究背景

DNN 的普及:深度神经网络(DNN)已广泛应用于图像识别、自然语言处理、自动驾驶等安全关键领域,其可靠性和安全性至关重要。测试的必要性:在模型部署前,必须通过大量测试来发现潜在错误,避免在实际应用中造成严重后果。

已有研究尝试通过测试输入优先级排序来提高测试效率,即优先测试那些更可能暴露模型错误的输入,但现有方法各有不足:

  • 基于神经元覆盖率,借鉴传统软件测试中的覆盖率概念,衡量测试输入的充分性。但是与误分类输入的相关性弱,不适用于优先级排序
  • 基于变异分析,通过模糊变异操作生成测试用例,优先排序预测差异大的输入。但是时间开销大,效率低
  • 基于蜕变测试的激活值多样性,利用 DNN 内部激活状态评估测试对(MP)的多样性。但是激活值归一化后,正常样本与异常样本的差异不够显著

问题提出

核心问题:如何设计一种有效的DNN测试输入优先级排序方法,能够在有限的标注资源下,优先识别出更可能暴露模型错误的测试用例,从而提高测试效率、降低人工标注成本?

  • 问题一:MetaPri 在优先级排序效果上是否优于基线算法?

现有优先级排序方法(如基于神经元覆盖率的 DeepXplore、基于变异分析的 PRIMA、基于激活值多样性的 MPP)各有局限性,无法有效识别可能暴露模型错误的测试输入;

  • 问题二:MetaPri 选出的高优先级样本是否对模型改进有更好的指导作用?

优先级排序的最终目标不仅是发现错误,还应能筛选出对模型优化有价值的样本(如位于决策边界附近的难例)。多数优先级排序研究(如DeepGini、PRIMA)止步于发现错误,未验证筛选出的样本是否能有效支持模型重训练或微调

  • 问题三:Diver-Grad 是否比基于激活值的度量更能区分样本类型?

现有MPP等方法基于隐藏层激活值评估多样性,但激活值通常被归一化到[0,1] ,导致正常与异常样本的差异被压缩。这一缺陷直接限制了基于激活值方法的区分能力。作者观察到神经元梯度对输入变化更敏感,异常样本(尤其对抗样本)位于决策边界附近,其梯度幅度显著高于正常样本。

  • 问题四:不同蜕变关系、断点层选择、距离度量如何影响 MetaPri 的性能?

MetaPri包含多个可调参数:蜕变关系类型(AWGN噪声 vs. DSLR强扰动)、断点层位置(哪一层计算梯度)、距离度量(L1/L2/L∞)。这些参数的选择可能显著影响排序性能,需要系统实验找出最佳配置。

解决问题方法提出

  • 针对问题一,现有研究方法无法有效和高效识别可能暴露模型错误的测试输入的问题。论文提出了 MetaPri 方法,其核心解决思路如下:
  1. 引入蜕变测试生成测试对(MPs): 通过对源测试用例应用蜕变关系(如添加高斯噪声AWGN),生成对应的后续测试用例,形成蜕变测试对 MPi=(ts,tf)。

  2. 设计基于神经元梯度的多样性度量 Diver-Grad: 选择模型某一隐藏层作为断点,计算每个测试用例在该层的梯度向量,然后计算测试对中两个梯度向量的L2距离作为该测试对的多样性指标:DiverGrad(MPi)=hkL(ts)hkL(tf)2Diver-Grad(MP_{i})=||\nabla_{hk}L(t_{s})-\nabla_{hk}L(t_{f})||_{2} 该度量能有效放大正常样本与异常样本的差异,从而更准确地识别可能暴露缺陷的测试对。

  3. 基于Diver-Grad进行优先级排序: 将所有MPs按Diver-Grad值从大到小排序,值越大表示测试对中两个输入的梯度分布差异越大,越可能探索不同的DNN执行路径,因此优先检查这些测试对是否违反蜕变关系,从而提高缺陷发现效率。

通过以上方法,MetaPri能够在无需大量人工标注的情况下,有效提升测试输入优先级排序的效果,为问题一的验证提供了方法基础。在传统蜕变测试中,是根据结果或者隐藏层激活值差异来判断,这篇论文提供了从梯度角度来分析。

  • 针对问题二,现有优先级排序方法仅关注发现错误,未验证筛选样本对模型优化价值的问题。论文提出通过以下方式来验证MetaPri的指导性
  1. 利用MetaPri排序结果筛选高优先级样本:在完成对测试输入(或测试对)的优先级排序后,选取排名最靠前(即Diver-Grad值最大)的一批样本(例如RAUC-500或RAUC-2000中的样本)作为候选。

  2. 将这些高优先级样本用于模型重训练:将筛选出的样本加入原始训练集,对模型进行重训练(fine-tuning),保持其他训练参数不变(如优化器SGD、学习率0.001、10个epoch)

  3. 对比重训练前后模型准确率提升幅度(ΔAcc):计算重训练后模型在测试集上的准确率提升:ΔAcc=AccretrainAccoriginalΔAcc=Acc_{retrain}−Acc_{original}
    若MetaPri选出的高优先级样本能带来更高的ΔAcc,则说明这些样本位于决策边界附近或代表难以识别的模式,对模型优化具有更好的指导作用。

  • 针对问题三,针对现有基于激活值的多样性度量(如MPP)因激活值归一化而导致正常与异常样本差异不显著的问题,论文提出了 Diver-Grad 度量
  1. 基于神经元梯度而非激活值
    对于选定的隐藏层LkL_{k},计算输入x对该层输出的梯度:

image.png

  1. 梯度分布差异度量样本间多样性
    对于测试对 (ts,tf),计算两个梯度向量的差异(如L2距离)作为Diver-Grad值。由于异常样本(如对抗样本、误分类样本)通常位于决策边界附近,其梯度幅度显著高于正常样本,因此Diver-Grad能有效放大两类样本的差异。
  • 针对问题四,MetaPri方法中包含多个可调参数(蜕变关系、断点层、距离度量)可能影响排序性能的问题,论文通过系统性实验来探究最佳配置。
  1. 对比不同蜕变关系(MR):选用两种MR:AWGN(添加高斯噪声,适中扰动)和DSLR(强亮度变换,强扰动)。AWGN 表示优于DSLR,因为过强扰动可能破坏关键梯度信息,降低区分度。
  2. 对比不同断点层选择:选择不同的隐藏层作为断点(如浅层、中层、倒数第二层)。倒数第二层(全连接层之前)通常效果最佳
  3. 对比不同距离度量: 使用L1、L2、L∞三种范数计算梯度向量差异。L2范数综合表现最优,能更全面地评估梯度分布差异。

实验结果

  • RQ1:(Effectiveness): Does MetaPri outperform baseline algorithms in terms of prioritization effectiveness?
  1. 实验设计

    • 数据集:CIFAR-10、ImageNet
    • 模型:VGG16、VGG19、ResNet50
    • 基线方法:DeepGini、PRIMA、MPP、DSA、MCP、Random
    • 评估指标RAUC-n
    • 攻击方式image.png
      • 研究人员对原始数据集的图像应用上述六种攻击方法,为每张原始图像生成对应的对抗样本。这样,测试集中就混合了正常样本(原始图像)和异常样本(对抗样本或误分类样本)。这些攻击的作用:用于构造“异常测试输入”,以评估DNN模型在不同类型错误输入下的表现。优先级排序的目标就是将这类异常样本尽可能排在测试序列的前面,以便尽早发现模型缺陷。
  2. 实验结果

image.png

  1. 实验结论

MetaPri在优先级排序效果上整体优于基线算法,尤其是在CIFAR-10数据集上优势显著。使用AWGN(适中噪声扰动)作为蜕变关系的MetaPri版本表现最佳。

  • RQ2 (Guidance): Do the high-priority samples selected by MetaPri have better improvement?
  1. 实验设计

    • 数据集与模型:同RQ1
    • 重训练样本来源
      • CIFAR-10:RAUC-500中排名前500的样本
      • ImageNet:RAUC-2000中排名前2000的样本
    • 重训练配置:SGD优化器,学习率0.001,10个epoch,其余参数保持Keras默认配置
    • 评估指标ΔAcc(重训练前后模型准确率提升百分比)
    • 实验次数:5次重复取平均
  2. 实验结果 image.png

  3. 实验结论

    MetaPri选出的高优先级样本对模型改进具有显著的指导作用,使用这些样本重训练后模型准确率平均提升9.74%,高于所有基线方法。这证明MetaPri不仅能有效发现错误,还能筛选出对模型优化有价值的样本。

论文方法详解

image.png

方法设计

  1. 生成蜕变测试对(MPs) 选择一种或多种蜕变关系(MR),对每个源测试用例 ts应用MR生成对应的后续测试用例 tf,形成蜕变测试对 MPi=(ts,tf)。论文中主要使用两种MR:AWGN添加高斯白噪声(适中扰动),DSLR强亮度变换(强扰动,用于对比)。

  2. 选择断点层 根据经验或实验选择最佳断点层。论文推荐使用倒数第二层(例如全连接层之前的卷积层或池化层)。为了计算梯度多样性,需要选择一个隐藏层 LkLk​ 作为断点(breakpoint) ,将DNN分为两部分:

    • 前一部分:从输入层到 LkL_{k},用于计算梯度。
    • 后一部分:从Lk+1L_{k+1}到输出层,用于执行检查。
  3. 计算 Diver-Grad 对每个测试对 MPi:

  • 将 ts和 tf 分别输入模型,前向传播至断点层,得到输出 hk(ts) 和 hk(tf)。
  • 反向传播计算损失函数对断点层输出的梯度 gs 和 gf。
  • 计算 L2 距离得到 Diver-Grad(MPi)。
  1. 优先级排序 将所有测试对按 Diver-Grad 值从大到小排序,生成优先级队列。Diver-Grad 值越大的测试对,被认为越可能暴露缺陷,因此优先级越高。

  2. 检查蜕变关系 按照优先级顺序,依次检查每个测试对是否满足蜕变关系。对于给定的MR,若源测试用例ts和后续测试用例 tf 的模型输出关系与预期不符(例如,对于分类任务,若MR期望输出不变但实际改变),则认为发现了一个缺陷(violation)。