在人工智能的训练和推理阶段进行测试并保证质量

测试是让人工智能项目发挥作用的核心要素。你不能简单地开发一个人工智能算法,把训练数据扔给它,然后就收工了。你必须实际验证训练数据在准确分类或回归数据方面做得足够好,有足够的泛化能力,而不会对数据进行过度拟合或欠拟合。这就需要使用验证技术,并预留一部分训练数据在验证阶段使用。从本质上讲,这是一种QA测试,你要确保算法和数据在一起的方式,也要考虑到超参数配置数据和相关的元数据都在一起工作,以提供你想要的预测结果。如果你在验证阶段弄错了,你应该回去,改变超参数,然后重新建立模型,如果你有更好的训练数据,也许会有更好的训练数据。做完这一切后,你再去用其他的套路测试数据来验证模型是否真的能正常工作。虽然这是测试和验证的所有方面,但它发生在AI项目的训练阶段。这是在人工智能模式投入使用之前。

首先,我们需要确保人工智能算法本身是有效的。如果算法实现错了,调整超参数和训练模型就没有意义了。然而,实际上,没有理由不善于实现算法,因为这些算法大多已经被内置于各种AI库中。如果你需要K-Means聚类或不同口味的神经网络或支持向量机或K-最近邻,你可以简单地在Python的scikit-learn或任何你选择的工具中调用该库函数,它应该可以工作。只有一种方法来计算!

ML开发人员不应该从头开始编码这些算法,除非你有一个非常好的理由这样做。这意味着如果你不是从头开始对它们进行编码,那么就实际代码而言,需要测试的东西很少–假设算法已经通过了测试。在一个人工智能项目中,QA永远不会关注人工智能算法本身或代码,假设它已经全部按照应该的方式实现了。

这样一来,人工智能模型本身的训练阶段就剩下两件事需要测试:训练数据和超参数配置数据。在后一种情况下,我们已经通过使用验证方法,包括K-fold交叉验证等方法解决了超参数设置的测试。如果你正在做任何AI模型培训,那么你应该知道如何做验证。这将有助于确定您的超参数设置是否正确。把另一项活动从QA任务清单上删除。

既然如此,那么剩下的就是测试数据本身对AI模型的QA。但这意味着什么?这不仅意味着数据质量,还意味着完整性。训练模型是否充分代表了你想概括的现实?您是否无意中在培训数据中加入了任何信息或人为的偏见?你是否跳过了那些在训练中有效但在推理过程中会失败的东西,因为真实世界的数据更复杂?这里人工智能模型的QA要做的是确保训练数据包括真实世界的代表性样本,并尽可能消除人为的偏见。

在机器学习模型之外,人工智能系统需要测试的其他方面,其实都是人工智能模型的外部。你需要测试将人工智能模型投入生产的代码–人工智能系统的运营化部分。这可能发生在AI模型投入生产之前,但那时你并没有真正测试AI模型。相反,你在测试使用该模型的系统。如果模型在测试过程中失败,那么使用该模型的其他代码要么是训练数据有问题,要么是某处配置有问题。你应该在测试训练模型数据和做验证的时候就发现了这一点,就像我们上面讨论的那样。

在生产中进行测试

一个经过适当验证的、具有良好归纳能力的系统,使用具有代表性的训练数据,并使用来自已经经过测试和验证的算法,应该会得到预期的结果。但是,当你没有得到这些预期的结果时,会发生什么?现实显然是混乱的。在现实世界中发生的事情,在你的测试环境中不会发生。然而,我们在训练阶段做了所有我们应该做的事情,我们的模型也通过了符合预期,但在 “推理 “阶段,当模型被操作化时,它却没有通过。这意味着我们需要有QA的方法来处理生产中的模型。

模型在推理阶段出现的问题,几乎都是数据的问题,或者是模型的训练方式与真实世界数据的不匹配。我们知道这个算法可行。我们知道,我们的训练模型数据和超参数已经配置到了最佳状态。也就是说,当模型失效时,我们就会出现数据或现实世界的不匹配问题。是输入的数据不好吗?如果问题是坏数据–修复它。

是不是模型的通用性不好?是否需要添加一些细微的数据来进一步训练模型?如果答案是后者,那就意味着我们需要经历一个全新的周期,用新的训练数据和超参数配置来开发人工智能模型,以处理对这些数据的正确拟合程度。不管是什么问题,运营人工智能模型的组织都需要一个可靠的方法,通过这个方法,他们可以密切关注人工智能模型的性能,并对那些模型的运行进行版本控制。

这就导致了一个名为 “ML ops”的新技术领域的出现,这个技术领域的重点不是建立或开发模型,而是在运行中管理模型。ML运维专注于模型版本、治理、安全、迭代和发现。基本上,在模型训练和开发之后,以及在模型投入生产的过程中,所发生的一切。

人工智能项目真的很独特,因为它们围绕着数据展开。在测试中,数据是保证不断增长和变化的东西。因此,你需要考虑到人工智能项目也在不断地成长和变化。这应该会让你对AI背景下的QA有一个新的认识。