测试AI系统:没有你想象的那么不同

目录

摘要

内容

理解AI

试用算法

选择开发和测试数据集

定义需求

人工智能世界中基于风险的测试

清洗数据

正确的工具

它仍在测试中


摘要

基于人工智能的工具已经从模糊的未来主义愿景转变为用于做出现实生活决策的实际产品。 尽管如此,对于大多数人来说,深度学习系统的内部运作仍然是个谜。 如果你不知道输入数据是通过一层又一层的神经网络输入的时候究竟发生了什么,你应该如何测试输出的有效性? 这不是魔术; 它只是测试。

内容

基于人工智能的工具已从模糊的未来主义愿景转变为日常使用的实际产品,以制定现实生活中的决策。 尽管如此,对于大多数人来说,深度学习系统的内部运作仍然是个谜。

如果你不知道输入数据是通过一层又一层的神经网络输入的时候究竟发生了什么,你应该如何测试输出的有效性? 简单测试的日子是否具有明确且可理解的结果?

首先,让我们明确区分测试消耗基于AI的输出的应用程序和测试实际的机器学习系统。

如果您的应用程序属于第一类,则无需担心或改变您的测试方法。 基于AI的第三方工具不需要任何VIP处理; 它们可以被视为黑盒子,就像您可能使用的“常规”确定性第三方产品一样。 当您使用AI输出时,请集中精力测试您自己的产品是否正常运行。
但是那些创建这些机器学习系统的公司呢? 你如何验证他们确实做了他们应该做的事情?

理解AI

如果我们在过去十年中学到了关于人工智能和机器学习的知识,那就是数据,以及很多数据。 这些数据是您测试策略的核心部分。

最常用的方法是将可用的数据分为三个部分:训练集,开发集和测试集。 要了解如何测试AI,首先需要知道这三组如何一起训练神经网络。

当您开发深度学习系统时,您可以通过以明确定义的输入和预期输出或结果的形式将大量数据提供给神经网络。 然后,您等待网络提出一组数学公式,这些公式最适合计算您提供的大多数数据点的正确预期输出。

假设您正在创建一个基于AI的工具,可以检测患者肺部X射线图像中的癌细胞。 这些预处理为计算机可读的图像是输入数据,每个图像都有一个定义的输出或预期的结果。 那是训练集。

试用算法

一旦网络忙于优化一段时间,您将需要检查它对新学习的公式的处理情况。 您的训练算法已经输出了它在训练样例上的表现,这意味着您一直在喂养它的数据。 但是,使用此数字来评估算法并不是一个好主意。

有可能网络会在多次看到的图像中正确地检测到癌症,但这并不能说明它将如何在其他图像上执行,例如它将在生产中看到的图像。 您的癌症检测算法只有一次机会评估它所看到的每个图像,并且需要根据这一点可靠地预测癌症。

所以真正的问题是,当提供未经过训练的全新数据时,算法如何执行?

这个新数据集称为开发集,因为您可以根据训练好的网络在此集上执行的程度来调整您的神经网络模型。 简而言之,如果网络在训练集和开发集(由于它们不是训练集的一部分而未被优化的图像组成)中表现良好,那么这是一个很好的指标,它也将在 它将在生产中日复一日地面对的形象。

如果它在开发集上表现更差,那么您的网络模型需要进行一些微调,然后使用训练集进行一些更多的培训,最后使用开发集评估新的,希望改进的性能。 通常,您还将训练几个不同的网络,并根据模型在开发集上的表现来决定在您发布的产品中使用哪个网络。


选择开发和测试数据集

此时你可能会问自己,是不是在测试? 好吧,不是真的。

将开发集提供到神经网络中可以与开发人员进行比较,他们尝试使用他们在计算机上构建的新功能来查看它们是否正常工作。 然而,为了彻底测试一个特征,需要一双新眼睛 - 最常见的是测试工程师 - 来避免偏见。 同样,您将需要使用一个新的,从未使用过的数据集来验证机器学习系统的性能,因为这些系统也会变得有偏见。

计算机如何变得有偏见? 如上所述,在开发期间,您可以根据开发集上的结果调整模型,因此根据定义,您将选择最适合此特定数据集的模型。 对于我们的癌症检测实例,如果开发装置巧合地主要包括显示癌症早期阶段和健康患者的图像,那么网络将难以处理显示癌症后期阶段的图像,因为您选择的网络模型效果不佳 对于那些情况。

当然,您应该尝试使用均衡的训练和开发集,但是如果不使用全新的数据集来测试最终算法,您就不会真正知道是否设法做到了这一点。 网络在测试集上的性能是它在现实世界中表现如何的最可靠指标。

因此,选择一个类似于AI将在生产中尽可能接收的数据的测试集非常重要。 对于癌症检测算法,这意味着从不同的患者中选择具有不同身体部位的不同质量的各种图像。 这些图像必须尽可能正确地标记为癌性或非癌性。 现在,对于测试,您只需让算法评估所有测试示例并将算法的输出与预期输出进行比较。 如果正确评估的图像的百分比令人满意,则测试成功。

定义需求

那些经验丰富的测试人员肯定会问,“满意”对于这些结果意味着什么? 在传统测试中,答案通常很明确:输出应该适用于所有测试用例。 然而,当涉及机器学习算法时,这几乎是不可能的,特别是对于诸如癌症检测的复杂问题。 因此,要想出具体的数字,最好的起点是看看人类在这项具体任务中的表现。

对于我们的癌症检测示例,您需要评估受过训练的医生的表现 - 或者,如果您想瞄准更高的目标,请评估世界知名专家团队 - 并将其作为您的目标。 如果您的AI检测到癌症或者更好,我们可以认为测试结果令人满意。

人工智能世界中基于风险的测试

到目前为止,我们一直在讨论正确评估图像的百分比作为测试结果中的指标。 换句话说,您将根据有多少健康患者被诊断为癌症以及有多少患病患者健康来评估您的深度学习算法。 但是,这两件事在现实世界中是不一样的。

如果AI确定健康的患者患有癌症,则将进行更多的测试,如果其他测试没有表明任何问题,患者最终将被送回家。 除了重大的健康恐慌之外,一切都会好起来的。 另一方面,如果确实患有癌症的患者根据不正确的评估被送回家,他们将失去开始治疗的宝贵时间。 当最终检测到癌症时,他们治愈的机会可能会比他们在算法首先正确评估他们的X射线时更糟糕。

因此,您需要确定将误报和误报放在哪个权重上。 与基于风险的非AI工具测试类似,即使某些测试用例可能失败,决定是否将产品发布到当前状态取决于与测试失败相关的风险。 让更健康的患者接受更多测试的风险很低; 将病人送回家是一种潜在的致命风险。

清洗数据

测试深度学习系统的另一个重要部分是偏差测试。 由于神经网络的决策严格依赖于他们接受培训的数据,因此他们冒着模仿我们在人类做出决策时看到的偏见的风险,因为这些偏差通常反映在收集的数据集中。

让我们回到我们的癌症检测示例。 当医生评估X射线图像时,他们也知道患者的病史,因此他们可能无意识地更加关注终身吸烟者的形象,而不是年轻的非吸烟患者,因此他们可能更容易错过肺癌。 后一位患者的X光片。

如果您使用医生的诊断标记数据集的预期结果,则此偏差可能会转移到您的算法中。 尽管网络不会获得有关患者的任何其他信息,但吸烟者和非吸烟者的肺部肯定存在差异,因此网络可能将非吸烟者肺部的外观与阴性癌症检测结果联系起来并且未能检测到癌症 在这些图像中。

为了排除神经网络中的偏差,您需要仔细分析测试结果 - 尤其是失败 - 并尝试找到模式。 例如,您可以比较吸烟者和非吸烟者图像的算法成功率。 如果存在明显的差异,则算法可能在训练期间变得有偏差。 如果有任何理由怀疑存在偏见,您需要使用定制的数据集执行其他探索性测试,以确认或反驳您的怀疑。

正确的工具

这些复杂性可能会让您得出结论,您需要使用高度专业化的工具来测试深度学习系统。 但是,请放心,AI开发人员将接手大部分艰苦的工作。

重量计算,数据处理和结果评估已经在开发过程中编织到神经网络中,因为它们从一开始就是必需的。 构建神经网络后,您可以将任何数据集传递给它,它将输出结果以及所述结果的整体准确性。 剩下要做的就是用您的测试集切换您的开发集,并查看您的网络性能。 不需要新的工具。

它仍在测试中

测试AI系统与测试确定性工具没有什么不同。 虽然细节存在很大差异,但仍然是相同的过程:定义您的需求,评估与每个测试用例失败相关的风险,运行测试,以及评估加权的聚合结果是否达到或高于定义的级别。 然后在混合中添加一些探索性测试,以发现有偏见的结果形式的错误。 这不是魔术; 它只是测试。

发布了397 篇原创文章 · 获赞 445 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/wodeyijia911/article/details/99999873