在人工智能中,算法不只是用代码敲出来这么简单的,而是由训练数据、标签和神经网络的结合产生的,这是机器学习的本质。算法本身没有直接洞察力,也不能直接像缺陷一样被修复:它属于“黑盒开发”。
人工智能系统需要具备应用于不同数据和不同应用场景的能力。训练数据和标签的选择会引起偏差和透明度的风险,可能对真实情况产生重大影响。测试人工智能的重点在于这些风险。人工智能测试需要道德、社会和意识,以突出用户、预期,并将这些预期转化为可重复运行和自动化的测试用例。人工智能测试包括设置指标,将测试结果转化为对系统的有意义和可量化的评估,以便开发人员优化系统。
1. 介绍
毫无疑问,未来属于人工智能。它已经进入了我们的日常生活,并被世界各地的大公司所使用。人工智能的适用性似乎无穷无尽。然而,仍然存在许多疑虑和担忧。例如,在自动驾驶汽车的情况下:事故责任、不稳定的物体识别以及与不可预测的人类交通参与者的复杂互动阻碍了它的广泛推广。人工智能的一些可能令人恐惧的影响已经显现出来。人工智能算法可以制造和扩大偏差。例如,在缅甸的种族清洗中,数以万计的罗兴亚人被杀害,100万人流离失所。Facebook算法支持了已经存在的种族紧张局势,这偏差观点得到强化,因为它被优化为点击成功则被奖励。负面信息在搜索结果中越来越多地出现。每个AI软件开发人员都在与这些疑虑和风险作斗争。AI测试,什么是缺陷,如何修复它?如何确保系统在各种输入做正确的事情?如何获得正确率的信心?结果对所有相关方公平吗?当前的发展、观点和价值观是否反映在算法中?从测试的角度来看,AI的最大风险是什么,如何处理这些风险?
2. 介绍
2.1. AI 属于黑盒开发
在人工智能中,算法、系统在标准、决策和行动方面的行为,并没有明确地体现在代码中。在非人工智能开发中,代码直接表达了算法。在人工智能中,算法是训练数据、参数化、标签和神经网络选择的产物,而且无法在代码中体现。代码、神经网络只是通过训练产生算法的系统的一个组成部分,这是机器学习的本质。
2.2. 机器学习和神经网络
机器学习和人类学习之间有很强的相似性。以一个孩子第一次学习使用一个概念为例。这个孩子被告知,它抱着的毛茸茸的生物是一只“猫”。现在,这个孩子开始用自己的神经网络工作。猫的概念与不是猫的物体(如“爸爸”)进行比较。神经网络的工作方式是找到一种配置自己的方法,如果它看到猫,它会将其归类为猫,而不是爸爸。它通过找到差异、标准(如皮毛、胡须、四条腿等)来做到这一点。但我们不知道这些标准到底是什么。它们也可能是“捉老鼠”、“呼噜声”或“白色”。我们无法在大脑中找到猫的概念及其标准,也无法直接在大脑中纠正它。
神经网络由许多代码块(“节点”)组成,这些代码块按层排列,每个节点层都连接到其上下层。节点没有被预先编程以执行特定任务。节点只是小型的计算器,处理顶层呈现给它们的部分并返回计算结果。给定两张图片,一张是猫,一张是爸爸,它将尝试不同的配置,以找到一种配置,将一个样本识别为猫,另一个样本识别为爸爸。它将找出差异,以便其配置将在下一次给出正确的分类。
2.3. 算法=数据 编码 标签
因此,该系统产生的算法由从样本中衍生出的模型组成,因此它可以对输入进行分类和识别,并给它们打标签。该算法是神经网络的产物,但主要基于训练数据和标签。因此,算法不是代码,而是代码 训练数据 标签。
2.4. 模糊逻辑和数学
虽然整个系统所做的只是计算,产生数字,但这些数字不会产生布尔结果:例如:“这是爸爸”或“这是一只猫”。结果将是从节点和层中计算的所有数字的总和,每个数字都表示根据每个给定的标签满足标准的程度。这几乎不可能(在0-1区间)达到1。其次,它还会给样本给出评分。因此,呈现给系统的新图片可能会将“猫性”评为0.87,将“爸爸性”评为0.13。结论是,样本是一只猫,但它不是100%的猫,也不是0%的爸爸。因此,人工智能的最终产品是计算、概率,而不是100%的确定性。
2.5. 开发与纠错
神经网络的开发包括开发神经网络本身,但大多数开发人员使用现成的神经网络。接下来,他们需要配置神经网络,使其能够接收手工的输入并配置标签。最后,神经网络的层可以参数化:计算结果可以加权,以便某些结果对最终结果的影响比其他结果更大。这些是开发人员拥有的主要调整工具。如果系统表现不令人满意,则可以调整参数。这不是一个重点的缺陷修复,而是纠正一个缺陷决策的例子。参数化将影响结果,但每次调整都会对整体性能产生影响。在人工智能中,存在大量的“回归”:对不打算改变的系统部分产生不必要和意想不到的影响。训练数据和标签也可能成为影响系统的候选因素。在人工智能的某些问题上,例如欠拟合,扩大训练数据很可能会改善系统。欠拟合指的是模型无法很好地拟合训练数据,无法捕捉到数据中的真实模式和关系。欠拟合可以比喻为一个学生连基本的知识都没有掌握好,无论是老题还是新题都无法解答。这种情况下,模型过于简单或者复杂度不足,无法充分学习数据中的特征和模式。
2.6. 整体评估和指标
当缺陷修正无法聚焦,每次微调都会导致大规模回归时,大规模回归测试是必要的。问题“我们是否修复了这个缺陷?”成为一个次要问题。我们想知道每次更改后的整体行为。我们想知道与其他版本相比,系统的整体性能如何。在整体评估中,我们需要考虑AI的输出:计算结果既不是真也不是假。每个结果都是一个等级。因此,最终结果应该进行全面比较、权衡和合并,以便我们可以决定一个版本是否优于另一个版本,是否应该使用它。结果将是基于预期和它们相对重要性的输出价值的度量。
3. AI风险
我们将在这里讨论最重要的风险。这些风险是人工智能的典型风险,可能会对人工智能的质量、客户、用户、人们甚至世界产生严重影响。在开始测试之前,应该考虑这些风险,为测试人员提供重点提示。在分析测试结果时,应该考虑这些风险。
作为对意外结果的因果分析,这可以为优化系统提供线索。例如:欠拟合的系统最需要更多样化的训练数据,过拟合的系统需要简化标签。
3.1. 偏差
人工智能的主要风险是“偏差”的类型。在人类智能中,我们称之为偏差。由于训练数据和概念的限制,我们看待事物过于简单(简化)或存在(偏差)。概念的高粒度可能意味着系统无法充分概括,导致结果毫无用处。
3.1.1. 选择偏差
如果训练数据选择遗漏了现实世界中的重要元素,这可能会导致选择偏差。与实际结果相比,上次欧洲选举的民意调查预测,荷兰的欧洲怀疑党将获得比实际选举高得多的胜利。民意调查没有过滤人们是否真的会投票。欧洲怀疑论者被证明比其他选民更有可能不投票。
3.1.2. 固定偏差
急于验证一个高度相信或投入的假设可能会导致选择或过度重视证实该论点的数据,而忽视可能存在的缺陷。科学家、政客和产品开发者可能容易受到这种偏差的影响,即使他们有最好的意图。一个医疗援助组织为了筹集更多资金,夸大了可能的粮食危机,显示死亡人数上升,但没有显示与饥荒和总人口数无关的死亡人数。
3.1.3. 欠拟合
缺乏多样性的训练数据会导致欠拟合。学习过程将无法确定关键的判别标准。训练软件识别狼和狗,将哈士奇识别为狼,因为它没有学到狗也可以在雪中看到。如果我们只在荷兰获得与毒品相关的新闻信息,会发生什么?
3.1.4. 过拟合
当标签对于人工智能系统的目的来说过于多样化和多样化时,就会出现过度拟合。过拟合(Overfitting)指的是模型在训练数据上表现得过于优秀,但在未见数据上表现较差。过拟合可以比喻为一个学生死记硬背了一本题库的所有答案,但当遇到新的题目时无法正确回答。这种情况下,模型对于训练数据中的噪声和细节过于敏感,导致了过度拟合的现象。
3.1.5. 异常值
异常值是极端的例子,对算法有太大的影响。如果你的1岁大的孩子看到的第一只猫是无毛猫,这将对他对猫的概念产生重大影响,需要用多个正常猫的例子来纠正。
3.1.6. 混淆变量
模式识别和分析通常需要结合数据,特别是当寻找因果关系时。当不同数据模式因数据分析目的而相关联而没有实际因果关系时,混淆变量就会出现。人们通常认为,喝红葡萄酒会引起偏头痛发作,因为据报道,喝红葡萄酒和偏头痛是相继发生的。新研究表明,偏头痛发作是由食欲变化引起的,如对红葡萄酒的渴望。喝红葡萄酒是一种副作用,而不是偏头痛的原因!
3.2. 可追溯性
对于非人工智能系统,算法就是代码。对于人工智能系统,情况并非如此,因此我们不知道人工智能系统做出决策的确切标准。此外,很难监督训练数据的总体情况,因此很难很好地了解人工智能系统将如何表现。因此,当结果明显不正确时,很难确定原因并纠正。是训练数据、参数、神经网络还是标签?可追溯性的缺乏导致过度自信和信心不足,并导致责任的不确定性(是软件、数据、标签还是上下文造成的?)以及缺乏可维护性。
4. 测试AI
减轻人工智能风险的关键是透明度。在偏差方面,我们需要了解训练数据和标签的代表性,但最重要的是,我们需要了解期望和结果对所有相关方的重要性如何反映在结果中。建立适当程度的信心和可追溯性也需要透明度。通过照亮代码,将无法实现透明度。即使这是可能的,通过显示代码的热图,表明当分析对象的特定部分或产生层中的计算时,神经网络的哪个部分是活跃的,这意味着几乎什么都没有。观察大脑内部将永远不会显示思想或决定。它可以显示哪个部分被激活,但所有的心理过程都涉及多个大脑部分,最重要的是过去的经验。人工智能系统是黑盒子,因此我们应该像在黑盒测试中一样测试它们:从外部,开发基于现实输入的测试用例。从那里确定对输出的期望。听起来很传统,很熟悉,不是吗?测试人工智能的基本逻辑可能很熟悉,具体的任务和元素却大不相同。
传统上,需求和规格是预先确定的,测试人员在开始时就可以使用它们。在人工智能中,需求和规格是如此多样化和动态,以至于不能期望它们在开始时完全和一次就确定。产品所有者和业务顾问应该交付需求,但测试人员需要采取主动,以他们需要的形式、粒度和现实性获得需求。
4.1. 神经网络、训练数据和标签
静态测试可以及早发现缺陷。可以选择神经网络:有哪些替代方案?对于这项审查,需要对所有可能的神经网络及其特定质量和缺点有广泛的了解。训练数据和标签可以审查和评估风险敏感性:
1. 数据是否很好地反映了现实生活中的数据来源、用户、视角和价值观?是否有被忽视的相关数据来源?研究结果可能表明选择偏差、确认偏差或不足。
2. 数据来源和数据类型是否平均分配?不同类型、不同组别的代表性如何?研究结果可能表明不足、选择偏差、确认偏差或异常值。
3. 标签是否公平地反映了现实生活中的群体或数据类型?标签是否与系统应分析的现实情况或模式相匹配?研究结果可能表明过度拟合、不足或混淆变量。
4. 数据是否足够?期望的刷新速率是多少?是否匹配?现实世界中是否有事件在数据中没有得到充分反映?
4.2. 识别用户
该系统的所有者并不是唯一有价值的视角!像搜索系统这样的AI系统是其用户世界的重要组成部分,也是那些被其“贴标签”的人的重要组成部分。AI系统的质量可能具有道德、社会和政治方面的意义和影响,因此需要加以考虑。AI的用户往往是多样化的,很难知道。他们不是一组固定的训练有素的用户,他们不会聚集在一个房间里,他们的行为和期望是可以管理的。他们可能是整个世界,就像搜索引擎的情况一样:一个访问阿姆斯特丹的美国游客或一个经验丰富的艺术爱好者在搜索“珍珠女孩”时,他们的需求和期望非常不同。
一个博物馆的搜索引擎。游客想知道一张特定的图片是否用于展示,艺术爱好者也想了解背景信息和草图。接下来:随着世界的变化,用户和他们的期望可能会在一夜之间发生变化。想想巴黎圣母院的大火对那些搜索“巴黎圣母院”或“巴黎大火”的用户可能有什么影响。AI在DNA序列中识别病毒应该考虑到不断发生的可能突变。因此,测试AI首先要确定用户或系统输出将被使用的视角。这意味着研究系统使用的数据分析,采访流程所有者或采访真实用户。
4.3. 分析用户
识别用户或数据组是一回事,确定他们想要什么、期望什么、需要什么、害怕什么或会如何表现是另一回事。测试人员需要的是用户和视角的简介:他们的背景是什么,他们想要什么,什么会让他们反感或不安,他们有什么期望?一种创建简介的技术是“Persona”。这种技术的关键是不要考虑整个用户组,而是从该组中选择一个人,并尽可能使其具体化。Persona的好处是,它让用户变得栩栩如生。这是一种从内到外考虑用户视角的技术。例如:美国游客的Persona可以是乔,一个水管工,住在芝加哥,白人,45岁,已婚,有两个孩子。他读书不多,但喜欢色彩鲜艳、制作精良的绘画。他的爱好是钓鱼和翻新旧音响设备。
4.4. 创建测试用例
对于测试人员来说,这部分可能是大部分工作。根据每个用户的个人资料,输入和预期输出被确定下来。良好的个人资料将提供一个良好的基础,但可能需要来自研究和访谈的额外信息。识别测试用例永远不会是完整的,也不会是决定性的:你不能测试一切,在人工智能领域也是如此。世界和用户都在变化,因此需要在需求中反映出这一点。它从最重要的案例开始;它将不断增长,需要永久维护。
4.5. 测试数据
使用哪些测试数据以及是否可以创建、发现或操作这些数据取决于上下文和生产数据的可用性。数据创建或操作(如图像识别)是很难做到的,有时是无用的,甚至是适得其反的。使用工具来操作或创建图像会带来额外的变量,这可能会产生偏差!测试数据对现实世界图片的代表性如何?如果算法在创建的数据中识别出只能在测试数据中找到的方面,测试的价值就会受到影响。AI测试人员从真实数据中创建测试数据集,并严格地将这些数据与训练数据分开。由于AI系统是动态的,它所使用的世界是动态的,测试数据必须定期更新。
4.6. 度量
人工智能的输出不是布尔值:它们是所有可能结果(标签)的计算结果。要确定系统的性能,仅仅确定哪个标签的得分最高是不够的。指标是必要的。以图像识别为例:我们想知道一张猫的图片是否会被识别为猫。在实践中,这意味着标签“猫”的得分将高于“狗”。如果猫的得分是0.43,狗的得分是0.41,那么猫就赢了。但得分之间的微小差异可能表明故障概率。在搜索引擎中,我们想知道顶部的结果是否是用户期望的前1名,但如果前1名的结果是列表中的第2名,听起来就不对,但仍然比第3名要好。我们想知道所有相关结果是否都在前10名(这被称为精确度),或者前10名中没有冒犯性的结果。根据上下文,我们需要用指标来处理AI系统的输出,对其性能进行评估。测试人员需要具备确定相关指标并将其纳入测试的能力。
4.7. 权重和契约
对人工智能系统的总体评估还必须纳入相对重要性。与任何测试一样,一些结果比其他结果更重要。想想具有高度道德影响的结果,比如种族偏差。作为设计测试用例的一部分,它们对总体评估的权重应根据风险和对用户的重要性来确定。测试人员需要对这些风险敏感,能够识别它们,将其转化为测试用例和指标。他们需要了解系统使用情况和用户心理的背景。人工智能测试人员需要同理心和世界意识。
在电影《机械战警》中,墨菲警官的系统中有一个“首要指令”程序:如果他试图逮捕他所在公司的董事总经理,他的系统就会关闭。人工智能系统也可以有“首要指令”,或者出现无法接受的结果,比如冒犯性语言、色情网站或撞倒行人。我们称之为“契约”:在测试结果中,这些可能不需要的结果应该被标签为阻止问题,或者至少应该被给予很高的权重。
4.8. 测试自动化
人工智能测试需要大量的自动化。测试用例的数量要求它这样做,并且需要对新版本进行重复测试。当人工智能系统不断训练时,测试是必要的,就像搜索引擎的情况一样,其中存在来自实际数据的反馈回路。但是,即使当人工智能系统没有不断训练并且系统版本稳定时,不断变化的环境也需要不断训练。即使系统没有改变,世界也会改变。测试自动化包括一个测试框架,测试用例将在人工智能系统上运行,并且人工智能系统的输出将被处理。以下是一个测试框架的基本设置。
4.9. 整体评估和优化输入
测试的结果不仅仅是一份需要修复的缺陷清单。如上文所述,如果没有严重的回归,缺陷是无法直接修复的。人工智能系统必须作为一个整体进行评估,因为随着许多测试用例和回归,没有哪个版本是完美的。如果一个新版本比旧版本更好,程序员希望知道该采用哪个版本。因此,测试结果应该综合成一个总结果:一个量化分数。为了给程序员提供如何调整(训练数据、标签、参数化)的指导,他们需要知道需要改进的领域。这是我们可以接近缺陷修复的地方。我们需要度量、权衡和契约来实现有意义的总体评分和优化线索。应该分析低分测试用例的原因:是过拟合、欠拟合还是其他风险领域?
4.10. AI测试示例
从左上到右下,然后从右上到左下:
1. 识别用户群体
2. 为每个用户群体创建角色
3. 写测试用例:根据每个用户组输入的预期顶级结果、非预期结果、度量和权重,在AI系统中运行测试用例
4. 处理结果
5. 根据每个测试用例的总权重创建测试结果
6. 将结果与以前版本的结果进行比较
5. 总结
人工智能的世界非常动态:算法不等同于代码,而是训练数据和标签的结果。随着世界的变化,训练数据将不断更新。人工智能的输出不是布尔值,而是所有标签的计算结果,这些结果可能都是相关的。尽管存在低透明度和偏差风险,但人工智能正被用于决策,是人们世界的重要组成部分。测试人员必须通过确定用户群体及其特定期望和需求,并展示系统如何反映这些期望和需求,在创建透明度方面发挥作用。为此,需要一个自动测试框架来比较人工智能系统的许多版本,不断监测生产质量,并为优化提供指导。
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com