测试AI系统:没有您想像的那么不同

摘要

基于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/102881966