Machine Learning Testing: Survey ,Landscapes and Horizons
文章目录
介绍
论文标题
- Machine Learning Testing: Survey , Landscapes and Horizons
- 机器学习测试:综述、前景与视野
- 2019.12
- Jie M. Zhang*, Mark Harman, Lei Ma, Y ang Liu
本篇论文没有重点强调神经网络的攻击与防御,想了解这方面可以看这篇Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey
论文翻译,转载博客请联系作者
摘要
文摘-本文对机器学习系统的测试技术进行了全面的综述;机器学习测试(ML Testing)的研究。它涵盖144篇关于测试属性(例如,正确性、健壮性和公平性)、测试组件(例如,数据、学习程序和框架)、测试工作流程(例如,测试生成和测试评估)以及应用场景(例如,自动驾驶、机器翻译)的论文。文章还分析了数据集的发展趋势、研究趋势和研究热点,总结了ML测试面临的研究挑战和未来的研究方向。
简介
- 机器学习测试正在成为一个越来越火热的领域,下图表示了机器学习测试论文发表的数量
-
机器学习系统作为软件系统,其问题的某些方面与软件工程文献中已经广泛研究的众所周知的解决方案是相同的,但机器学习系统的统计性质及其自主决策的能力为软件测试提出了额外的、具有挑战性的研究问题
- 机器学习系统本质上遵循数据驱动的编程范例,其中决策逻辑是通过机器学习算法体系结构下的训练数据的训练过程获得的[8]。该模型的行为可能会随着时间的推移而演变,以响应新数据的频繁提供[8]。虽然传统软件系统也是如此,但传统系统的核心底层行为通常不会像机器学习系统那样,随着新数据的变化而改变。
- 机器学习系统很难测试,因为它们被设计成为以前没有答案的问题提供答案
- 只有将机器学习系统作为一个整体来考虑才能完全理解其感兴趣的行为,这使得测试变得更加困难,因为如何将系统拆分成可以作为单元单独测试的较小组件就不那么明显了。从测试的角度来看,这种新出现的行为有将测试挑战从单元级别迁移到集成和系统级别的趋势。例如,机器学习模型的低精确度/精确度通常是由不同组件(如训练数据、学习程序甚至学习框架/库)的行为组合引起的综合效应[8]。
- 错误可能会传播到放大或抑制,从而抑制测试人员确定故障所在位置的能力。这些挑战也适用于更传统的软件系统,但这些问题在机器学习系统中影响深远,因为它们产生于机器学习方法的性质,并从根本上影响所有行为,而不是作为传统数据和控制流的副作用而产生
-
Machine Learning Testing’ (ML testing) :任何旨在检测机器学习系统现有行为和所需行为之间的差异的活动
ML测试不同于使用机器学习的测试方法,也不同于那些由机器学习指导的测试方法,这些测试方法应该被称为基于机器学习的测试。此命名法与软件工程文献中以前的用法一致。例如,文献使用术语“基于状态的测试”[16]和“基于搜索的测试”[17]、[18]来指利用状态和搜索空间概念的测试技术,而我们使用术语“GUI测试”[19]和“单元测试”[20]来指解决测试GUI(图形用户界面)和代码单元的挑战的测试技术
综上所述,本文主要做了以下几个方面的工作:
-
Definition本文定义了机器学习测试(ML Testing),综述了与机器学习测试相关的概念、测试流程、测试特性和测试组件。
-
Survey这篇论文提供了对144份机器学习试卷的全面调查,涉及软件工程、人工智能、系统与网络和数据挖掘等不同出版领域。
3)Analyses. 本文分析和报告了有关机器学习测试文献的研究分布、数据集和趋势的数据。我们注意到研究努力的分布明显不平衡:在我们收集的144篇论文中,大约120篇涉及监督学习测试,其中3篇涉及非监督学习测试,只有1篇论文测试强化学习。此外,它们中的大多数(93篇)集中在正确性和健壮性上,但只有几篇论文测试可解释性、私密性或效率。
4)Horizons本文指出了ML测试面临的挑战、存在的问题和有前途的研究方向,旨在促进和促进进一步的研究。
文章结构如下图所示
机器学习概论
机器学习
-
基本定义
Dataset,Learning program,Framework,Instance,Feature,Label,Test error, Generalisation error,Model
-
分类
- Supervised learning,Unsupervised learning,Reinforcement learning
- classic machine learning ,deep learning
-
用途
Classification,Regression,Clustering,Dimension reduction,Control
都是很常见的术语
机器学习测试
包括测试工作流(如何测试)、测试属性(测试内容)和测试组件(测试位置)。
定义
Definition 1 (ML Bug) ML bug指的是机器学习项目中导致现有条件和所需条件不一致的任何缺陷。
Definition 2 (ML Testing) 机器学习测试(ML测试)指的是任何旨在揭示机器学习错误的活动。
ML测试工作流
ML测试工作流是关于如何针对不同的测试活动进行ML测试。
测试在ML开发中的作用
机器学习系统的生命周期如下图所示,关注离线测试与在线测试:
ML测试工作流
直接看图很清晰明了,下列文字只是详细描述流程
离线测试
离线测试的工作流程如图5的顶部虚线矩形所示,开发人员一开始需要进行需求分析,定义用户对被测机器学习系统的期望。在需求分析中,分析了机器学习系统的规格说明,规划了整个测试流程。在此之后,测试输入要么从收集的数据中采样,要么基于特定目的生成。然后识别或生成测试预言(有关机器学习中测试预言的更多详细信息,请参见第5.2节)。当测试准备好后,需要执行它们以供开发人员收集结果。测试执行过程涉及使用测试构建模型(当测试是训练数据时)或针对测试运行构建的模型(当测试是测试数据时),以及检查是否违反了测试预言。在测试执行过程之后,开发人员可以使用评估指标来检查测试的质量,即测试暴露ML问题的能力。
在线测试
图5的底部显示了在线测试的工作流程。针对不同的目的,有不同的在线测试方法。例如,运行时监视会不断检查正在运行的ML系统是否满足要求,或者是否违反了一些期望的运行时属性。另一个常用的场景是监视用户响应,基于此来确定在某些应用上下文中新模型是否优于旧模型。A/B测试是此类在线测试的一种典型类型[43]。它将客户分开以比较系统的两个版本(例如,网页)。在ML系统上进行A/B测试时,抽样的用户会被分成两组,分别使用新旧ML模型。
MAB(Multi-Armed Bandit)是另一种在线测试方法[44]。它首先进行短时间的A/B测试,找出最佳的模型,然后在选择的模型上投入更多的资源。
ML测试组件
下图显示了构建ML模型的基本过程以及该过程中涉及的主要组件。
机器学习模型的开发过程需要与数据、学习程序、学习框架等多个组件进行交互,而每个组件都可能包含错误。因此,在进行ML测试时,开发人员可能需要尝试查找每个组件中的bug,包括数据、学习程序和框架。特别是,错误传播是一个更严重的问题,ML开发,因为组件之间的联系比传统软件更紧密[8],这表明测试每个ML组件的重要性。下面我们将介绍每个ML组件中的bug检测:
Bug Detection in Data机器学习系统的行为在很大程度上取决于数据[8]。数据中的错误会影响生成的模型的质量,并且可能会被放大,在一段时间内产生更严重的问题[45]。数据中的错误检测检查诸如数据是否足够用于训练或测试模型(也称为数据的完整性[46])、数据是否代表未来数据、数据是否包含大量噪声(例如有偏见的标签)、训练数据和测试数据之间是否存在偏差[45]、以及是否存在可能影响模型性能的数据中毒[47]或敌意信息等问题。
Bug Detection in FrameworksML框架测试检查机器学习的框架是否有可能导致最终系统出现问题的错误[48]。
Bug Detection in Learning Program. 学习程序可以分为两个部分:由开发人员设计或从框架中选择的算法,以及开发人员为实现、部署或配置算法而编写的实际代码。学习程序中可能会出现错误,这可能是因为算法设计、选择或配置不正确,或者是因为开发人员在实现所设计的算法时犯了 错误。
ML测试属性
测试属性指的是在ML测试中要测试的内容:ML测试需要保证训练好的模型满足哪些条件。本节列出了文献中考虑的一些典型属性。我们将它们分为基本功能需求(即正确性和模型相关性)和非功能需求(即效率、健壮性、公平性、可解释性)。
在考虑根本原因时,这些属性并不是严格相互独立的,但它们是ML系统行为的不同外部表现,在ML测试中应该单独对待。
正确性
正确性度量被测试的ML系统“正确”的概率。
Definition 3 (Correctness) 设D是未来未知数据的分布。设x是属于D的数据项,h是我们所在的机器学习模型测试。h(X)是x的预测标号,c(X)是真实标号。模型正确性E(H)是h(X)和c(X)相等的概率:
Definition 4 (Empirical Correctness). 设X=(x1,…,xm)是从D采样的未标记测试数据集,h是被测机器学习模型。设y0=(h(X1),.,h(Xm))是对应于每个训练项目Xi的预测标签集合。设Y=(y1,.,ym)为真标号,其中每个yi∈Y对应于Xi∈X的标号,模型的经验正确性(记为ˆE(H))为:
其中i是指示器函数
就是精度或准确率
模型相关性
算法容量表示机器学习模型可以选择的函数的数量(基于手头的训练数据)作为可能的解决方案。对于分类任务,它通常用VC维[52]或Rademacher复杂度[53]来近似。VC维是算法可以破坏的最大点集的基数。Rademacher复杂度是算法破坏的具有固定特征的最大训练数据集的基数。
我们将机器学习算法能力与数据分布之间的相关性定义为模型相关性问题。
Definition 5 (Model Relevance). 设D为训练数据分布。设R(D,A)是任意机器学习算法A对D所需的最简单容量,R0(D,A0)是待测机器学习算法A0的容量。模型相关性是R(D,A)与R0(D,A0)之间的差值。
应该跟过拟合欠拟合类似
鲁棒性
Definition 6 (Robustness). 设S是一个机器学习系统。设E(S)是S的正确性,δ(S)是对任何机器学习组件(如数据、学习程序或框架)具有扰动的机器学习系统。机器学习系统的健壮性是对E(S)和E(δ(S))之间差异的度量:
Katz等人的工作之后。[57]将对抗稳健性分为局部对抗稳健性和全局对抗稳健性。
Definition 7 (Local Adversarial Robustness). 设x是ML模型h的测试输入,x0是通过对x进行对抗性扰动而产生的另一个测试输入,如果对任意x0,模型h在输入x处是δ局部鲁棒的。
局部对抗稳健性指的是某一特定测试输入的稳健性,而全局对抗稳健性衡量的是针对所有输入的稳健性。
Definition 8 (Global Adversarial Robustness). 设x是ML模型h的测试输入,x0是通过对x进行对抗性扰动而产生的另一个测试输入,如果对任意x和x0,模型h是
全局鲁棒的。
安全性
ML系统的安全性是指系统对通过操纵或非法访问ML组件而造成的潜在伤害、危险或损失的恢复能力。
安全性和健壮性密切相关。具有低鲁棒性的ML系统可能是不安全的:如果它在抵抗要预测的数据中的扰动方面的健壮性较差,系统可能更容易成为对抗性攻击的受害者;然而,健壮性低只是安全漏洞的一个原因。除了扰动攻击,安全问题还包括模型窃取或提取等其他方面。
数据隐私
机器学习中的隐私是ML系统保存私有数据信息的能力。对于形式定义,我们使用从Dwork[58]的工作中获得的最流行的差异隐私。
Definition 9 (
-Differential Privacy). 设A是一个随机算法。设D1和D2是仅在一个实例上不同的两个训练数据集。设S是A的输出集的子集,A满足
差分隐私的条件为:
换言之,差分隐私是响应单个输入变化时对输出变化的一种包含界限。它提供了一种方法来了解任何一个人的数据是否具有显著的影响(以
为界)。对结果的判断。
数据隐私方面不是很懂
效率
机器学习系统的效率指的是它的构造或预测速度。当系统在构建或预测阶段执行缓慢甚至无限时,就会出现效率问题。
随着数据的指数增长和系统的复杂性,效率是模型选择和框架选择要考虑的一个重要特征,有时甚至比准确性更重要[61]。例如,为了将大型模型部署到移动设备,可以执行优化、压缩和面向设备的定制,以使其在合理的时间内对移动设备执行是可行的,但是为了实现这一点可能牺牲准确性。
公平性
然而,人类可能对认知有偏见,进一步影响收集或标记的数据和设计的算法,导致偏见问题。
敏感且需要针对不公平进行保护的特征被称为受保护特征[62]或受保护属性和敏感属性。法律承认的受保护类别的例子包括种族、肤色、性别、宗教、国籍、公民身份、年龄、怀孕、家庭状况、残疾状况、退伍军人状况和遗传信息。
公平性通常是特定于领域的。受监管的领域包括信贷、教育、就业、住房和公共住宿
可解释性
对人类来说,理解最终决策背后的“逻辑”可能很重要,这样他们就可以对ML[64]、[65]、[66]做出的决策建立信任
可解释性包含两个方面:透明性(模型如何工作)和事后解释(可以从模型派生的其他信息)[64]。
软件测试VSML测试
传统软件测试和ML测试之间的主要区别如下表所示
1)Component to test(可能存在bug的地方):传统的软件测试检测代码中的bug,而ML测试检测数据、学习程序和框架中的bug,每个组件都对构建ML模型起着至关重要的作用。
2)Behaviours under test:传统软件代码的行为在需求固定后通常是固定的,而ML模型的行为可能会随着训练数据的更新而频繁变化
3)Test input:传统软件测试中的测试输入通常是测试代码时的输入数据;而在ML测试中,中的测试输入可能会有更多的形式。请注意,我们将“测试输入”和“测试数据”的定义分开。特别地,我们使用“测试输入”来指可用于进行机器学习测试的任何形式的输入;而“测试数据”专门指用于验证ML模型行为的数据。因此,ML测试中的测试输入可能是,但是不限于测试数据。当测试学习程序时,测试用例可以是来自测试数据的单个测试实例或玩具训练集;当测试数据时,测试输入可以是学习程序。
4)Test oracle:传统的软件测试通常假定存在Test oracle。开发人员可以对照期望值验证输出,因此Oracle通常是事先确定的。然而,机器学习用于在在线部署后基于一组输入值生成答案。生成的大量答案的正确性通常是手动确认的。目前,Test oracle的标识仍然具有挑战性,因为许多所需的属性很难正式指定。即使对于具体的领域特定问题,Oracle识别仍然是费时费力的,因为通常需要领域特定的知识。在目前的实践中,公司通常依赖第三方数据标签公司来获得手动标签,这可能会很昂贵。蜕变关系[71]是一种伪预测,用于自动缓解机器学习测试中的预测问题。
5)Test adequacy criteria:测试充分性标准用于对已测试的目标软件的程度提供定量度量。到目前为止,业界提出并广泛采用了许多充分性准则,如线路覆盖率、分支覆盖率、数据流覆盖率等。然而,由于机器学习软件的编程范式和逻辑表示格式与传统软件存在根本差异,需要新的测试充分性准则来考虑机器学习软件的特点。
6)False positives in detected bugs 由于难以获得可靠的oracle,ML测试往往会在上报的bug中产生更多的误报。
7)Roles of testers:ML测试中的bug不仅可能存在于学习程序中,也可能存在于数据或算法中,因此数据科学家或算法设计者也可以扮演测试员的角色
论文收集和评审方案
论文关键字搜索
论文分布情况
下图显示了在不同研究场所发表的论文分布情况。在所有论文中,38.2%的论文发表在ICSE、FSE、ASE、ICST、ISSTA等软件工程场所;6.9%的论文发表在系统和网络场所;令人惊讶的是,只有19.4%-10%的论文发表在AAAI、CVPR、ICLR等人工智能场所。此外,22.9%的论文还没有通过同行评议的场所发表(arxiv部分)。
ML测试工作流
个人比较关心测试输入生成,测试充分性和测试优先级这三个部分
测试输入生成
特定领域的测试输入综合
ML测试的测试输入可以分为两类:对抗性输入和自然输入。对抗性输入基于原始输入而受到干扰。它们可能不属于正态数据分布(即,在实践中可能很少存在),但可能会暴露健壮性或安全缺陷。相反,自然输入是属于实际应用场景的数据分布的那些输入。在这里,我们介绍旨在通过特定领域的测试输入合成来生成自然输入的相关工作。
- DeepXplore[1]提出了一种白盒差异测试技术来为深度学习系统生成测试输入。
- 为了为自动驾驶系统创建有用和有效的数据,DeepTest[76]使用9种不同的真实图像转换进行贪婪搜索:更改亮度、更改对比度、平移、缩放、水平剪切、旋转、模糊、雾效果和雨效果。
- 张某等人。[79]应用GaN实现各种天气条件下的驾驶场景测试生成。他们从Udacity挑战赛数据集[77]和YouTube视频(下雪或下雨的场景)中采样图像,并将其送入单元框架7进行训练。训练后的模型以整个Udacity图像作为种子输入,生成变换后的图像作为生成测试。
- 周等人。[81]建议DeepBillboard生成现实世界中可能触发自动驾驶系统潜在转向错误的对抗性广告牌。
- 为了测试基于音频的深度学习系统,Du等人。[82]考虑到背景噪声和音量变化,设计了一组针对音频输入量身定做的变换。他们首先从RNN中抽象并提取一个概率转移模型。在此基础上,定义了状态测试准则,并将其用于指导有状态机器学习系统的测试生成。
- 为了在对生物细胞图像进行分类时测试图像分类平台,丁等人。[83]构建了生物细胞分类器的测试框架。该框架迭代生成新的图像,并使用变形关系进行测试。例如,他们通过在生物细胞图像中增加人工线粒体的数量/形状来产生新的图像,这可以引起分类结果中容易识别的变化。
- Rabin 等人[84]讨论了使用保持语义的程序转换作为测试输入来测试code2vec(一种代码嵌入方法[85])的可能性。
- 为了测试机器翻译系统,Sun等人。[86]通过变异翻译输入中的单词自动生成测试输入。为了生成应该产生一致翻译的翻译对,他们的方法基于单词嵌入相似性进行单词替换。人工检查表明,测试生成在生成具有一致翻译的输入对方面具有很高的精度(99%)。
基于模糊和搜索的测试输入生成
模糊测试是一种传统的自动测试技术,它生成随机数据作为程序输入来检测崩溃、内存泄漏、失败的(内置)断言等,许多成功的应用于系统安全和漏洞检测[9]。作为另一种广泛使用的测试生成技术,基于搜索的测试生成通常使用元启发式搜索技术来指导模糊过程,以获得更高效的测试生成[17]、[87]、[88]。这两种技术在探索ML测试的输入空间方面也被证明是有效的:
- Odena等人。[89]介绍了TensorFuzz。TensorFuzz使用简单的最近邻爬山方法来探索TensorFlow图在有效输入空间上可实现的覆盖范围,并发现数值错误、神经网络与其量化版本之间的不一致,以及RNN中出现的不良行为
- DLFuzz,由Guo等人提出。[90],是另一个基于DeepXplore实现的模糊测试生成工具,它以块覆盖为指导。DLFuzz的目标是生成对抗性的例子。因此,生成过程不需要用于交叉引用检查的类似功能深度学习系统,如DeepXplore和TensorFuzz。相反,它只需要对原始输入进行最小程度的改变,就可以找到那些改善了神经覆盖但具有与原始输入不同的预测结果的新输入。
- 谢等人。[91]提出了一种基于变形变换的覆盖制导模糊技术DeepHunter,该技术同时利用了DeepGauge[92]提出的神经元覆盖和覆盖准则。DeepHunter使用更细粒度的变形突变策略来生成测试,这显示了其在降低假阳性率方面的优势。它还展示了它在实现高覆盖率和错误检测能力方面的优势
- Wicker等人。[93]建议的功能导向测试生成。他们采用尺度不变特征变换(SIFT)来识别具有高斯混合模型的代表图像的特征,然后将寻找对抗性样本的问题转化为一个基于两人回合的随机博弈问题。他们使用蒙特卡罗树搜索来识别图像中最易受攻击的元素,以此作为生成对抗性示例的手段。实验表明,与一些最先进的白盒方法相比,他们的黑盒方法是有竞争力的。
- Uesato等人[94]提出了用对抗性示例生成来评估强化学习。灾难性故障的检测成本很高,因为故障很少见。为了降低发现此类故障的成本,作者提出使用故障概率预测器来估计代理失败的概率,这被证明是有效和高效的。
- 除了图像分类之外,还有用于特定应用场景的模糊器。周等人。[95]采用模糊化和变形测试相结合的方法,对真实无人驾驶汽车的LiDAR障碍物感知模块进行了测试,并上报了此前未知的软件故障。Jha等人。[96]12调查了如何通过将故障注入建模为贝叶斯网络来生成最有效的测试用例(最有可能导致违反安全条件的故障)。这项评估基于NVIDIA和百度的两个生产级A-V系统,揭示了许多故障导致安全违规的情况。
- Udeshi和Chattopadhyay[97]为文本分类任务生成输入,并产生一种模糊方法,该方法考虑了测试中的语法以及输入之间的距离。Nie [98]和Wang等人的研究成果。[99]对NLI(自然语言推理)任务中的语句进行了变异,以生成用于健壮性测试的测试输入。Chan等人。[100]生成了DNC的对抗性示例,以暴露其健壮性问题。Udeshi等人。[101]更多地关注个人公平性,生成的测试投入突出了被测模型的歧视性。我们在第8节中详细介绍了这些特定于域的模糊测试技术。
- Tuncali等人。[102]提出了自动驾驶系统的测试框架。在他们的工作中,他们比较了三种测试生成策略:随机模糊测试生成,覆盖数组[103]+模糊测试生成,以及覆盖数组+基于搜索的测试生成(使用模拟退火算法[104])。结果表明,基于搜索技术的测试生成策略在检测扫视行为方面具有最好的性能。
基于符号执行的测试输入生成
符号执行是一种程序分析技术,用于测试被测软件[105]是否可以违反某些属性。动态符号执行(DSE,也称为Concolic测试)是一种用于自动生成实现高代码覆盖率的测试输入的技术。DSE使用随机测试输入执行被测程序,并并行执行符号执行,以沿执行轨迹收集从分支语句中的谓词获得的符号约束。沿路径的所有符号约束的合取称为路径条件。当生成测试时,DSE从输入域随机选择一个测试输入,然后使用约束求解来达到路径中的目标分支条件[106]。DSE已经被发现是准确和有效的,并且已经成为一些漏洞发现工具使用的主要技术[107]。
在ML测试中,模型的性能不仅由代码决定,还由数据决定,因此符号执行有两种应用场景:对数据执行和对代码执行。
在机器学习代码上应用符号执行时,存在许多挑战。Gopinath[108]在他们的论文中列出了神经网络的三个这样的挑战,这些挑战也适用于其他ML模式:
(1)网络没有显式的分支;
(2)网络可能是高度非线性的,没有良好的约束求解器;
(3)存在可伸缩性问题,因为ML模型的结构通常非常复杂,超出了当前符号推理工具的能力。
- Gopinath[108]引入了DeepCheck。它将深度神经网络(DNN)转换为程序,以使符号执行能够找到与原始图像具有相同激活模式的像素攻击。具体地说,DNN中的激活函数遵循IF-ELSE分支结构,可以将其视为通过翻译后的程序的路径。DeepCheck能够通过识别神经网络未能对相应的修改图像进行分类的大部分像素或像素对来创建1像素和2像素攻击。
- Agarwal等人。[109]应用LIME[110],这是一种本地解释工具,可用线性模型、决策树或下降规则列表近似模型,以帮助获取符号执行中使用的路径。基于8个开源公平基准的评估表明,该算法生成的成功测试用例是随机测试生成方法THEMIS的3.72倍[5]。
- Sun等人。[111]提出了一种DNNs的动态符号执行测试方法DeepConcolic。通过具体评估ML模型的特定性质,通过具体的执行,将符号分析引向特定的MC/DC准则条件。DeepConcolic显式地将覆盖需求作为输入。作者报告说,在评估的模型中,它的神经元覆盖率比DeepXplore高出10%以上。
用于测试学习计划的合成数据
Murphy等人。[112]生成的数据具有重复值、缺失值或分类数据,用于测试两个ML排名应用程序。Breck等人。[45]使用符合模式约束的合成训练数据来触发代码中不符合约束的隐藏假设。张某等人。[54]使用已知分布的合成数据来测试过拟合。Nakajima和BUI[113]还提到了生成简单数据集的可能性,这些数据集具有一些可预测的特征,可以用作伪Oracle。
Test Oracle
作为测试Test Oracle的蜕变关系
变质关系是由Chen等人提出的。[114]以改善传统软件13测试中的测试先知问题。蜕变关系是指在多个程序执行过程中软件输入变化和输出变化之间的关系。例如,要测试函数SIN(X)的实现,可以检查当输入从x更改为π−x时,函数输出是如何变化的。如果SIN(X)与SIN(π−x)不同,则该观察发出错误信号,而无需检查由实现计算的特定值。SIN(X)=SIN(π−x)因此是一种蜕变关系,它扮演测试预言(也称为‘伪Oracle’)的角色,以帮助错误检测。
在ML测试中,许多变形关系基于训练或测试数据的变换,这些数据预期在预测输出中产生不变或某些预期变化。在研究相应的变质关系时,数据转换的粒度是不同的。某些转换执行粗粒度更改,如扩大数据集或更改数据顺序,而不更改每个数据实例。我们称这些转换为“粗粒度数据转换”。有些转换通过对每个数据实例进行较小的更改来进行数据转换,如改变图像的属性、标签或像素,本文将其称为**“细粒度数据转换”**。下面介绍每种类型变换的相关工作。
Coarse-grained Data Transformation.(粗粒度数据转换)。
- 早在2008年,墨菲等人介绍了输入数据的六种变换:加法变换、乘法变换、置换变换、倒置变换、包含变换和互斥变换。这些改变包括向数值添加常量;将数值乘以常量;排列输入数据的顺序;颠倒输入数据的顺序;移除部分输入数据;添加附加数据。
- 丁等人。[116]提出11种蜕变关系来测试深度学习系统。在数据集级,蜕变关系还基于不应影响分类精度的训练数据或测试数据变换,例如将10%的训练图像添加到训练数据集的每个类别中或从数据集中移除一类数据。该评估基于生物细胞图像的分类。
- Murphy等人。[117]呈现出功能级的变质关系。对9个机器学习应用的评估表明,函数级属性比应用级属性的效率高170%。
Fine-grained Data T ransformation.(细粒度数据转换)。
- 2009年,谢等人提出。[118]提出使用特定于某一模型的变形关系来测试有监督分类器的实现。本文提出了五种类型的变质关系,它们能够根据输入的特定变化来预测输出的预期变化(如类、标签、属性的变化)。Dwarakanath等人。[121]将变形关系应用于支持向量机和深度学习系统的图像分类。对数据的改变包括改变特征或实例顺序、测试特征的线性缩放、归一化或放大测试数据、或改变数据的卷积运算顺序。建议的MRS能够找到71%的注入细菌。Sharma和Wehheim[122]考虑了细粒度数据转换,例如更改特征名称、重命名特征值以测试公平性。他们研究了14个分类器,发现没有一个对特征名称洗牌敏感。
- 张某等人。[54]提出了一种结合变形关系和数据突变检测过拟合的扰动模型验证方法(PMV)。PMV通过在训练数据中注入噪声来改变训练数据,从而产生扰动训练数据集,然后检查训练准确率随噪声程度的增加而下降的情况。训练精度下降得越快,机器学习模型的拟合程度就越低。
- Al-Azani和Hassine[123]研究了朴素贝叶斯、k近邻及其集成分类器的变质关系。结果表明,朴素贝叶斯和k近邻所需的变质关系对于它们的集成分类器可能不是必需的。
- 田等人。[76]和张等人的研究成果。[79]声明在不同天气条件下,自动车辆转向角不应对变换后的图像有明显变化或保持不变。Ramanagopal等人。[124]利用相似图像的分类一致性作为自动驾驶汽车的测试标尺。评估表明,当检测到未标记数据中的错误时,精度为0.94。
- 此外,Xie [125]提出了一种非监督学习验证的变质测试方法METLE。Mettle有六种不同粒度的变质关系,这些关系是专门为无人监督的学习者设计的。这些变形关系操作实例顺序、清晰度、密度、属性或注入数据的离群值。这项评估是基于由Scikit-Learning生成的综合数据,表明METLE在验证无监督学习者方面是实用和有效的。Nakajima等人。[113],[126]讨论了使用不同粒度的变形关系来发现支持向量机和神经网络中的问题的可能性,例如操纵实例顺序或属性顺序、反转标签和改变属性值,或者操纵图像中的像素
Metamorphic Relations between Different Datasets. (不同数据集之间的蜕变关系)。
- 不同数据集之间的一致性关系也可以看作是可用于检测数据错误的蜕变关系。Kim等人。[127]和Breck等人。[45]研究了训练数据与新数据之间的变质关系。如果训练数据和新数据具有不同的分布,则训练数据可能不够充分。Breck等人。[45]还研究了时间相近的不同数据集之间的变质关系:由于数据生成代码频繁剧烈更改的情况并不常见,因此期望这些数据集具有一些共同的特征。
Frameworks to Apply Metamorphic Relations.(应用变质关系的框架)。
- 墨菲,实现了框架以自动执行使用变形关系检测ML错误的过程。该框架通过在进行结果比较时设置阈值来减少误报。他们还开发了Corduroy[117],它扩展了Java建模语言,允许开发人员指定变形属性并为ML测试生成测试用例。
Test Oracles的交叉引用
交叉引用(Cross-Referencing)是另一种用于ML测试的测试预言,包括差异测试(differential Testing)和N版本编程(N-version Program-ming)。差异测试是一种传统的软件测试技术,它通过观察类似的应用程序是否产生关于相同输入的不同输出来检测错误[11],[131]。N版本编程的目标是基于一个规范生成多个功能等价的程序,从而使不同版本的组合更具容错性和健壮性。
- Davis和Weyuker[11]讨论了对“不可测试”程序进行差异测试的可能性。其思想是,如果算法的多个实现在一个相同的输入上产生不同的输出,则至少有一个实现包含缺陷。
- DeepXplore[1]和DLFuzz[90]使用差异测试作为测试预言,以找到有效的测试输入。在测试生成期间,首选那些在不同算法或模型之间导致不同行为的测试输入。
- Sun等人。[86]在修复机器翻译系统时应用了交叉引用。他们的方法,TransRepair,比较不同变异输入的输出(即翻译),并选择与其他输入最相似的输出作为更好的翻译候选。
设计Test Oracles的度量标准
一些工作已经给出了ML系统的非功能特征的定义或统计度量,包括鲁棒性[137]、公平性[138]、[139]、[140]和可解释性[65]、[141]。这些测量不是用于测试的直接预言,但对于测试人员理解和评估测试下的属性以及提供一些可以与预期的统计数据进行比较的实际统计数据是必不可少的。
测试充分性
测试充分性评估的目的是发现现有测试是否具有良好的故障揭示能力。它为测试活动提供了一个客观的置信度度量。充分性准则也可以用来指导测试生成。传统软件测试中流行的测试充分性评估技术包括代码覆盖和突变测试,ML测试也采用了这两种技术。
覆盖测试
在传统的软件测试中,代码覆盖率衡量测试套件执行程序源代码的程度[144]。测试套件的覆盖率越高,隐藏的错误就越有可能被发现。换句话说,覆盖代码片段是检测代码中隐藏的缺陷的必要条件。通常需要创建测试套件来实现更高的覆盖率。
Neuron coverage. 神经元覆盖率。 Pei等人。[1]提出了第一个覆盖标准,神经元覆盖,专门为深度学习测试而设计。神经元覆盖率计算为所有测试输入激活的唯一神经元数量与DNN中神经元总数的比率。具体地说,如果神经元的输出值大于用户指定的阈值,则激活神经元。
Ma等人。[92]扩展了神经元覆盖的概念。他们首先根据训练数据描述DNN,从而获得每个神经元相对于训练数据的激活行为。基于此,他们提出了更细粒度的判据,k-多节神经元覆盖、神经元边界覆盖和强神经元激活覆盖,来表示DNN的主要功能行为和角落行为。
MC/DC coverage variants. MC/DC覆盖变体。 Sun等人。[145]在MC/DC覆盖标准的启发下,针对DNN的不同特点提出了四个测试覆盖标准[146]。MC/DC观察布尔变量的变化,而他们提出的标准观察神经元的符号、值或距离的变化,以便捕捉测试输入中的因果变化。该方法假设DNN是完全连接的网络,并且不考虑其自己层中的神经元的上下文以及同一层内的不同神经元组合[147]。
Layer-level coverage. 层级覆盖。 Ma等人。[92]还提出了层级覆盖标准,该标准考虑了顶级过度活跃神经元及其组合(或序列)来表征DNN的行为。基于数据集MNIST和ImageNet对该覆盖率和神经元覆盖率进行了评估,结果表明该覆盖率具有更好的性能。在他们的后续工作[148],[149]中,他们进一步提出了组合测试覆盖率,即通过检查一层中神经元激活相互作用的比例来检查每一层中神经元的组合激活状态。Sekhon和Fleming[147]定义了一个覆盖标准,它寻找1)同一层中具有所有可能值组合的所有神经元对,以及2)具有所有可能值组合的连续层中的所有神经元对。
State-level coverage. 状态级覆盖。 虽然后面提到的准则在某种程度上捕捉了前馈神经网络的行为,但它们并不像递归神经网络(RNN)那样明确地刻画有状态机器学习系统的特征。基于RNN的ML方法在处理顺序输入(例如,语音音频、自然语言、网络物理控制信号)的应用中取得了显著的成功。为了分析这类有状态ML系统,Du [82]提出了第一套专门针对基于RNN的有状态深度学习系统的测试标准。他们首先将有状态深度学习系统抽象为概率转移系统。在建模的基础上,他们提出了基于状态和转移系统轨迹的判据,以捕捉动态状态转移行为。
Limitations of Coverage Criteria. 覆盖标准的限制。 虽然有不同类型的覆盖标准,但大多数都集中在DNN上。Sekhon和Fleming[147]检查了现有的DNNs测试方法,并讨论了这些标准的局限性。
大多数建议的覆盖标准都是基于DNN的结构。Li等人。[150]指出了由于神经网络和人类编写的程序之间的根本差异而导致的深度网络结构覆盖标准的局限性。他们对自然输入的初步实验发现,测试集中错误分类的输入的数量与其结构复盖率之间没有很强的相关性。由于机器学习系统的黑箱性质,目前还不清楚这样的标准如何与系统的决策逻辑直接相关
变异测试
在传统的软件测试中,突变测试通过注入故障来评估测试集的故障揭示能力[144],[151]。检测到的故障与所有注入故障的比率称为突变分数。
在ML测试中,ML系统的行为不仅取决于学习代码,还取决于数据和模型结构。Ma等人。[152]提出了DeepMutation,在源级或模型级对DNN进行变异,对DNN的决策边界进行微小扰动。基于此,突变得分被定义为其结果被改变的测试实例相对于实例总数的比率
沈等人。[153]提出了5种DNNs变异算子,并对MInst数据集上的变异性质进行了评估。他们指出,需要特定区域的突变算子来加强突变分析。
与结构覆盖准则相比,基于突变测试的准则与DNN的决策边界更直接相关。例如,在DNN的决策边界附近的输入数据可以更容易地检测DNN及其突变体之间的不一致性。
令人惊讶的充分性
Kim等人。[127]引入惊喜充分性来衡量深度学习系统离散输入惊喜范围的覆盖率。他们认为,当根据训练数据衡量测试多样性时,测试多样性更有意义。与训练数据相比,一个“好的”测试输入应该是“足够的,但不是太令人惊讶”。引入了两种惊喜度量:一种是基于一般密度估计(KDE)来近似系统在训练期间看到类似输入的可能性,另一种是基于表示给定输入的神经元激活轨迹的向量与训练数据之间的距离(例如欧几里德距离)。这些标准可以用来检测对抗性例子。需要进一步的研究来确定这样的标准是否能够使ML模型的行为边界在惊喜方面得到近似。研究对抗性例子、自然错误样本和基于意外的标准之间的关系也将对未来的工作很有意义。
基于规则的测试充分性检查
为了确保ML系统的功能,可能需要一些“典型”规则。Breck等人。[154]提供了需要考虑的28个测试方面和Google使用的评分系统。他们的重点是衡量给定的机器学习系统测试得有多好。28个测试方面被分为四种类型:1)ML模型本身的测试,2)用于构建模型的ML基础设施的测试,3)用于构建模型的ML数据的测试,以及4)16检查ML系统随着时间的推移是否正确工作的测试。它们中的大多数都是一些必须检查的规则,可以用来指导测试生成。例如,培训过程应该是可重现的;所有功能都应该是有益的;不应该有比当前模式更简单但性能更好的其他模式。他们的研究表明,尽管ML测试很复杂,但设计一些基本的测试用例来测试ML系统的基本功能是有共同性的。
测试优先级排序和减少
ML中的测试输入生成需要覆盖非常大的输入空间。另一方面,我们需要对每个测试实例进行标记,以判断预测的准确性。这两个方面导致了较高的测试生成成本。Byun等人。[155]使用交叉熵、惊喜和贝叶斯不确定性等DNN度量来确定测试输入的优先级。他们的实验表明,这些是暴露不可接受行为的良好投入指标,这对再培训也很有用。
生成测试输入的计算代价也很高。张某等人。[156]建议通过确定表示更有效的对抗性示例的测试实例来降低成本。该方法是一种测试优先级排序技术,它根据测试实例对噪声的敏感度对测试实例进行排序,因为对噪声越敏感的实例更有可能产生对抗性的示例。
Li [157]专注于操作DNN测试中的测试数据缩减。他们提出了一种采样技术,由DNN最后一层隐藏层的神经元指导,使用基于交叉熵最小化的分布近似技术。评估是在具有三个图像数据集的预先训练的模型上进行的:
Ma等人。[158]提出了一套基于模型置信度的测试选择度量。对于模型来说,更不确定的测试输入是首选的,因为它们信息更丰富,如果在再培训期间包括在内,应该用来改进模型。评估表明,他们的测试选择方法比随机选择方法有80%以上的收益
错误报告分析
thung等人的研究成果。[159]我们是第一个通过分析机器学习系统的错误报告来研究机器学习错误的人。研究了来自Apache Mahout、Apache Lucene和Apache OpenNLP的500个错误报告。研究的问题包括错误频率、错误类别、错误严重性和错误解决特征,如修复错误的时间、工作量和文件号。结果表明,不正确的实现占ML错误的比例最大,即22.6%的错误是由于定义的算法的不正确实现造成的。实现错误也是最严重的错误,需要更长的时间才能修复。此外,15.6%的错误是不起作用的错误。5.6%的错误是数据错误。
调试和修复
Data Resampling.数据重采样。 5.1节中介绍的生成的测试输入只暴露了ML错误,但也会作为训练数据的一部分进行研究,并可以通过重新训练来提高模型的正确性。Ma等人。[162]找出了造成错误分类的神经元,并将其称为“故障神经元”。他们对影响这些故障神经元的训练数据进行了重新采样,以帮助提高模型性能。
Debugging Framework Development.调试框架开发。 duta等人。[163]提出了一种程序转换框架Storm,用于生成能够支持机器学习测试调试的较小程序。要修复错误,开发人员通常需要缩小测试中的程序,以编写更好的错误报告,并便于调试和回归测试。Storm应用程序分析和概率推理来简化概率程序,这有助于更容易地定位问题。
蔡等人。[164]提出了tfdbg,这是一个构建在TensorFlow上的ML模型调试器,Vartak等人。[165]提出了Mistique系统来捕获、存储和查询模型中间件,以帮助调试。Krishnan和Wu[166]提出了Palm,Palm帮助开发人员找出对预测影响最大的训练数据,从而针对导致错误预测的训练数据子集来帮助调试。
Fix Understanding.修正理解。 修复许多机器学习系统中的错误是困难的,因为错误可能出现在不同组件的多个点上。Nushi[167]17提出了一种人在回路中的方法,通过人类计算任务模拟不同组件中的潜在修复:要求人类模拟改进的组件状态。系统的改进被记录下来并进行比较,以便为设计人员提供如何最好地改进系统的指导。
Program Repair. 程序修复。 Albarghouthi等人。[168]针对机器学习等决策问题,提出了一种基于分布引导的归纳综合方法。其目的是构造一个具有正确预测输出,但语义与原程序相似的新程序。他们的方法使用采样实例和预测输出来驱动程序合成,其中基于SMT对程序进行编码。
通用测试框架和工具
还有一些工作侧重于提供测试工具或框架,以帮助开发人员在测试工作流中实现测试活动。存在用于生成和验证用于安全测试的测试输入的测试框架
待测试的ML属性
ML属性关系到ML测试应该关注的条件,并且通常与ML模型在训练后的行为有关。然而,属性中性能较差的原因可能是任何ML组件中的错误。
本节介绍测试功能性ML属性和非功能性ML属性的相关工作。功能属性包括正确性(6.1节)和过度匹配(6.2节)。非功能性属性包括健壮性和安全性(第6.3节)、效率(第6.4节)、公平性(第6.5节)。
正确性
正确性关系到ML系统的基本功能精度。经典机器学习验证是最成熟、使用最广泛的正确性测试技术。典型的机器学习验证方法有交叉验证和Bootstrap。其原理是通过数据采样来隔离测试数据,以检查训练后的模型是否适合新的情况。
有几种广泛采用的正确性度量,如准确度、精确度、召回率和曲线下面积(AUC)。
模型相关性
模型相关性评估检测模型和数据之间的不匹配。较差的模型相关性通常与过度拟合或不足相关联。当一个模特对数据太复杂,甚至训练数据的噪声也被模型拟合[183]。过拟合很容易发生,特别是当训练数据不足时,[184]、[185]、[186]。
交叉验证传统上被认为是检测过度拟合的有用方法。然而,并不总是清楚多大程度的过度拟合是可接受的,如果测试数据不能代表潜在的未见数据,交叉验证可能不太可能检测到过度拟合
张某等人。[54]引入扰动模型验证(PMV)来帮助选择模型。PMV向训练数据注入噪声,针对扰动数据重新训练模型,然后使用训练精度递减率来检测过拟合/欠拟合。直觉是,过度适应的学习器倾向于将噪声拟合到训练样本中,而不适合的学习器无论是否存在注入的噪声都将具有较低的训练精度。因此,在扰动数据上,过拟合和欠拟合对噪声的敏感度都较低,并且对噪声程度表现出较小的精度降低率。在分类设置中,PMV在四个真实数据集(乳腺癌、成人、CONNECT-4和MNIST)和九个合成数据集上进行了评估。结果表明,与10倍交叉验证相比,PMV具有更好的性能,并为检测过拟合/欠拟合提供了更好的识别信号。
ML系统通常在部署后收集新的数据,这些数据将被添加到训练数据中以提高正确性。然而,不能保证测试数据代表未来的数据。Werpachowski等人。[42]提出了一种从测试数据中生成对抗性实例的过拟合检测方法。如果对抗性示例上的重新加权误差估计与原始测试集的重新加权误差估计充分不同,则检测到过拟合。
Gossmann等人。[187]通过大量的仿真研究,研究了测试数据重用实践在医学领域的威胁,发现在所有考虑的仿真设置下,重复使用相同的测试数据会不经意间导致过拟合。
Kirk[51]提到,我们可以将训练时间作为ML模型的复杂性代理,最好选择正确性相当但训练时间相对较少的算法。
Ma等人。[162]试图通过重新采样训练数据来缓解过度拟合问题。基于对三个图像分类数据集的评估,他们的方法被发现将测试准确率从平均75%提高到93%。
稳健性和安全性
健壮性度量标准
与正确性或过度拟合不同,健壮性是机器学习系统的非功能性特征。衡量健壮性的一种自然方法是在存在噪声的情况下检查系统的正确性[137];健壮的系统应该在存在噪声的情况下保持性能。
Moosavi-Dezgoli等人。[188]提出了DeepFool,它计算‘愚弄’深层网络的扰动(增加的噪音),以量化它们的健壮性。Bastani等人。[189]提出了3个度量稳健性的指标:1)逐点稳健性,表示分类器的最小输入变化不是稳健的;2)对抗性频率,表示改变输入改变分类器结果的频率;3)对抗性严重度,表示输入与其最近的对抗性示例之间的距离。
Carlini和Wagner[190]创建了一组攻击,可以用来构造神经网络健壮性的上限。Tjeng [137]提出使用测试输入与其最接近的对手示例之间的距离来衡量鲁棒性。Ruan et [191]根据测试数据给出了全局鲁棒性上下界,以量化鲁棒性。Gopinath[192]等人。建议的DeepSafe是一种数据驱动的方法,用于评估DNN健壮性:聚集到同一组中的输入应该共享相同的标签。
最近,Mangal等人。[193]提出了概率稳健性的定义。他们的工作使用抽象解释来近似神经网络的行为,并计算网络可能表现出非稳健行为的输入区域的过近似。
Banerjee等人。[194]探索了使用贝叶斯深度学习对深度神经网络内部的错误传播进行建模,从而对神经网络对硬件错误的敏感度进行数学建模,而无需执行广泛的故障注入实验。
以测试数据为目标扰动
对抗性输入生成已被广泛用于测试自动驾驶系统的鲁棒性[1]、[76]、[79]、[92]、[93]。还研究了为NLI模型[98]、99、恶意软件检测[169]和可区分神经计算机(DNC)[100]生成敌意输入。
Carlini和Wagner[190]开发了使用距离度量来量化相似性的对抗性示例生成方法。该方法成功地为最近提出的防御提取网络上的所有图像生成对抗性示例[195]。
Papernot等人的研究成果。[196]、[197]设计了一个库,以规范对抗性范例建设的实施。他们指出,标准化的对抗性范例生成非常重要,因为“没有标准化实施的对抗性范例构建所构建的基准彼此之间是不可比较的”:很难说好的结果是由高水平的健壮性还是由对抗性范例构建过程中的差异造成的。
用于生成检查神经网络健壮性的测试数据的其他技术包括符号执行[108]、[111]、模糊测试[90]、组合测试[148]和抽象解释[193]。在5.1节中,我们将更详细地介绍这些测试生成技术。
以整个系统为目标扰动
Jha等人。[198]提出了一种利用应用/软件故障注入近似自动车辆(A-V)系统传感器、处理器或存储器中的硬件错误来测试鲁棒性的VFI方法。他们还介绍了Kayote[199],这是一个基于故障注入的工具,可以系统地将故障注入自动驾驶系统的软件和硬件组件。与A VFI相比,Kayotee能够使用闭环仿真环境表征错误传播和掩蔽,还能够将位翻转直接注入GPU和CPU架构状态。Jha等人进一步提出的DriveFI[96]是一个故障注入式引擎,可以挖掘最大程度影响AV安全的情况和故障。
Tuncali等人。[102]考虑了整个系统的闭环行为,不仅在图像空间,而且在构形空间上支持自动驾驶系统的对抗性示例生成
效率
因可能是效率问题很少发生,或者这些问题很难检测到。
Kirk[51]指出,在训练模型时可以使用不同机器学习算法的效率来比较它们的复杂性。
Spieker和Gotlieb[200]研究了三种训练数据约简方法,其目标是在模型训练过程中找到具有相似特征的原始训练数据集的较小子集,从而提高建模速度以进行更快的机器学习测试。
公平性
公平是一个相对较新的非功能性特征。根据Barocas和Selbst[201]的工作,造成不公平的主要原因有以下五个。
1)Skewed sample 倾斜样本:一旦初始偏差发生,这种偏差可能会随着时间的推移而复合。
2)Tainted examples 有偏差的例子:由于人类的有偏见的标注活动,数据标签是有偏差的。
3)Limited features 有限的特征:特征可能信息量较少或收集的可靠性较低,在建立特征与标签之间的联系时会误导模型。
4)Sample size disparity 样本量差异:如果来自少数群体和多数群体的数据高度不平衡,ML模型可能会使少数群体表现得更差。
5)Proxies 代理:某些特征是敏感属性的代理(例如,人所在的街区),即使排除敏感属性,也可能导致对ML模型的偏差。
公平性研究的重点是测量、发现、理解和处理观察到的不同群体或个人在绩效上的差异。这种差异与公平缺陷有关,这些缺陷可能会冒犯甚至伤害用户,并给程序员和企业带来尴尬、不信任、收入损失,甚至违反法律[171]。
公平的定义和衡量标准
文献中提出了几种公平的定义,但还没有形成明确的共识[202]、[203]、[204]、[205]。然而,这些定义可以用作在ML测试中检测违反公平性的预言。
为了帮助说明ML公平性的形式化,我们使用X表示一组个体,Y表示在对X中的每个个体进行决策时的真实标签集。设h是训练好的机器学习预测模型。设A为敏感属性集,Z为剩余属性。
1)Fairness Through Unawareness 无意识公平。无意识公平(FTU)意味着只要在决策过程中没有明确使用受保护的属性,算法就是公平的[206]。这是一种成本相对较低的界定和确保公平的方式。然而,有时X中的非敏感属性可能包含与敏感属性相关的信息,从而可能导致歧视[202]、[206]。排除敏感属性还可能影响模型精度并产生较不有效的预测结果[207]。
2)Group Fairness 群体公平。 如果基于敏感属性选择的组具有相等的决策结果概率,则被测模型具有组公平性。有几种类型的群体公平。
-
Demographic Parity 人口平等性是一种流行的群体公平性衡量标准[208]。它也被称为统计奇偶校验或独立奇偶校验。它要求决策应该独立于受保护的属性。设G1和G2是属于X的两组除以敏感属性 ,如果 ,则被测模型h满足人口统计平等性。
-
Equalised Odds 均衡赔率是Hardt等人提出的另一种群体公平方法。当目标标签 固定为 时,如果h与受保护属性无关,则被测模型h满足均衡赔率。
当目标标签被设置为正时,均衡赔率变为Equal Opportunity 均等机会[139]。它要求所有组的真实阳性率应该是相同的。当目标类Y固定为正时,如果h独立于受保护的属性,则模型h满足平等机会:
3) Counter-factual Fairness.违背事实的公正性。 Kusner et al.。[206]引入了反事实公正性。如果当受保护的属性被反转到反事实值时,模型的输出保持不变,并且假设的因果模型所确定的其他变量被修改,则该模型满足反事实公平性。设a是受保护的属性,a0是a的反事实属性,x0是变为a0的新输入。如果对于任何输入X和受保护属性 ,则模型h是反事实公平的。这种公平性测量另外提供了解释偏差原因的机制,因为除了受保护的20个属性之外的变量是受控制的,因此h(Xi)和h(X0i)的差异一定是由A的变化引起的。
4)Individual Fairness.个人公平。Dwork et [138]提出了使用特定任务的相似性度量来描述应该被视为相似的个体对。根据Dwork等人的观点,具有个体公平性的模型h应该在相似的个体之间给出相似的预测结果: iff ,其中d是衡量个体相似性的距离度量,并且 是对这种差异的容忍。
Gajane和Pechenizkiy[202]调查了文献中公平是如何定义和形式化的。Corbett-Davies和Goel[62]研究了三种类型的公平性定义:反分类、分类奇偶和校正。他们举例指出了每种类型的深层统计局限性。Verma和Rubin[203]基于一个共同的、统一的数据集解释和说明了现有的最突出的公平性定义。
Support for Fairness Improvement. 支持提高公平性。 Metevier等人。[209]提出了Robinhood算法,Robinhood利用浓度不等式[211]来计算高概率界并搜索满足公平性要求的解决方案。当违反要求时,它会向用户发出警告。
Albarghouthi和Vinitsky[75]提出了“公平意识编程”的概念,其中公平是首要关注的问题。为了帮助开发人员定义他们自己的公平规范,他们开发了一种规范语言。与传统测试中的断言一样,公平性规范被开发到运行时监视代码中,以使多次执行能够捕获违规行为。用Python实现了一个原型。
Agarwal等人。[212]提出将公平性分类归结为代价敏感的分类问题(其中不同类型错误的代价是不同的)。应用场景是二进制分类,底层分类方法被视为黑色9A上下文盗贼是一种基于诸如用户点击率[210]之类的奖励来学习采取行动的算法。盒。减少优化了准确性和公平性约束之间的权衡。
Albarghouthi等人。[168]提出了一种基于分布引导的归纳综合修复决策方案的方法。
公平测试的测试生成技术
Galhotra等人。[5],[213]提出的使用因果分析考虑群体公平性的主题[214]。它将公平性分数定义为公平性的度量标准,并使用随机测试生成技术来评估区分程度(基于公平性分数)。据报道,THEMIS在表现出更多歧视的系统上也更有效率。
Themis随机生成组公平性测试,而Udeshi等人。[101]提出了Aequitas,重点是测试生成,以发现歧视性输入和那些对理解个人公平性至关重要的输入。该生成方法首先对输入空间进行随机采样以发现是否存在歧视性输入,然后搜索这些输入的邻域以发现更多的输入。除了检测公平错误,Aeqitas还对机器学习模型进行了重新训练,并减少了这些模型做出的决定中的歧视。
Agarwal等人。[109]使用符号执行和本地可解释性来生成测试输入。关键思想是使用本地解释,特别是本地可解释模型不可知解释来确定驱动决策的因素是否包括受保护的属性。评估表明,在12个基准测试中,该方法生成的成功测试用例是THEMIS的3.72倍。
Tramer等人。[171]我们最先提出了“fairness bugs”的概念。他们认为受保护的属性和算法输出之间在统计上显著的关联是一个公平错误,在他们的论文中特别命名为“无保证的关联”。他们提出了第一个全面的测试工具,旨在帮助开发人员通过“易于理解”的错误报告来测试和调试公平性错误。该工具可用于各种应用领域,包括图像分类、收入预测和医疗预测。
Sharma和Wehheim[122]试图通过检查测试下的算法是否对训练数据变化敏感来确定不公平的原因。他们以各种方式变异训练数据,以生成新的数据集,例如更改行、列的顺序,以及调整特征名称和值。14个分类器中有12个对这些变化敏感。
可解释性
Manual Assessment of Interpretability.可解释性的人工评估。现有的经验评估可解释性属性的工作通常包括人类。也就是说,人工评估是目前评估可解释性的主要方法。Doshi-V Elez和Kim[65]给出了可解释性评估(测试)方法的分类:application-grounded, human-grounded, and functionally-grounded.
application-grounded涉及真实应用程序场景的人工实验。human-grounded,使用简化任务的人工评估结果。functionally-grounded不需要人工实验,而是使用定量度量作为解释质量的代理,例如,决策树模型的解释代理可以是树的深度。
Friedler等人。[215]介绍了两种类型的可解释性:全局可解释性是指理解训练过的模型的整体;局部可解释性是指理解特定输入和相应输出上的训练模型的结果。他们要求1000名用户在给定输入变化的情况下产生模型的预期输出变化,然后记录不同模型的精确度和完成时间。决策树和Logistic回归模型被发现比神经网络更具局部解释力。
Automatic Assessment of Interpretability.可解释性的自动评估。 程等人。[46]提出了理解ML模型行为的度量标准。该度量度量学习者是否已经通过遮挡对象的环境来学习对象识别场景中的对象。
Christoph[70]提出了基于ML算法范畴的可解释性度量。他声称,“实现可解释性的最简单方法是只使用创建可解释模型的算法子集”。他确定了几个可解释性很好的模型,包括线性回归、逻辑回归和决策树模型
周等人。[216]定义了变质关系模式(MRP)和变质关系输入模式(MRIP)的概念,它们可以用来帮助最终用户了解ML系统是如何工作的。他们对各种系统进行了案例研究,包括大型商业网站、谷歌地图导航、谷歌地图基于位置的搜索、用于人脸识别的图像分析(包括Facebook、MATLAB和OpenCV),以及谷歌视频分析服务云视频智能(Cloud
Video Intelligence)。
Evaluation of Interpretability Improvement Methods. 可解释性改进方法的评价。机器学习分类器在许多医学应用中得到了广泛的应用,然而预测结果的临床意义往往并不明确。Chen等人。[217]研究了将分类器得分转换为疾病概率尺度的几种提高可解释性的方法。他们表明,可以将任意尺度上的分类器分数校准到概率尺度,而不会影响它们的辨别性能。
隐私
丁等人。[218]将程序视为灰箱,通过统计测试检测不同的隐私违规行为。对于检测到的违规,它们会生成反例来说明这些违规,并帮助开发人员理解和修复错误。Bichsel等人。[219]建议估算 参数,目的是找到见证最大可能隐私侵犯的三元组(x,x0,Φ),其中x和x0是两个测试输入,Φ是一组可能的输出。
ML测试组件
本节通过识别ML测试可能揭示错误的组件(数据、学习程序或框架)来组织ML测试工作。
应用场景
-
自主驾驶
-
机器翻译
-
自然语言推理
文献综述分析
这一部分分析了不同测试属性和机器学习类别之间的研究分布。它还总结了在ML测试中使用的数据集(每个数据集的名称、描述、大小和使用场景)。
timeline
下图显示了ML测试开发中的几个关键贡献。
机器学习类别间的研究分布
本部分介绍并比较了各种机器学习类别的研究现状
传统机器学习与深度学习的研究分布
有监督/无监督/强化学习测试中的研究分布
我们在这次调查中确定的几乎所有工作都集中在测试有监督的机器学习上
不同的学习测试要求
ML涉及不同的任务,如分类、回归、聚类和降维。对不同任务的研究也呈现出不平衡,大量的论文侧重于分类
不同测试属性间的研究分布
‘general’ 是指那些讨论或调查ML测试的论文
ML测试中使用的数据集
ML测试中使用的数据集
论文中使用数据集的个数
ML测试中的开源工具支持
有几个专门为ML测试设计的工具。Angell等人。介绍了Themis[213],一个用于测试群体歧视的开源工具14。还有一个用于TensorFlow的ML测试框架,名为mltest15,用于编写简单的ML单元测试。与mltest类似,有一个用于为基于pytorch的ML系统编写单元测试的测试框架,名为torchtest。杜比等人。[237]扩展了WALA,使用TensorFlow启用机器学习代码的静态分析。
与传统测试相比,现有的ML测试工具支持相对不成熟。ML测试的工具支持还有很大的改进空间。
挑战与机遇
ML测试中的挑战
正如这项调查所显示的那样,ML测试最近经历了快速增长。尽管如此,ML测试仍然处于其发展的早期阶段,前面有许多挑战和悬而未决的问题。
Challenges in T est Input Generation. 尽管已经提出了一系列测试输入生成技术(参见5.1节中的更多内容),但是由于ML模型的行为空间很大,测试输入生成仍然具有挑战性
基于搜索的软件测试生成(SBST)[87]使用诸如遗传算法之类的元启发式优化搜索技术来自动生成测试输入。它是一种测试生成技术,已广泛用于传统软件测试范例的研究(和部署[288])。除了生成测试功能属性(如程序正确性)的测试输入之外,SBST还用于探索需求分析中算法公平性方面的紧张关系。[205]、[289]。SBST已成功应用于自动驾驶系统的测试[245]、[246]、[247]。由于SBST和ML之间有明显的契合性,因此将SBST应用于生成用于测试其他ML系统的测试输入具有很大的研究机会;SBST自适应地在大的输入空间中搜索测试输入。
现有的测试输入生成技术侧重于生成敌意输入以测试ML系统的健壮性。然而,对抗性的例子经常受到批评,因为它们不代表真实的输入数据。因此,一个有趣的研究方向是如何生成自然的测试输入,以及如何自动度量生成的输入的自然度。
Challenges on T est Assessment Criteria. 已经有很多工作探索如何评估测试数据的质量或充分性(参见5.3节中的更多内容)。然而,对于不同的评估度量是如何关联的,或者这些评估度量与测试的故障揭示能力是如何关联的,仍然缺乏系统的评估,这是传统软件测试中被广泛研究的一个主题[290]。测试评估标准与测试充分性之间的关系尚不清楚。此外,评估标准可能为解释和理解ML模型的行为提供了一种方法,这可能是一个有趣的进一步探索的方向。
Challenges Relating to The Oracle Problem. Oracle问题仍然是ML测试中的一个挑战。变质关系是有效的伪oracle,但在大多数情况下,它们需要由人类的聪明才智来定义。因此,剩下的挑战是自动识别和构建用于ML测试的可靠测试oracle。
Murphy等人。[128]讨论了当涉及浮点计算时,变形测试中如何可能出现片状测试。薄片测试检测是传统软件测试中的一个具有挑战性的问题[288]。由于Oracle问题,在ML测试中可能更具挑战性。
即使没有薄片测试,伪oracle也可能不准确,导致许多假阳性。因此,有必要探索如何产生更准确的测试oracle,以及如何减少报告问题中的假阳性。在测试ML算法a时,我们甚至可以使用ML算法b来学习检测假阳性oracle。
Challenges in T esting Cost Reduction. 在传统的软件测试中,成本问题仍然是一个大问题,产生了许多降低成本的技术,如测试选择、测试优先级排序和预测测试执行结果。在ML测试中,成本问题可能更加严重,特别是在测试ML组件时,因为ML组件测试通常需要重新训练模型或重复预测过程。它还可能需要数据生成来探索巨大的模式行为空间。
降低成本的一个可能的研究方向是将ML模型表示为中间状态,以使其更易于测试
我们还可以应用传统的成本降低技术,例如测试优先级排序或最小化,在不影响测试正确性的情况下减少测试用例的大小。
更多ML解决方案部署到不同的设备和平台(例如移动设备、物联网边缘设备)。由于目标设备的资源限制,如何在不同的设备上有效地测试ML模型以及部署过程也将是一个挑战。
ML测试中的研究机会
ML测试还有很多研究机会。这些不一定是研究挑战,但可能会使机器学习开发人员和用户以及整个研究社区极大地受益。
Testing More Application Scenarios. 目前很多研究都集中在监督学习,特别是分类问题上。需要对与测试、无监督和强化学习相关的问题进行更多的研究
目前文献中处理的测试任务主要集中在图像分类上。在许多其他领域,如语音识别、自然语言处理和代理/游戏发挥,仍有令人兴奋的测试研究机会。
Testing More ML Categories and Tasks. 我们观察到在不同机器学习类别和3测试技术覆盖率方面存在明显的不平衡,测试无监督和强化学习系统既有挑战,也有研究机会。
例如,迁移学习,一个最近很受关注的话题,专注于存储在解决一个问题时获得的知识,并将其应用于另一个不同但相关的问题[291]。迁移学习测试也很重要,但在现有的文献中涉及得很少。测试其他属性。从图10中,我们可以看到,大多数工作测试健壮性和正确性,而研究效率、模型相关性或可解释性的论文相对较少(不到3%)。
模型相关性测试具有挑战性,因为未来数据的分布往往是未知的,而许多模型的容量也是未知的,很难衡量。对ML模型中模型相关性差的普遍性以及模型相关性差与高安全风险之间的平衡进行实证研究可能是很有意义的。
为了测试效率,需要测试不同级别的效率,例如在不同平台、机器学习框架和硬件设备之间切换时的效率。
为了测试属性的可解释性,现有的方法主要依赖于人工评估,它检查人类是否能够理解ML模型的逻辑或预测结果。调查可解释性的自动评估和可解释性违规的检测也将是很有趣的。
对公平和可解释性的定义和理解缺乏共识。因此,需要在不同的背景下进行更明确的定义、形式化和实证研究。
已经讨论过机器学习测试和传统软件测试在对不同属性的预期保证方面可能有不同的要求[292]。因此,需要更多的工作来探索和识别那些对机器学习系统最重要的属性,因此值得进行更多的研究和测试。
Presenting More Testing Benchmarks,现有的ML测试试卷采用了大量的数据集。这些数据集通常是用于构建机器学习系统的数据集。据我们所知,像CleverHans17这样的基准测试很少是专门为ML测试研究目的而设计的,比如对抗性示例构建。
Covering More T esting Activities 据我们所知,ML测试文献中缺少对ML系统的需求分析。
现有的工作主要集中在离线测试上。在线考试值得更多的研究。
根据amshi et al.。[8],数据测试尤为重要。这个课题当然值得更多的研究。此外,ML测试中还存在许多回归测试、错误报告分析和错误分类的机会
由于机器学习算法的黑箱性质,与传统的软件测试相比,ML测试结果通常更难让开发人员理解。在ML测试中,测试结果的可视化可能特别有帮助,可以帮助开发人员理解错误,并帮助定位和修复错误。
Mutating Investigation in Machine Learning System. 已经有一些研究讨论了变异机器学习代码[128],[240],但还没有工作探索如何更好地设计机器学习代码的变异算子,以便突变体能够更好地模拟真实世界的机器学习错误。这是另一个研究机会
总结
我们对ML测试的研究工作进行了全面的综述和分析。该调查给出了不同ML测试属性、测试组件和测试工作流的定义和研究现状。总结了用于实验的数据集和可用的开源测试工具/框架,分析了ML测试的研究趋势、方向、机遇和挑战。我们希望这项调查能帮助软件工程和机器学习研究人员熟悉ML测试的现状和开放的机会。
转载:https://blog.csdn.net/qq_33935895/article/details/105030195