我们谈了很多关于将机器学习代码投入生产的过程。 但是,一旦模型投入生产,您还没有完成,您才刚刚开始。 模型将不得不面对它最大的敌人:现实世界!
下面我们来探讨您可以实施哪些类型的监控,以了解您的模型在现实世界中的表现。 这既考虑了持续训练,也考虑了训练模型的使用。 主要包括如下几种类型:
- 监控您的基础设施
- 监控数据
- 监控训练
- 监控现实世界中的值
比如,监控你的实验。
比如,监控你的容器CPU占用情况。
监控您的基础设施
构建任何系统的工程师通常都会进行一些监控,以确保服务正常运行且基础设施未满负荷。这种监控对您的机器学习组件也很有用,因为它可以帮助您发现:
- 传入数据的频率和数量的变化。
- 我们可能依赖于数据或处理的第三方系统的更改和故障。
- 随着需求的增长,需要升级基础设施。
- 随着数据消耗的增加,需要优化/分发机器学习组件的代码。
- 当达到某些限制时,需要重新评估您选择的解决方案。
其中一些情况也可能对您的模型产生某些不太明显的影响。例如,接收到的数据的数量/频率的增加/减少可能表明现实世界中发生了某些事件(风暴、地震),这反过来可能会是模型的结果出现偏差。它也可能是安全漏洞之类的副作用,例如:尝试 DDoS 攻击,这反过来可能会对您的模型结果产生负面影响(例如:在推荐系统中)。
用于此类监控的一些流行工具包括但不限于:
监控数据
现实世界会发生变化,您的数据也会发生变化。由于这是训练和使用模型的最重要组成部分,我们需要有一些东西来了解数据何时发生漂移以便对其采取行动。
这可以通过跟踪有关数据的一些统计数据(中位数、方差、标准差等)来完成。您可以为用于训练模型的数据计算这些,并在每次新的训练运行时随时间跟踪它们。然后,您也可以以一定的频率对一批已用于模型推理的最新数据执行相同的操作。这两个图表将帮助您理解:
- 输入的训练数据是否随时间发生了变化,以及变化了多少。
- 数据变化的频率,以及您是否可能需要更频繁地训练模型。
- 选择用于训练的数据是否与用于推理的数据不同。这可能是训练不够频繁的症状,但也可能是由训练数据的选择过程引起的,这可能是有偏差的。
数据已更改的情况可能会导致您需要调查更改是什么以及是否需要对其采取行动。这种变化可能表明输入和输出之间的关系发生了变化,或者现实世界中的某些事物以预期的方式(例如:价格变化)或意外的方式(例如:自然灾害)影响了数据。也可能是更改对结果没有任何影响,不需要采取进一步行动。
除了这些统计措施之外,人们还可以实施一组验证,这些验证反过来会在数据与预期不符时提供警报。例如,由于某些特征的最小/最大范围被超过、丢失数据的可接受阈值被超过或训练和推理数据的统计数据之间的差异大于阈值而触发的警报。
监控训练
您可能正在以一定的频率训练您的模型,以跟上不断变化的世界。在此训练过程中,您可以跟踪某些事情,这有助于发现变化和调查问题。这些包括:
- 在您使用的算法允许的情况下跟踪特征重要性。特征最重要的变化可能表明数据可能存在偏差,或者输入和输出之间的关系发生变化。
- 跟踪模型质量度量(F1 分数、准确性等)。与旧版本相比,新模型的性能可能突然变得更差。这可能表明数据发生了变化,导致当前方法过时或不适合正在解决的问题。
- 跟踪有关用于训练模型的输入数据的统计信息。
- 跟踪可能表明模型在产品中的性能的任何其他模型的KPI(例如:用例验证)
这些度量的变化可能表明新输入数据中存在问题,或者是因为数据漂移,或者是数据清理过程中的问题。此外,它还可能表明需要一种不同的方法来处理数据的新状态。
监控现实世界中的值
对于生产中的每个软件系统,我们都需要了解您的用户如何使用该软件。我们通过分析来做到这一点,其中涉及收集有关最终用户在应用程序上所做操作的数据,以推断某些功能的价值。与基于规则的系统一样,分析可以帮助您了解机器学习组件对产品和用户的影响。
例如,由机器学习驱动的功能上的用户行为变化可能表明新模型版本不再为用户提供积极价值。或者,考虑到现实世界中发生的变化,这也可能意味着模型已经过时。
这种数据通常显示在一些交互式仪表板上,允许人们监控某些重要的 KPI,并为感兴趣的利益相关者生成报告。在某些系统中,这些数据还用于通过根据这些 KPI 的变化提供警报来查明问题。可能受机器学习驱动功能影响的 KPI 是您可以利用的。这些可以帮助您了解更改这些功能对现实世界中整体用户体验的影响。
总结
一旦机器学习组件投入使用,您有很多选项可以监控它们。您不必实现所有这些,但你需要确定什么对您的团队有意义、您正在解决的问题、您预见的可能问题、您为解决方案选择的方法以及产品的成熟度。