近年来,机器学习有了快速发展,这导致许多公司和初创公司在不了解陷阱的情况下深入该领域。常见的例子是构建ML管道时涉及的陷阱。
机器学习管道很复杂,有几种失败或被滥用的方式。参与ML项目的利益相关者需要了解机器学习管道如何失败,可能出现的陷阱,以及如何避免这些陷阱。
在构建机器学习管道时,有几个陷阱你应该注意到。最常见的陷阱是黑箱问题--管道过于复杂,难以理解。这可能会导致在识别某个系统的问题或为什么它没有按照预期工作时失败。
为了了解其他陷阱,我们将看看一个典型的ML管道架构,包括所涉及的步骤,以及在各个步骤下需要避免的陷阱。
一般的ML管道架构
机器学习管道帮助团队组织和自动化ML工作流程。管道还为ML(和数据)工程师提供了一种管理训练数据的方法,协调训练和服务工作,并在生产中管理模型。
让我们来看看ML管道中的典型流程,它定义了其架构。
一个ML管道应该专注于以下步骤。
-
数据摄取。收集必要的数据是整个过程中的第一步。用于训练的数据将由数据科学家或具有业务专长的人组成的专门团队与数据工程师共同定义。
-
数据验证和 预处理:收集的数据要经过大量的修改。这经常是手动完成的,以格式化、清洁、标签和增强数据,以确保模型的可接受的数据质量。模型的特征是它在训练和生产中都要利用的数据值。
-
模型训练。训练是整个程序中最重要的方面之一。数据科学家将模型与以前的数据相匹配,以便从中学习,训练它对未见过的数据作出预测。
-
模型分析和验证。为了保证较高的预测准确性,训练好的模型要对照测试和验证数据进行验证。当测试的结果被比较时,模型可能已经在不同的数据上被调整/修改/训练过。
-
模型部署。最后阶段是将ML模型应用到生产环境中。因此,从本质上讲,最终用户可以利用它来获得基于实时数据的预测。
-
管线协调。管道协调技术采用一个简单的协作界面来自动化和管理所有的管道过程,在某些情况下,也包括基础设施。
-
元数据管理。这一步跟踪元数据,如代码版本、模型版本、超参数值、环境和评估指标结果,以一种使它们在你的公司内部可以访问和协作的方式组织它们。
在ML管道架构方面有几种选择,我们会依靠这些供应商来提供ML管道和服务,如谷歌云和AWS。例如,Azure ML管道,有助于创建、管理和优化机器学习工作流程。它是一个独立的可部署的ML工作流程的过程。它的使用相当简单,并提供各种附加管道,每个管道都有独特的功能。
ML管道步骤中的常见陷阱
运行ML管道,从摄取数据到建模,操作模型可能是非常繁琐的。管理管道也是ML应用生命周期中的一个重要困难。在本节中,你将了解在构建ML管道的每个步骤中可能遇到的常见陷阱。
数据摄取步骤
处理各种数据源
数据摄取是指将数据从许多来源转移到一个集中的数据库,通常是一个数据仓库,在那里它可以被下游系统消费。这可以在实时或批处理模式下完成。数据摄取和数据版本形成了数据分析架构的核心骨架。关于这个步骤,最常见的陷阱是关于不同格式和类型的数据,根据数据的性质,可能会有混乱和不同的处理。
批量模式
最普遍的一种数据摄取模式是批处理。在批处理中,摄取层在定义的基础上获取源数据,并将其移动到数据仓库或其他数据库中。批处理可能由一个时间表、一个预定义的逻辑序列或某些预定义的标准来启动。因为批处理通常成本较低,所以在不需要实时数据摄取的情况下,经常采用批处理。
实时流模式
实时流是一种将数据从源头实时摄取到目标的技术。流媒体没有周期性元素,这意味着一旦数据在源头可以访问,就会被摄入到数据仓库中。没有等待期。这需要一个能够不断监测数据生产者的新数据的系统。
解决方案
这里最重要的规则是在整个管道中保持一个一致的数据层。
即使在从各种数据源获取数据时,也要始终专注于维护具有类似格式的数据。
- 你需要有良好的报告和其他下游分析系统,并以良好的数据质量和可追溯的数据脉络为基础,进行良好的工作。
- 你的数据需要保持一致,因为数据可能是通过不同的模式(实时和批处理)摄入的
数据验证和处理
选择了错误的架构
数据验证和数据处理是可能被管道的问题所阻碍的两个步骤。因为数据源经常变化,所以随着时间的推移,收集的数据格式和类型也会发生变化,所以数据输入系统的未来保护是一个重要的问题。
在数据输入和管道过程中,速度可能是一个问题。例如,建立一个实时管道是非常昂贵的,因此,评估你的公司真正需要的速度是至关重要的。
忽略了数据质量监控
例如,在计算机可以进行批处理任务之前,其所有的输入数据必须准备好;这意味着必须对其进行彻底检查。批量工作中出现的数据质量问题、数据错误、误差和软件故障会使整个过程停滞不前,更糟糕的是,会造成无声的模型故障。
解决方案
必须对数据质量进行彻底监控,以确保管道中的以下步骤都在利用高质量的数据。小的数据错误,如日期错误,可能会导致批处理过程失败。
说到这里,人们必须始终牢记,在生产服务器上运行的模型将利用真实世界的数据来为用户进行预测,因此我们还需要监测数据分布随时间的变化。
创建一个ML模型并不是一项简单的任务,为了使模型在不同的环境中表现良好,需要高质量的数据。进入管道的坏数据不仅会导致你的模型功能不正确,而且在做出关键的商业决策时,也可能是毁灭性的,特别是在医疗保健或自动驾驶汽车等关键任务部门。
模型训练
在模型训练中使用未经验证和非结构化的数据
机器学习工程师在人工智能研究中犯的最普遍的错误之一是使用未经验证的和非结构化的数据。未经验证的数据可能包含一些问题,如重复、冲突的数据、不准确或不完整的分类、差异,以及其他可能在整个训练过程中造成异常的数据问题。
解决方案
当然,补救所有这些问题的一个方法是利用一个实验跟踪工具。这样你就可以跟踪你所有的管道运行会话,你训练的多个版本的数据,在生产阶段,你只需点击几下就可以轻松监控你的模型版本和数据流。Neptune.ai是在这种情况下使用的合适工具。
模型验证和分析
不小心的预处理会在模型验证期间引入训练/测试泄漏
在模型部署之前,模型验证正确地评估了模型的真实世界的性能。有一个需要记住的要点清单。
- 模型应用。我们的模型可能被用于关键任务的应用。它是否可靠?
- 模型的可推广性。我们不希望在测试集上取得梦幻般的表现,但当我们的模型部署后,在现实世界中的表现却很差,让人失望。
- 模型评估。在部署过程中,我们并不总是知道新输入的基本事实。因此,在部署后衡量模型的性能可能是困难的。
在这个陷阱下,有两件事要始终牢记。
- 一个天真的训练/测试分割隐含地假设我们的数据由iid样本组成。
- 如果我们的数据违反了这一假设,那么测试集的表现可能会误导我们,导致我们高估了模型的预测能力。
解决方案
- 如果你的数据是iid,那么你可以使用标准分割或交叉验证。这里有一些Scikit-learn的实现。
- 当你的数据有一个连续的结构(如文本流、音频片段、视频片段),那么你应该使用适合这种情况的交叉验证器 。
模型部署
思考部署是最后一步
一个普遍的误解是,机器学习模型在部署后会自动进行自我修正,而且不应该对模型做什么。这在强化学习等领域可能是正确的,然而,即使使用这种技术,模型参数也要经过一段时间的更新才能达到最佳效果。
自然,典型的ML模型不是这样的,在部署阶段会出现很多错误。一个常见的错误是忽略了监测模型性能和生产中的使用成本。
解决方案
- 为了确保模型被监控,我们可以利用各种模型监控工具的使用,取决于它们的易用性、灵活性、监控功能、开销和警报系统。
同时,可以利用根本原因分析来确定问题的根本原因,然后用正确的行动计划来解决。
元数据管理
忽视管道元数据管理
正如你在这篇文章中所了解到的,与ML管道一起工作可以很快变得相当复杂。每个步骤都会产生元数据,如果不加以管理,可能会导致潜在的问题,如无法跟踪和调试管道故障。
解决方案
使用管道元数据管理工具来跟踪和管理管道的每一步所产生的元数据。Neptune.ai是其中一个在这方面做得相当好的工具。另一个善于管理管道元数据的工具是Kedro(由于Neptune-Kedro插件的存在,实际上可以很容易地将它们整合起来)。
有了Neptune.ai,你可以轻松地跟踪你所有的ML管道实验和元数据。Neptune可以用来避免在处理生产设置时出现问题。
元数据管理和实验跟踪
ML元数据存储是MLOps堆栈的一个重要组成部分,用于管理模型管道元数据。Neptune.ai是一个集中的元数据存储,可以在任何MLOps过程中使用。
语音识别项目在Neptune.ai中运行比较的例子 |来源
上面的例子显示了一个仪表板,比较了管道中的实验的指标和训练结果。实验训练的范围超出了上面的例子,它包括几个方便的功能,如以下:
- 超参数
- 学习曲线
- 训练代码和配置文件
- 预测(图像、表格等)。
- 诊断图表(混淆矩阵、ROC曲线等)--你可以使用外部库如Plotly等记录交互式图形图表。
- 控制台日志
- 硬件日志
- 模型二进制或到你的模型资产的位置
- 数据集版本
- 记录的模型训练运行和实验的链接
- 模型描述和注释
要了解更多,你可以查看Neptune的文档,它是非常详尽的。在这里,你可以学习如何将Neptune.ai与你的管道整合。
结论性的想法
正如你所看到的,在设计一个处理ML过程中所有不同阶段的管道时,可能会出很多问题。特别是在生产中,可能会出现几个意想不到的问题,造成严重的麻烦,甚至在某些情况下,造成业务损失。
我们在这里讨论的陷阱是很常见的,在这篇文章中,我们列出了一些解决方法来补救它们。这篇文章也让你对可能导致事情偏离原始规划的原因有了一个小小的了解。
