神经网络算法的参数类型(基于变异分析的深度神经网络测试输入的优先级排序)
神经网络算法的参数类型(基于变异分析的深度神经网络测试输入的优先级排序)2.1DNN和DNN测试2背景及相关工作DNN 测试是保证 DNN 质量最广泛使用的方法之一。在文献中,大多数 DNN 测试的研究集中于提出各种度量指标来衡量测试输入的充分性。然而,除此之外,在 DNN 测试领域还有另一个关键的挑战——标记测试输入来检查 DNN 预测的正确性是非常昂贵的,这将在很大程度上影响 DNN 测试的效率,甚至影响 DNN 开发的整个过程。造成标签成本问题的原因有三方面:1)测试集规模大;2)标注方式以手工分析为主,多人为一个测试输入进行标注,以保证标注的正确性;3)贴牌通常需要专业知识,这使得雇佣专业人员贴牌成本更高。为了解决这个问题,对测试输入进行优先排序是很直观的,这样那些更有可能被被测试 DNN 错误预测的测试输入(也称为 bug 暴露测试输入)就可以更早地被标记出来。现有的方法要么存在有效性问题,要么应用场景有限。为了进一步提高 DNN 的测试输入优先排序
摘要
测试深度神经网络(DNN)是保证 DNN 质量最常用的方法之一。然而,标记测试输入来测试 DNN 具有很大的代价,这可能在很大程度上影响 DNN 测试的效率,甚至影响 DNN 开发的整个过程。为了解决标记成本的难题,我们提出了一种新的基于智能变异分析的 DNN 测试输入优先排序方法(PRIMA),以便在有限的时间内更早地标记出更多的 bug,从而提高 DNN 测试的效率。PRIMA 的核心思想是:一个测试输入能够杀死许多变异模型,并在许多变异输入下产生不同的预测结果,那么他更有可能使 DNN 的 bug 暴露出来,因此它应该被优先考虑。我们对 36 对数据集和 DNN 模型组成的研究对象进行了研究,考虑了它们在五个方面的多样性(即不同的测试输入域、不同的 DNN 任务、不同的网络结构、不同类型的测试输入、不同的训练场景)。我们的实验结果证明了 PRIMA 的有效性,显著优于目前最先进的方法(平均提高 8.50% ~ 131.01%的优先级有效性)。
1介绍
近年来,深度神经网络(DNNs)在自动驾驶汽车、人脸识别、语音识别、医学诊断和软件工程等领域取得了巨大的成功。然而不幸的是,像传统软件一样,DNN 也包含 bug。由于 DNN 的广泛使用和重要性,DNN 错误在实践中可能导致严重的后果,甚至在安全关键领域的灾难。
DNN 测试是保证 DNN 质量最广泛使用的方法之一。在文献中,大多数 DNN 测试的研究集中于提出各种度量指标来衡量测试输入的充分性。然而,除此之外,在 DNN 测试领域还有另一个关键的挑战——标记测试输入来检查 DNN 预测的正确性是非常昂贵的,这将在很大程度上影响 DNN 测试的效率,甚至影响 DNN 开发的整个过程。造成标签成本问题的原因有三方面:1)测试集规模大;2)标注方式以手工分析为主,多人为一个测试输入进行标注,以保证标注的正确性;3)贴牌通常需要专业知识,这使得雇佣专业人员贴牌成本更高。
为了解决这个问题,对测试输入进行优先排序是很直观的,这样那些更有可能被被测试 DNN 错误预测的测试输入(也称为 bug 暴露测试输入)就可以更早地被标记出来。现有的方法要么存在有效性问题,要么应用场景有限。为了进一步提高 DNN 的测试输入优先排序性能,本文提出了一种基于变异分析的 DNN 测试输入优先排序方法,即 PRIMA (intelligent mutation analysis)。PRIMA 的主要见解有两方面:1)如果一个测试输入可以杀死许多变异的模型,表明测试输入可以充分测试模型,测试输入更有可能揭示款 bug。这反映了测试输入对被测 DNN 模型的探索程度。2)在 DNN 上,如果有多个变异测试输入,通过对原测试输入进行轻微改变,得到的预测结果与原测试输入不同,说明模型利用了测试输入的大量信息,测试输入对捕获 DNN bug 更加敏感。
在本文中,PRIMA 结合学习排序 (一种用于解决排序问题的监督机器学习)来建立一个排序模型,该模型通过智能学习如何利用不同 DNN 模型的变异结果来有效地对测试输入进行排序。基于 PRIMA 的优先级排序结果,可以更早地标记出漏洞暴露测试输入,从而极大地提高 DNN 测试的效率,有效地缩短 DNN 开发周期。
2背景及相关工作
2.1DNN和DNN测试
DNN 由许多层组成,每层包含大量的神经元。层与层之间的神经元通过链接连接,每个链接都有一个权重。通过基于训练数据的训练过程来学习这些权重。一般来说,DNN 分为卷积神经网络(Convolutional Neural Network, CNN)和递归神经网络(recurtional Neural Network, RNN)。
DNN 测试是保证 DNN 质量最广泛使用的方法之一。在 DNN 测试中,测试输入是指被测 DNN 模型预测的输入,根据不同的领域可以有不同的形式(如图像和文本)。关于 DNN 测试中的测试输入,每个测试输入都需要手工标注其 ground truth。然后,通过比较标记的 ground truth 和预测结果,可以确定模型预测的测试输入是否正确。
2.1DNN测试的输入优先级
在文献中,针对 DNN 的标签成本问题提出了几种测试输入优先排序方法。例如,最先进的方法是 DeepGini,它通过测量 DNN 对每个测试输入进行分类的置信度来对测试输入进行优先排序。此外,Byun et al.建议使用更高级的度量,包括 LSA 和 DSA,以优先排序 DNN 的测试输入。LSA 指意外的测试输入对每个激活值的估计密度在一组训练数据的激活的痕迹,而 DSA 是由之间的欧氏距离定义激活跟踪测试输入训练数据和一组激活的痕迹。基于意外的测试输入优先级排序将具有更大的意外充分性值的测试输入优先级更高。与他们不同的是,我们的工作提出了 PRIMA,一种新的更有效的测试输入排序方法,通过变异分析和学习排序。
2.2 传统软件的基于变异的测试优先级
在传统软件的测试优先级排序领域,提出了几种基于变异的测试优先级排序方法。例如,Lou 等人提出根据每个测试杀死的变异错误的数量对测试进行排序。Shin 等人的也评估了多目标基于变异的测试优先级排序的性能,该方法通过考虑杀死的变异错误和区分变异错误来对测试进行优先级排序。我们提出的 PRIMA 方法与它们的主要区别在于:1)PRIMA 既考虑对被测 DNN 模型进行变异,也考虑对测试输入进行变异,而传统的基于变异的测试优先级方法主要是对被测软件进行变异。2) DNN 模型具有与传统软件不同的特征,具有完全不同的变异规律。3) PRIMA 结合了学习到排序,智能地利用变异结果进行测试输入的优先排序,这是传统的基于变异的方法所不采用的。
3方法
为了解决标签成本问题,我们提出了一种新的测试输入优先化方法,称为 PRIMA。PRIMA 包括三个步骤:
1)设计一系列模型变异规则和输入变异规则,PRIMA 得到每个测试输入的变异结果;
2) PRIMA 从每个测试输入的这些变异结果中提取一组特征,以便有效地利用这些变异结果对测试输入进行排序;
3) PRIMA 采用学习到排名的框架,构建一个能够利用提取的特征对测试输入进行排序的排名模型。
图 1 显示了 PRIMA 的概述。
图 1: PRIMA 概述
3.1变异规则
在 PRIMA 中,我们基于上述关键见解设计了两类变异规则,即:,模型变异和输入变异。模型变异是对被测 DNN 模型稍加改变,产生变异模型。如果一个测试输入在原始模型和变异模型之间产生了不同的预测结果,我们认为测试输入杀死了变异模型,说明测试输入有效地测试了轻微变异的部分。输入变异为稍微更改测试输入以产生变异的测试输入。如果原始测试输入与变异测试输入之间的微小差异导致被测模型的预测结果不同,则说明变异部分被模型有效利用,并对模型有贡献。
1)模型变异规则:神经元和权值是 DNN 的基本元素。因此,在现有工作的基础上,我们设计了四个模型变异规则如下:
•神经元激活反转(NAI):通过改变神经元输出的符号,将其传递给激活函数,反转神经元的激活状态。
•神经元效果阻断(NEB):通过设置下一层的神经元权重为 0 来阻断下一层的神经元效果。
•高斯模糊(GF):增加噪声到一个神经元的权值高斯分布 N(µ,δ2).如果 δ 较大,则附加噪声较大,容易产生无效模型。因此,我们设 µ 为 0,δ 为 0.1。
•权重交换(WS):将一个神经元的权重与前一层进行交换。
PRIMA 的目标是微小地改变被测试的模型,因为 1)很大程度上改变模型可能产生无效的模型;2)轻微的变异更适合模拟真实的 bug;3)轻微变异有助于了解每个测试输入对模型中哪些部分进行了有效测试。因此,PRIMA 不是改变所有的神经元/权重,而是对每个变异随机抽样 x%的神经元/权重。
2)输入变异规则:DNN 的测试输入在不同的领域可以有不同的形式,如图像、序列数据和预定义的特征(如传统机器学习的输入)。为了设计一个通用和实用的方法,PRIMA 应该能够处理测试输入的各个领域。本文中,PRIMA 考虑了三个流行的领域,包括图像、序列数据和预定义的特性,由于这三个域之间存在显著差异,我们根据它们各自的特点分别设计了输入变异规则。
•图像变异规律:
—Pixel Gauss Fuzzing (PGF):为选择的像素添加噪声,高斯分布 N(µ,δ2).这里,我们设 µ 为 0,δ 为 0.8。
—像素拖曳(PS):对选择的像素进行拖曳。
—CPW (Coloring Pixel White):使所选像素变为白色。
—CPB (Coloring Pixel Black):使所选像素变为黑色。
—像素颜色反转(PCR):将所选像素的颜色反转。
•文本变异规则:
—CS (Character Shuffling):将选定的字符打乱。
—CRL (Character Replacement):将选中的字符替换为从整个字符集中随机选择的字符。
—重复字符(CRE):重复所选字符。
•预定义的功能变异规则:
—离散值替换(Discrete Value Replacement, DVR):将选取的特征值替换为从整组离散值中随机选取的其他值。
—连续值修改(CVM):随机增加或减少所选特征值的 e%。为了稍微改变测试输入,我们将 e 设为 10。
3.2特征提取
在获得每个测试输入的变异结果之后,接下来的问题是如何有效地利用这些变异结果对测试输入进行排序。在本小节中,我们介绍了 PRIMA 中的特征提取步骤。
给定一组测试输入 T = {t1,t2,…ts},为测试 M 下的分类模型,包含 g 个类(记为 C = {c1,c2,…cg}),变异规则(记为 R) MR = {M1R,M2R,...,MmR},一组变异输入 tk 通过变异规则(记为 r) TRK = {trk1,trk2,…trkn},用 tk 表示在 M 上的预测概率 P[tkM] = {p[tkM]1,p[tkM]2,...,p[tkM]g},P[tkMjR] = {p[tkMjR]1, p[tkMjR]2, ...,p[tkMjR]g}。
因为回归模型输出一个数字而不是一个类(带有类概率的列表),所以我们不能提取 F1 等特性,但只有提取特征的差异程度的预测结果为每个测试输入,包括 1)预测结果的平均差异之间的原始模型和输入和每个变异的变异体的规则,在预测结果的差异是绝对的区别,和 2)为每个变异规则分布的差异,我们首先正常化的差异[0,1]根据被测试的回归模型的输出范围,然后分裂 10 等分在[0,1]区间,最后数变异体的数量在每个时间间隔根据他们的归一化差异。
3.2基于“学习排名”的排名模型构建
基于特征集,PRIMA 构建一个学习到排名的训练集,其中每个实例都是待测试 DNN 模型的输入。对于每个实例,PRIMA 从其对应的变异结果中提取上述特征,并根据被测模型预测输入是否错误,将其标记为 0 或 1 作为分类模型。对于回归模型,PRIMA 将每个实例标记为其预测结果与 ground truth 之间的绝对差异,差异越大,在某种程度上表明揭示 bug 的可能性越大。然后,PRIMA 对特征进行归一化,将不同尺度上的测量值调整到一个共同的尺度上。由于所有特征都是数值类型,PRIMA 使用最小-最大值归一化将这些特征的每个值归一化为[0,1]。假设训练实例集记为 A = {A1,一个 2,…,一个 u},特征集记为 F = {f1,f2,…fv},我们使用 xij 表示特征 f 的值 j 对于实例 ai 然后使用 x∗ij 表示特征 f 的值 j 对于实例 ai 经过标准化(1≤i≤u, 1≤j≤v)后,公式 1 给出了标准化过程。
获取训练集处理后,表面上采用 learning-to-rank 的框架,这是一种监督机器学习和解决排名问题得到了广泛的应用在许多领域如文档检索搜索和专家,构建一个排名优先测试输入模型。这样就可以智能地利用变异结果,使不同模型的排序效果最佳。
3.2PRIMA的用法
基于排名模型,PRIMA 对测试集中的每个测试输入预测一个分数,然后根据其分数降序排列所有这些测试输入的优先级。特别是在通过排序模型进行预测之前,还需要从测试集中每个测试输入对应的变异结果中提取特征。
在 PRIMA 的实际使用过程中,我们使用待测 DNN 模型的验证集作为训练集,通过学习到排名,建立排名模型。然后利用该排序模型对 DNN 模型的各个测试集进行排序。
4实验研究设计
在本研究中,我们解决了两个研究问题。RQ1 是比较 PRIMA 与现有方法的有效性。此外,为了进一步解释 PRIMA 的有效性,我们分析了我们提取的特征对 PRIMA 整体有效性的贡献。RQ2 是研究 PRIMA 的效率。并对如何进一步提高其效率进行了探讨。
在我们的研究中,我们使用 36 对数据集和 DNN 模型作为研究对象。基本情况见表一。特别是为了充分评价 PRIMA 的有效性,我们从 1)不同的测试输入域,2)DNN 模型的不同任务,3)DNN 模型的不同网络结构,4)不同类型的测试输入,5)不同的培训场景等五个维度仔细考虑了被试的多样性。据我们所知,这是该领域最大规模、最多样化的研究。
表 1 参与测试数据集基本信息
4.1结果与分析
1) RQ1: PRIMA 的有效性:我们首先研究 PRIMA 的优先级有效性。
•整体有效性。我们将所有受试者的总体比较结果列于表二。由于 DeepGini 和 DSA 不能直接应用于回归模型中,我们将分类模型和回归模型的总体比较结果分别呈现出来。在 180 例(36 名受试者* 5 指标)中,PRIMA 表现最好,占 94.44%(180 例中的 170 例),Deepgini 表现最好,占 5.56%(180 例中的 10 例),而 LSA 和 DSA 在任何情况下都不能表现最好。在所有使用指标上,PRIMA 对分类模型的平均结果为 0.868 ~ 0.919,与 DeepGini 相比平均改进 8.50% ~ 18.24%,与 LSA 相比平均改进 34.16% ~ 57.17%,与 LSA 相比平均改进 27.29% ~ 40.23%。在回归模型上,PRIMA 的平均结果为 0.779 ~ 0.808,较 LSA 的平均改善幅度为 17.27% ~ 131.01%。结果验证了 PRIMA 算法的有效性。
表 2:总体结果比较
•测试输入的不同领域的有效性。表 III 显示了 PRIMA 在测试输入的不同领域(即。、图像、文本和预定义功能)。我们发现,PRIMA 在所有三个领域的各种指标方面优于所有比较的方法。特别是,这也是第一次在文本和预定义特性领域研究这些比较方法。我们发现 PRIMA 在文本域的 RAUC-100 平均提高 39.17%、321.68%和 47.99%,显著优于 DeepGini、LSA 和 DSA。此外,在预定义特征域,PRIMA 的 RAUC-All 平均值为 0.966,而 DeepGini 和 DSA 的 RAUC-All 平均值分别为 0.743 和 0.730。结果表明,PRIMA 在各个领域都具有稳定的有效性。
表 3:测试输入的不同领域比较
•污染培训和迁移学习的有效性。在本文中,我们首先在两个实际场景中研究了这些方法,即。,污染训练和迁移学习场景,其结果如表 4 所示。我们发现 PRIMA 在两种训练场景的所有指标方面都大大优于所有比较的方法。在污染训练场景中,PRIMA 在所有这些指标上的平均结果范围为 0.983 - 1,而 DeepGini 的平均结果范围仅为 0.443 - 0.583。在迁移学习情景中,PRIMA 在所有指标上的平均结果为 0.859 - 0.919,而 DeepGini 的平均结果仅为 0.740 - 0.849。结果证实了我们在第一部分的主张,证明了 DeepGini 的假设在两个实际场景中是站不住脚的,尤其是污染训练场景。结果进一步证明了 PRIMA 在各种实际场景下的稳定有效性。
表 4:污染学习与迁移学习的比较
•不同类型测试输入的有效性。我们进一步研究了 PRIMA 对不同类型测试输入的有效性。从表 5 可以看出,PRIMA 在四个测试集的所有方法中,在各种指标方面表现最好。特别是,PRIMA 的 RAUC-100 值分别达到 0.977、0.988、0.972 和 0.981,表明 PRIMA 对不同类型的测试输入具有稳定的有效性。
表 5:不同类型测试输入的比较
2) RQ2: PRIMA 的效率:我们在表 6 中调查了 PRIMA 的效率。由于 DeepGini 和 DSA 不能应用于回归模型,我们比较了这些方法在所有分类受试者上的效率(受试者 34 ~ 36 不包括在第 IV-B 节中解释的 LSA 中)。PRIMA 用于测试优先级排序的平均时间为 10.1 分钟,而 DeepGini 仅为 0.1 分钟。虽然 PRIMA 的效率不如 DeepGini,但 PRIMA 的成本是相对于手工贴标的耗时和昂贵,我们的行业合作伙伴在第五节已经确认了这一点,在实践中仍然可以接受。
表 6:所有图像分类主题平均贡献的前 10 个特征
实际上,进一步提高 PRIMA 的效率是有希望的。如表 6 所示,从总体上看,一些变异规则(如 NEB 和 NAI)对 PRIMA 有效性的贡献倾向于大于其他规则,说明它们在一定程度上对 PRIMA 的影响不同。因此,如果我们只保留在 PRIMA 中做出更多贡献的变异规则,PRIMA 的有效性会受到轻微的影响,但其效率会得到很大的提高。
5 结论
为了解决 DNN 测试中的标记成本问题,我们提出了一种新的测试输入优先级排序方法,称为 PRIMA,以优先级更高的错误揭示测试输入。PRIMA 基于变异分析和学习到排名。它的见解是,一个测试输入可以杀死许多变异模型,并通过许多变异输入产生不同的预测结果,更有可能揭示 DNN 的 bug,因此它应该有更高的优先级进行标记。PRIMA 通过我们设计的模型和输入规则获得大量的变异结果后,结合学习到排序的方法,智能地组合这些变异结果,建立排序模型,进行测试输入的优先级排序。我们对 36 个不同的受试者的结果证明了 PRIMA 的有效性,它显著优于最先进的方法。此外,PRIMA 已在某大型汽车公司自动驾驶汽车的实际测试中得到应用,对 4 个行业课题的测试结果进一步证明了其在实践中的有效性。
致谢
本文由南京大学软件学院 2021 级硕士刘凡翻译转述,刘佳玮审核。