本周阅读了论文《Cats Are Not Fish: Deep Learning Testing Calls for Out-Of-Distribution Awareness》,参考了思辨|Cats Are Not Fish:深度学习测试中的分布外数据研究 - 墨天轮,记录阅读笔记。
该论文主要是对深度学习测试用例生成中的分布外数据(OOD)的讨论,并根据实验结果提出了一系列针对未来研究方向的建议,对提升测试用例生成的质量有一定的帮助。
一、背景:
当前DL测试技术通常不考虑生成测试数据的分布。因此很难判断“已识别的错误”是否确实是对 DL 应用程序有意义的错误(即,由于模型的质量问题)或当前模型无法处理的异常值(即,由于缺乏训练数据)。
根据深度学习的基本假设,DL不具备处理分布外(Out-Of-Distribution)数据的能力,而测试输入生成技术生成的数据有可能是OOD数据,使得此类测试数据失去了实际指导意义。
二、贡献:
本文初步调研了深度学习测试领域中的OOD数据,通过评估具有分布感知错误的对抗性再训练的有效性,进一步分析了 DL 系统投入生产时的后果。
三、实证研究:
实验规模:
共451组实验、42类DNN模型及120万例测试数据。涉及:
-
5类现有OOD数据检测算法:Simple、ODIN、Mahalanobis、Outlier Exposure、Likelihood-Ration
-
多个经典数据集:MNIST、FashionMNIST、CIFAR-10
-
多种深度学习模型:VGG、DenseNet、ResNet、LeNet
-
多种突变算子:旋转、平移、模糊、加噪等
-
多种测试输入生成算法:DeepTest、DeepHunter、TensorFuzz
-
多类测试标准:神经元覆盖、神经元边界覆盖、k-折神经元覆盖等
实验结果:
在测试和增强阶段引入数据分布意识比不知道分布的再训练高出 21.5%。
四、研究问题及回答:
问题1:现有OOD检测技术的准确性?
答:对ID数据和OOD数据的区分仍具挑战性。OE算法效果较好。大部分算法可以较好地识别ID数据。若将同一数据集内的不同类作为不同的分布,则大部分算法的效果会较大幅度降低。
研究建议1:一个可能的方向:研究如何提升分布外数据检测算法的效果。细粒度的OOD数据检测算法可以对深度学习测试提供有效指导。
问题2:突变算子与数据分布之间的关系?
突变算子用于生成新的测试用例。因此,哪些突变算子易于生成OOD数据,哪些易于生成ID(分布内)数据?
答:突变算子和OOD数据的关系与数据集类型和性质有关。灰度图比彩色图更易于生成OOD数据;图片模糊和图片伸缩是产生最多OOD数据的突变算子;图片旋转、图片剪切和亮度改变产生较少OOD数据。生成测试数据的OOD比率比测试集数据更高。
研究建议2:突变算子与数据分布的关系应当纳入深度学习测试算法的考虑范畴内,以生成更多有效测试数据。
问题3:测试标准与数据分布之间的关系?
测试标准提供覆盖率指南,用于筛选新的测试用例以涵盖 DNN 的各种内部行为。因此,哪个测试标准更有可能保留OOD数据,哪个测试标准更有可能保留ID数据?
答:现有测试标准对生成数据的分布有不同影响。具体而言,KMNC、TKNC、NC和FANN标准倾向于减少OOD数据的比例,而NC和NBC标准倾向于增大OOD数据的比例。对于生成较多OOD数据的突变算子,覆盖测试标准会降低其生成OOD数据的比例;对于生成较少OOD数据的突变算子,覆盖测试标准会提高其生成OOD数据的比例。
研究建议3:可以构建一类以数据分布为基础的测试标准,生成更有针对性的测试用例。
问题4:ID 和 OOD 错误的根本原因估计以及稳健性增强?
测试生成的OOD数据和ID数据哪一类用于重训练模型可以更好地提高模型的鲁棒性?
答:ID错误数据可以通过模型结构微调来修正,而OOD错误数据则需要更多的训练数据来修正。用于重训练模型时,OOD错误数据提高模型鲁棒性的能力比ID错误数据平均高10.4%,但并非所有OOD错误数据都有益于模型泛化,不同类型OOD指标有不同效果。
研究建议4:OOD数据和ID数据的生成原因很关键。细粒度的数据分布情况研究可以为深度学习模型的效果提升提供指导。
五、总结:
本文对当前的OOD数据检测算法进行了较大规模的实证研究,以理解数据分布对深度学习测试相关技术的影响。结论有:
-
现有的OOD数据检测算法可以较好地从生成数据中检测出OOD数据;
-
不同的图像突变算子和测试标准对生成测试数据的分布情况有较大影响;
-
研究了ID数据与OOD数据对原模型鲁棒性增强能力的差别。