深度学习模型能够学习数据的统计模式特征,能够解决很多问题,但是需要很多数据。很典型的就是计算机视觉中的图形图像分类。数据标注的越多,效果越好。但是数据标注需要大量的人工,所以一般要来说,模型要落地,需要花很多的功夫。我们的出发点就是减少人工投入,增加人工投入的价值比。
我们将这个问题定义如下,假设开发者拥有无限的输入,但是都没有标注,只能选择标注其中k个数据。选择最有效的k个数据进行标注,就是我们提出的测试输入选择问题。有效性定义如下
我们的目标就是提供一个客观并且可以测量的方式来识别出有效的测试输入,来解决输入选择问题。我们可从一下两个方面来解决这个问题
我们通过运行实验来检测不同选择指标的准确性来回答这个问题,基于我们的结果测试者可以根据他们的目标 和上下文选择他们需要的指标参数。
LSA和DSA都是衡量不同聚类的密度和距离。本质上,任何能区分集群一致性的指标都可以用来选择测试样例。
Si
这个也是估计惊吓程度的一个参数,长处是稳定,并且范围有限[-1,1],LSA和DSA拥有上确界,没有下确界
Dropout Variance
dropout最初被提出来是为了防止模型过拟合,使用dropout层实现对于特定神经元的失活。经过数学证明可以用dropout计算x关于模型的不确定性。主要是通过将x传入模型k次,计算对应的预测概率的方差。虽然,预测的概率可以可视化为模型预测x和类别边界的距离,dropout方差表示我们的知识的不确定性对类边界的确切位置引起的这些距离的方差。
定义Variance指标,是用来定义x关于模型在所有类别上的方差的平均值,c是类别个数
缺点就是并没有考虑到预测的距离,目标类别的预测距离。为了克服这个问题,我们使用相关的别的参数,综合了最高分类概率maxP
MaxP Dropout Variance
KL
在研究了指标选择有效测试输入的充分性之后,下面是关注这些参数能够帮助改善模型训练的多少效果。换句话说,我们研究的是,如果我们使用基于这些指标选择的数据扩充数据集,能否使得模型的训练快速改良。为此,我们设置了一个迭代再训练过程,如图 1 所示。
首先,我们将原始训练集随机分成 10,000 张图像的初始训练集和包含剩余图像的候选集。测试集保持不变。在第一轮中,我们仅使用初始训练集训练模型并计算其在测试集上的准确性。在完成训练后,我们使用我们得到的最佳模型(在训练 epoch 上)来计算剩余候选数据的测试选择指标。
然后,我们将候选集中的 5,000 张新图像(由指标选择)添加到当前训练集中。所选图像是那些不确定性最高的图像(即 Si、KL 和 MaxP 的最低分数、Var 和 V arw 的最高分数)或惊讶(LSA 或 DSA)或覆盖率(即更高的 NC、ANC、KBNC、NBC 和 SNAC)。我们使用整个增强训练集从头开始重新训练模型,以保证收敛(MNIST 和 Fashion-MNIST 为 150 个 epoch,CIFAR-10 为 300 个 epoch),以便我们可以公平地分析不同的方法。
尽管增量训练(使用新数据重新应用当前模型上的训练算法)效率更高,但当前的实现(例如,在 scikit-learn1 中)表明增量训练会对最旧的数据产生偏差,因为训练算法(如随机梯度下降)随着时间的推移对新示例的重要性较低(由于学习率的降低)。如果新数据遵循与旧数据不同的分布,这种差异可能是显着的。因此,在假设较小的概念漂移时使用增量训练,而在无法做出这样的假设的情况下使用从头开始训练(或可能不成立)。这实际上是许多公司从头开始重新训练的原因[8]。然而,我们的实验的目的不是找到计算上的最佳方法来合并额外的训练样本,但为了确保通过以最详尽的方式合并额外的训练样本(以确保模型已经足够好地训练)产生最佳可能(即使差异很小)的结果。因此,为了避免做出这样的假设,我们遵循从头开始重新训练的保守方法,以确保新旧训练数据平等对待。
我们重复上述过程多次,直到候选集为空。在训练或者重复训练中,并没有使用任何测试集的数据。为了解释训练过程中的随机变化,我们重复整个实验三次,并且返回每一次模型的训练的所有的epoches的平均精确度。
为了评估每个指标的有效性,我们观察重复训练过程中的独立测试数据的验证损失和精确度的变化。有效的参数,在重复训练的过程中,损失快速下降,精确度快速增加。
之前的研究已经表明,我们所使用的模型准确度已经很高了,如果提高对应的模型准确度,会降低模型对于对抗样本的鲁棒性。为了检测这个,我们也计算所有模型的经验鲁棒性,这个也是通过输入测试图片尽心检测的。借此来查看这些参数在这个现象中存在妥协。
不同于实际数据,在对抗数据中,所有指标的相关性都更强了。在大部分的情况下,KL,Var,Varw,MaxP,Si和DSA都是强相关性,而LSA仅仅是中等相关性。总的来说,MaxP和KL的效果最好,无论那两种请宽都是最好的两种。至于基于NC的指标,相关性仍旧很弱,甚至时而正时而负。即使在逐个模型的基础上,也不会出现总体趋势。令人惊讶的是,NC 的性能优于 KMNC、NBC 和 SNAC,甚至在两个 WLeNet 模型上实现了中等/强的相关性。
尽管如此,相关性的整体强化可以解释为对抗性图像具有某种形式的人工噪声,分类器在训练期间从未经历过。这种噪音使得分类器对如何处理它们不太有信心,这是由指标反映的事实。我们还推断,对抗性数据不会形成评估测试选择方法的挑战性场景。鉴于对抗性图像被错误分类,指标可能比区分良好和错误分类的数据更适合区分对抗性和真实数据。
Well and Misclassified Adversarial Data正确和错误分类的对抗数据
图3是一个箱线图,专门用来描述概率分布的统计图。箱子中间的细线描述的是中位数,箱子描述上下边分别是对应的上四分位数和下四分位数。箱子之外的横线1.5倍四分位等间距的值,表示上下限。如果没有上下限,就是用最大值和最小值进行替换。点表示异常值。如果有上下限,就用上下限代替,然后外面的数据用点标记,表示异常点。
对于每一个指标,箱线图描述的是指标对于图片的评分和迭代次数的superman相关系数的统计学分布。基于不确定性和Suprise的指标是强相关性的指标能够获得强相关性,这些指标和迭代次数是近似线性关系的,能够很好地获得对抗数据的生成流程。相反的,基于NC的指标效果就很差,是呈现若相关性的
下述的系数越高说明相关性越强,说明系数能够有效反映出分类错误的现象
图片四展示了数据增强后,每一轮训练的达到的最佳准确度,训练数据是根据不同指标选择的5000个数据样本,初始的数据是10000个,然后逐次往里面增加10000个,直到50000都加进去了。这里需要注意一下,初始模型的精度已经很高了,所以每一次迭代提高的准确度就很少。
总体而言,我们看到基于不确定性和惊讶程度的指标效果要比NC好很多,而NC基本上和随机选择效果一样,起不到任何作用。
在第三轮数据增强的训练中,应用在WLeNet在数据集Fashion-MNIST上,Var比基于NC中最好的指标ANC要高上45%,虽然比起初始的模型的精确度仅仅增加了3%。
在应用于 CIFAR-10 和第三轮的 NetInNet 上,Var 的准确率比 ANC 提高了 20% 以上(+8.4% 对 +6.9%),而准确度从初始训练集增加到最终训练集增加了 +10.4%。当考虑验证损失时,我们观察到类似的结论。事实上,基于 NC 的指标导致下降较慢(类似于随机选择),这揭示了这些指标选择数据进行再训练的不恰当性。
除了迄今为止考虑的指标外,我们还使用了打破平局的方法增强了 Var 和 KL:当两个输入具有相同的 Var 或 KL 分数时,我们选择 MaxPscore 最低的输入。**有趣的是,这两个新指标(用 V arp 和 KLp 表示)进一步提高了 8 个模型中五个模型的准确性和四个模型中验证损失的减少。**总体而言,这些新指标比覆盖指标和随机选择提高了两倍的准确率。与其他不确定性指标相比,额外的增益并不显着,尽管它保留了存在的优点。因此,应该需要使用单个指标,KLp 和 V arp 将作为有效的选择出现。
对于每个模型和指标,我们计算了再训练轮次的经验稳健性的演变。总体而言,我们观察到无论考虑的模型和指标如何,鲁棒性分数在轮次上几乎没有变化。事实上,所有模型和指标的最大差距为 0.022,这是微不足道的。此外,我们不能推断在这方面,任何指标都比其他指标相对最佳或最差,因为变化不是单调的。因此,不确定性和基于惊喜的指标可以在不影响鲁棒性的情况下提高比基于覆盖率的指标的准确性。
基于不确定性和基于惊喜的指标,特别是打破平局的指标 KLp 和 V arp ,在选择重新训练输入方面是最好的,并且比随机选择快两倍。它们在没有鲁棒性显着变化的情况下实现这一点(<0.022)。
这段很重要,说明了当前的问题是和软件工程相关的
我们的实验主要是阐明了目前深度学习测试指标的选择测试输入的能力
从 DeepXExplore 开始,先前的研究主张使用NC神经元覆盖率,测试要激活更多的神经元,并且使用这个原则来生成测试数据。此外,在传统的软件工程中,覆盖指标(例如语句和分支覆盖率)通常用于指导测试生成/选择。因此,软件工程师也考虑 NC 进行 DL 系统中的测试选择是很自然的。
然而,与传统的(基于代码的)软件一样,为测试 DL 系统找到合适的停止标准仍然是一个悬而未决的问题。我们的结果表明,实现 100% 的 NC 并不能保证没有错误,就像在传统的软件中实现 100% 的语句覆盖率一样。
更糟糕的是,基于覆盖率的指标与错误分类的相关性较弱,有时比随机选择弱。这给社区带来了一条重要的信息:错误分类的输入不一定是那些涵盖新神经元的输入。总体而言,虽然基于覆盖率的指标是测试输入生成的方便的指导标准,但应该使用不同的指标进行测试选择。
至于其余的指标,我们的结果证明了新的发现。如果专门选择会被错误分类的测试样例时,模型输出的各个类别的概率是最好的指标,这个指标不受数据的影响,无论数据是原始数据,还是对抗数据。所以,在以后的研究中,我们可以使用这个简单的指标作为参考的基准,开发者也可以将其作为测试选择的指标。
说明提出的指标效果确实不错,另外一个就是可以使用drop 方差,这个是目前估计模型不确定度的最新的指标,可以之前的MaxP进行改良,效果更好
在选择输入对模型进行重新训练的过程中,我们发现将KL散度或者权重方差和最高类别概率进行组合之后的效果往往会更好。所以说,在选择输入进行测试的过程中,可以观察到不确定性指标的差别的
另外一个重要的发现是,KL散度之类的参数对于噪声很敏感,当处理的数据仅仅只有对抗数据时,这些参数分辨正确分类和错误分类的能力会下降。事实上,第 6.2 节的结果表明,将错误分类的对抗性数据引入测试集会产生不确定性指标和错误分类之间的更强相关性。这意味着对抗性示例比真实示例产生更多的不确定性。这是因为大多数对抗性算法旨在实现错误分类,同时最小化输入扰动。使模型对高置信度(低不确定性)模型的示例进行错误分类并不是这些算法的目标函数的一部分,尽管一些研究(例如 [10])表明这可能偶然发生。我们在第 6.2.1 节中的结果证实,由于它在迭代中引入的噪声增加,模型的不确定性在对抗算法的迭代上增加。
我们考虑了深度学习中很多基于模型不确定性的测试选择指标。我们将这些指标和神经元覆盖率和故障发现率两类指标进行比较,以此来发现他们发现模型故障的能力。
总的来说,我们的发现可以总结如下
我们的工作推动了深度学习系统测试进一步发展。这些自动数据选择指标有助于测试数据的系统和客观选择。这是衡量测试有效性的标准化方法。
各位老师,同学下午好,我是。。。。。。,我汇报的内容是Test Selection for Deep Learning Ssytems,主要针对深度学习系统中的测试。我将从一下五个部分讲述介绍我们的内容,分别是研究介绍、研究内容、研究方法、实验结果和总结。
首先从研究介绍开始,首先介绍两种常见的软件测试方法,一种是覆盖测试,左边的是条件覆盖的程序运行情况,常见的还有什么语句覆盖、组合覆盖等,这一类覆盖测试是以所有的语句或者条件都被覆盖为终止条件。第二种就是变异测试,这种测试是白盒测试,在代码中随机制造相关的操作,然后运行程序,看看有多少错误能够规避误差,顺利执行。这都是一般的软件工程中的测试环境,深度学习系统也是一种程序,针对深度学习系统的检测又有哪些?这篇文章就是专门针对深度学习系统中故障和缺陷检测。
深度学习用的已经很广泛了,但是因为模型的计算量大并且计算复杂,所以对于深度学习系统的检测就很少。常见的检测指标有三种,这里指的是缺陷和故障检测,并不是性能检测。
第一种是基于神经元覆盖率的,和常规软件工程中的覆盖测试差不多,检测数据覆盖了模型中多少神经元。默认就是数据集覆盖的神经元越多,数据集越好,模型的故障越少。所有神经元被覆盖,作为测试终止的条件。除此之外,基于NC的还有很多衍生的指标,比如说ANC,就是单纯针对某一个测试数据而言,在检测过程中,激活了哪些在训练集中没有激活的神经元。其他的还有KMNC等,都是基于神经元覆盖率。
第二种就是Surprise Adequacy,惊讶程度,这是通过比对神经元的激活差异集衡量数据集的效果。常见的有LSA,基于高斯核密度函数处理某一层神经元的激活值构成的向量。DSA使用距离函数来处理神经元激活值的。
第三种就是基于模型不确定性的指标,直白的说,就是模型对于测试样例的预测结果的不确定程度。最简单就是分类问题中的最大概率值,对应类别就是模型对于当前测试用例的分类。然后就是var指标,实在原有的模型中增加dropout层,这个和变异测试差不多,然后同一个样例 运行k次,计算各个模型预测的概率的方差。还有Varw是将前两者进行结合,以最大预测概率为权重,结合dropout方差。最后就是KL散度,这个是直接统计模型各个类别的预测概率分布和预测最坏概率分布的差异,越接近,模型的散度越低。KL散度是衡量两个分布之间的差异程度的。
这是目前已经有的深度学习检测指标,目前很多研究都是使用这些指标去生成对抗数据,来扩充数据集。先有研究去使用这些指标去帮助选择数据进行标注,减少人工的。而且这些指标和模型缺陷相关性是未知的。
这部分应该说一下目前研究的缺点在哪里?为什么需要展开我们的研究
这里纯纯是水的,因为明天就讲了,没啥时间了
DeepXplore是基于之前的神经元覆盖率,但是主要用于生成对抗数据,而且生成的数据尽可能地覆盖足够多神经元
DeepTest:是也是基于神经元覆盖率的,用于自动驾驶数据生成
DeepMutation:是计算变异分数的,使用dropout模拟神经失活,然后分别进行样例检测。
Surprise Adequacy:基于惊讶程度,因为任务并不能有效展示。。吗,主要是针对对抗数据的检测。
针对测试样例选的研究比较少
然后我们具体定义一下这篇文章想解决的问题,假设开发者拥有很多没有标记的高质量数据,只能标记其中的K个数据,如何选择K个数据,并通过测试,发现模型最多的缺陷。具体应用,体现在两方面。
解决这个问题的关键就是
这篇文章目标就是提供一个可靠有效的测试样例检测指标和流程。
作者使用了三个数据集,五个模型,分别使用之前提到的三类参数,解决上述两类问题。分别是。。。。自己看ppt介绍。这几个模型已经很成熟,而且准确度很高,再次基础上在进行大幅度提高已经很难了,这里是相对的小步幅提高。对抗样本在深度学习中常用来扩充数据集,为了检测各个参数对于对抗数据的区分度和敏感程度,这里使用5种对抗生成算法,对数据进行扩充。
第一部分实验就是检测各个指标在实际数据集上,选出来的测试用例效果如何。实验方法,首先计算测试集在模型处理之后的预测结果,然后转为二进制变量。然后计算各个指标对于所有测试样例的评分。最后计算各个指标对于测试集的评分和二进制变量的肯德尔相关系数。这个肯德尔相关系数是用来度量有序对象之间的单调关系强弱的相关系数。
实验说明,如果这个系数越大,说明指标的大小和模型分类错误的现象的相关性越大。
表2是分类错误现象和各个指标评分的肯德尔相关系数,可以看到基于不确定性指标KL散度、Var,Varw和MaxP,以及基于惊讶程度的LSA,DSA评分都比较高,是属于中等相关,而基于神经元激活占比的指标,相关性都比较差,说明神经元的激活占比,和分类错误现象相关性并不大,并不能用来指导测试数据的选择。
第二部分的实验,是针对对抗数据的指标检测。正常来说,在数据集有限的情况下,大部分都会使用对抗数据去增强数据集,增强样本就是在原始的数据集上增加扰动,形成新的数据集,这里为了检测各个指标对于对抗数据的识别能力,这里专门测试各个指标对于在原始的数据集下,增加了新的对抗数据集之后的与错分类现象的相关性。
本文分别使用五种对抗生成算法,生成五个不同的数据集,每一个数据集都混合了原始的数据集,然后在计算五个数据对应不同指标评分和错误分类的肯德尔相关系数,来衡量各个指标的在对抗数据集下的故障检测能力,降至绘制成热力图。
这个是实验结果,原图中总共有5个数据集,这里挑选了FGSM和CW两个算法生成的对抗数据进行展示,颜色越淡,相关性越强,说明指标越错误分类的相关性越强。可以看到,所有的指标相较于单纯的真实数据,相关性都有增加,其中MaxP的相关性最强,其次就是Varw。基于NC的指标,相关性仍旧很差。
上述实验仅仅是验证了真实数据和对抗数据的混合,本书有附加了一部分实验,测试所有指标在对抗数据集上的敏感程度。从原始数据集中选出子集,然后迭代使用对抗生成算法,生成对抗数据,迭代的次数越多,生成的对抗样本噪声就越多,分类错误的概率越大。如果指标对着迭代次数的变化,是单调的,说明指标发现的数据有效性越强。所以这里使用spearman相关系数,来度量这两个连续变量的单调关系的强弱,并将结果化成对应的箱线图。
实验结果如下。左边是使用CW生成算法进行迭代的实验结果,右边是使用FGSM算法进行迭代的实验结果。箱线图中间的是分布的中位数,然后上下两边是四分位数,然后点是异常值。可以从侧面证实NC并没有分类错误现象有直接的关系,或者说先关心并不强,而基于不确定性的指标,尤其是MaxP相关性仍旧很强。
除此之外,这里还对单纯地使用对抗数据重复了一下实验一。MaxP仍旧很稳定,KL和Var等是受到了对抗数据的影响,相关性有所下降。
第三部分实验主要是针对问题二,选择能够让模型快速提高的测试数据。使用各个指标迭代选数据集,扩充训练集,重复训练,查看模型的改练效果。具体流程如下。自己看着图片讲。。。。
实验结果如下,总共是八张图,这里就放了四张图,虚线是基于NC的指标,进行选择的样本的训练精度,然后实现是基于不确定度和SA的,可以看到,根据指标选出的数据集,确实能够快速提高模型的训练的准确度。
最后做一个总结,就是基于不确定性的指标,确实能够选择出模型会分类错误的,信息量跟高的测试数据。本文的主要贡献一下三部分。