概括:基于人工智能的工具已从模糊的未来愿景转变为实际产品,用于日常做出实际决策。然而,对于大多数人来说,深度学习系统的内部工作原理仍然是个谜。
如果你不知道输入数据在神经网络中层层传递时究竟发生了什么,你该如何测试输出的有效性?简单测试就能得到清晰易懂的结果的时代结束了吗?
首先,让我们明确区分使用基于人工智能的输出的测试应用程序和测试实际的机器学习系统。
如果您的应用程序属于第一类,则无需担心,也无需改变您的测试方法。基于 AI 的第三方工具不需要任何 VIP 处理;它们可以被视为黑匣子,就像您可能使用的“常规”确定性第三方产品一样。专注于测试您自己的产品在呈现 AI 输出时是否表现正常。
但是创建这些机器学习系统的公司又该怎么办呢?你如何验证它们确实发挥了应有的作用?
了解人工智能
如果说过去十年我们对人工智能和机器学习有什么了解的话,那就是一切都与数据有关,而且是大量的数据。这些数据在你的测试策略中起着核心作用。
最常用的方法是将可用的数据分为三部分:训练集、开发集和测试集。要了解如何测试您的 AI,您首先需要知道这三个集如何协同训练神经网络。
当你开发深度学习系统时,你需要将大量数据以明确定义的输入和预期输出或结果的形式输入到神经网络中。然后,你等待网络得出一组数学公式,这些公式最适合为你提供的大多数数据点计算正确的预期输出。
假设你正在开发一款基于人工智能的工具,用于检测患者肺部 X 射线图像中的癌细胞。这些经过预处理以便计算机可读的图像是你的输入数据,每张图像都有定义的输出或预期结果。这就是训练集。
尝试算法
当网络忙于优化一段时间后,您将需要检查它对新学习的公式的执行情况。您的训练算法已经输出了它在训练示例上的表现,也就是您一直以来输入的数据。但是,使用这个数字来评估算法并不是一个好主意。
网络很有可能会在多次查看的图像中正确检测出癌症,但这并不能说明它在处理其他图像(如生产中看到的图像)时的表现如何。您的癌症检测算法只有一次机会评估它看到的每张图像,并且它需要在此基础上可靠地预测癌症。
所以真正的问题是,当算法面对未经训练的全新数据时,它的表现如何?
这个新数据集被称为开发集,因为您可以根据训练后的网络在此数据集上的表现来调整神经网络模型。简而言之,如果网络在训练集和开发集(由未优化的图像组成,因为它们不是训练集的一部分)上都表现良好,那么这是一个很好的指标,表明它在处理日常生产中遇到的图像时也会表现良好。
如果在开发集上的表现较差,则您的网络模型需要进行一些微调,然后使用训练集进行更多训练,最后使用开发集评估新的、希望有所改善的性能。通常,您还会训练几个不同的网络,并根据模型在开发集上的表现决定在发布的产品中使用哪一个。
选择开发和测试数据集
这时你可能会问自己,这难道不是测试吗?其实不是。
将开发集输入到神经网络中,就好比开发人员在机器上试用他们构建的新功能,看看它们是否有效。不过,要彻底测试一项功能,需要一双全新的眼睛(通常是测试工程师)来避免偏见。同样,您需要使用全新的、从未使用过的数据集来验证机器学习系统的性能,因为这些系统也会出现偏差。
计算机是如何产生偏见的?如上所述,在开发过程中,您会根据模型在开发集上获得的结果对其进行调整,因此根据定义,您将选择最适合此特定数据集的模型。对于我们的癌症检测示例,如果开发集恰好主要由显示早期癌症和健康患者的图像组成,则网络在处理显示晚期癌症的图像时会遇到麻烦,因为您选择的网络模型在这些情况下表现不佳。
当然,你应该尝试使用均衡的训练和开发集,但如果不使用全新的数据集来测试最终算法,你就不会真正知道你是否成功做到了这一点。网络在测试集上的表现是它在现实世界中表现如何的最可靠指标。
因此,选择一个尽可能接近您的 AI 在生产中收到的数据的测试集非常重要。对于癌症检测算法,这意味着选择来自不同患者的不同质量、不同身体部位的各种图像。这些图像必须尽可能正确地标记为癌症或非癌症。现在,对于测试,您只需让算法评估所有测试示例并将算法的输出与预期输出进行比较。如果正确评估的图像百分比令人满意,则测试成功。
定义需求
你们当中那些经验丰富的测试人员肯定会问,这些结果中的“令人满意”是什么意思?在传统测试中,答案通常非常明确:输出应该对所有测试用例都正确。然而,当涉及到机器学习算法时,这几乎是不可能的,尤其是对于癌症检测等复杂问题。因此,要得出一个具体的数字,最好的起点是看看合格的人类在这项确切任务上的表现如何。
以我们的癌症检测为例,您需要评估训练有素的医生的表现(或者,如果您的目标更高,可以评估一支世界知名专家团队的表现),并以此作为您的目标。如果您的人工智能检测癌症的能力与此相当甚至更好,我们可以认为测试结果令人满意。
人工智能世界中基于风险的测试
到目前为止,我们一直在讨论正确评估图像的百分比作为测试结果的衡量标准。换句话说,你会根据有多少健康患者被诊断为癌症以及有多少患病患者被诊断为健康来评估你的深度学习算法。然而,这两者在现实世界中并不相同。
如果人工智能判定健康患者患有癌症,则会进行更多测试,如果其他测试没有显示任何问题,患者最终将被送回家。除了严重的健康恐慌外,一切都会好起来。另一方面,如果确实患有癌症的患者根据错误的评估被送回家,他们将失去开始治疗的宝贵时间。当癌症最终被发现时,他们被治愈的机会可能比算法一开始就正确评估他们的X光片的机会要小得多。
因此,您需要决定对假阳性和假阴性赋予多大的权重。与基于风险的非 AI 工具测试类似,即使某些测试用例可能失败,是否以当前状态发布产品的决定取决于与失败的测试用例相关的风险。让健康的患者接受更多测试的风险较低;让生病的患者回家则可能带来致命风险。
排除数据偏差
测试深度学习系统的另一个重要部分是偏差测试。由于神经网络严格根据训练数据做出决策,因此它们可能会模仿人类决策时出现的偏差,因为这些偏差通常反映在收集的数据集中。
让我们回到癌症检测的例子。当医生评估X光片时,他们也知道患者的病史,因此他们可能会无意识地更加关注终生吸烟者的图像,而不是年轻、不吸烟的患者的图像,因此他们可能更容易在后者的X光片中漏掉肺癌。
如果您使用医生的诊断来标记数据集的预期结果,这种偏差很可能会转移到您的算法中。尽管网络不会获得有关患者的任何其他信息,但吸烟者和非吸烟者的肺部肯定存在差异,因此网络可能会将非吸烟者肺部的外观与阴性癌症检测结果联系起来,从而无法在这些图像中检测到癌症。
为了排除神经网络中的偏差,您需要仔细分析测试结果(尤其是失败的结果)并尝试找出规律。例如,您可以比较算法对吸烟者和非吸烟者图像的成功率。如果存在明显差异,则算法可能在训练过程中出现偏差。如果有任何理由怀疑存在偏差,您需要使用定制的数据集执行额外的探索性测试,以确认或反驳您的怀疑。
正确的工具
这些复杂性可能会让您得出结论,您需要高度专业的工具来测试您的深度学习系统。但是,请放心,大部分艰苦的工作都由人工智能开发人员承担。
权重计算、数据处理和结果评估在开发过程中就已经融入到神经网络中,因为它们从一开始就是必需的。一旦神经网络建立起来,你就可以将任何数据集传入其中,它将输出结果以及该结果的整体准确性。剩下要做的就是将开发集与测试集切换,并查看网络的性能。无需任何新工具。
一切仍在测试中
测试 AI 系统与测试确定性工具并没有什么不同。虽然细节上有很大差异,但过程仍然是相同的:定义您的需求,评估每个测试用例失败的风险,运行测试,并评估加权的汇总结果是否达到或超过定义的水平。然后将一些探索性测试添加到组合中,以有偏差的结果形式查找错误。这不是魔术;这只是测试。
欢迎扫码关注公号,讨论交流~