本文来自Ketan Doshi
什么是企业机械学习(ML)?
怎样才能交付一个机器学习(ML)应用程序,为公司提供真正的业务价值?
一旦证明了ML可以为公司带来实质性的好处,如何将这种努力扩展到其他地方,并真正开始实现ML的场景?
如何在整个组织中扩展ML,并简化ML开发和交付过程,以标准化ML计划、共享和重用工作以及快速迭代?
一些世界领先的科技公司采用了哪些最佳做法?
通过一系列的文章,我的目标是探索这些引人入胜的问题,并理解沿途的挑战和学习。
在“真实世界”中如何训练ML模型,这与在“实验室”中构建ML原型有何不同?
如何将该型号投入生产,并使其每月都保持最佳性能?
处于这一趋势前沿的公司采用了哪些基础设施、系统架构和工具?
如何构建数据管道,从公司收集的大量数据中提取价值,并使其可用于ML和分析用例?
在第一篇文章中,我们将深入探讨构建和训练ML模型的关键步骤,因为这是这个过程的核心。
为了做到这一点,我们将对ML进行高层次的概述。
ML逐渐成熟
假设一家公司收集了大量的数据,并希望利用机器学习,从而显著改善客户的体验,或对其业务运营产生重大影响。
通常,大多数能够成功利用ML的公司都会经历不同的成熟阶段。
开始-确定问题并定义业务目标。启动研发活动,开发ML模型。
飞行员-第一个模型训练。生产中的应用准备就绪。
早期阶段-少数几个模型在生产一到两年。
中间阶段-生产中的多个模型,用于跨多个部门的各种业务场景。
高级——敏捷ML应用程序开发、标准化工具和快速实验和交付过程。
但这条路很难走,许多公司在第一阶段就陷入困境,无法从投资中获得有形的商业价值。
既然已经在较高的层次上讨论了长期的旅程,那么沿着这条道路来缩小一个ML项目的范围,并看看端到端所涉及的步骤。
ML应用程序生命周期和角色
交付一个ML应用程序涉及多个任务。在过去的几年里,许多专门的角色出现在这个行业来执行这些任务。
请注意,这一领域仍在不断发展,而且这一术语并不标准。如果你去了几家不同的公司,问他们这些任务和角色,你可能会得到稍微不同的解释。这些角色之间的界限有些模糊。在某些情况下,同一个人可能会履行所有这些职责。
然而,其中一些概念开始具体化。因此,对这个过程有一个大致的了解对我们来说仍然是有用的。
这个过程从数据科学家构建和训练模型开始,通常使用训练数据的快照。
然后,数据工程师设置数据管道,从公司的分析商店获取培训数据。管道还可以从操作数据源填充分析存储。
然后,经过训练的模型必须与最终用户使用的业务应用程序集成。它获取模型用于进行预测的输入数据。然后将预测结果呈现给最终用户。这是由应用程序开发人员或产品工程师完成的。
ML工程师将ML应用程序部署到生产环境中。
最后,mlops负责保持应用程序在生产环境中运行并监视其性能。
正如刚才看到的,应用程序生命周期的第一阶段是构建和训练ML模型。这通常是项目中最“迷人”和最具技术挑战性的部分。让我们放大看看它涉及到什么。
训练一个“真实世界”的ML模型和一个“演示”的ML项目有何不同?
互联网上不缺资源、教程、在线课程和项目,这些项目涵盖了为一系列应用构建机器学习或深度学习模型的所有可能技术方面。然而,大多数都涉及在一个非常受控的“演示”环境中构建ML模型。
这与在“现实世界”中会遇到什么不同?到目前为止,最大的区别在于访问标记数据集。演示项目总是从一个精心策划的数据集开始,该数据集已经做好了准备。数据已经被清理并系统地标记。由于数据集中的字段已被选中并确定了范围,因此问题被整齐地限定。
另一方面,在一个真正的项目中,从一张白板开始,准备数据集成为项目中最需要解决的问题之一。必须处理一些棘手的问题:
有哪些数据源可用?
如何查询和提取数据?
包含哪些字段?
将使用哪些数据功能?
如何获得标签?
数据格式是否正确?
是否缺少值或垃圾值?
应该使用哪些数据片/段?
需要多少培训数据?
如何才能增加自己的数据?
其次,在演示项目中,重点通常是挤出模型的最后一个精度下降,或获得最新的结果。在许多在线比赛中,79.0345和79.0312之间的公制得分差异可能意味着排行榜上有数百个排名。
在现实世界的项目中,花更多的几个星期来提高一到两个指标,可能不值得。模型的准确性可能只是整个业务结果的一个因素。快速交付工作解决方案,并有明显的客户改进、获得反馈并快速迭代往往更为重要。
模型建立和培训工作流程
假设要解决的问题和业务目标是明确的,并且您对如何解决它有一个初步的假设。通常,在创建ML模型时有几个步骤,由数据科学家或数据科学家团队执行。
数据发现:可以从浏览数据源开始,以发现要使用的数据集,还需要确定哪些数据将用作目标标签。
数据清理:数据可能很混乱,需要验证和清理。可能存在丢失或无效的值、异常值、重复项等。有些字段可能有无用的值,例如“客户流失原因”这样的字段有许多简单地说“未知”的值。某些值的格式可能不正确,例如数字、日期。如果在处理图像,可能会有模糊的图片,不同大小和分辨率的图像,光线不足,或从奇怪的角度拍摄的照片。
探索性数据分析(EDA):查看数据分布以确定字段之间的模式和关系。可以识别季节性趋势或将数据分成相关的部分等。
特征工程(featureengineering):通过丰富某些字段、执行聚合或汇总,或者通过组合多个字段来进行计算,来派生新的特征。例如,可以使用日期字段来提取自月份或年份开始的天数的新特征,或者提取是否是假日的新特征。
特征选择:确定对预测结果的模型最有用的特征。删除对模型没有任何价值的功能。
模型选择:可以尝试几种不同的机器学习算法或深度学习体系结构,以找到性能最好的一种。
超参数调整:对于每个模型,有几个超参数值需要优化,例如神经网络中隐藏层的数量和每层的大小。
模型训练:选择一个模型,选择一些数据特征,尝试一些超参数,训练模型。
模型评估:根据验证数据集测试模型。跟踪并比较每个模型的指标。
推论:在确定了一个有前途的潜在模型(以及特征和超参数)之后,建立逻辑,对看不见的数据进行预测。
重复,重复,再重复:改变一些东西,尝试一个不同的想法,不断重复,直到你找到一个好的方法。
必须保持细致的笔记来跟踪每一个试验,使用的数据特征和超参数,以及获得的指标。这将帮助您返回并确定有希望的模型,以便进行进一步的研究,并能够重新运行测试和再现结果。
模型构建挑战
建立一个ML模型是困难的。这项工作具有很强的研究性和迭代性,需要大量的实验性尝试和误差。
与大多数软件开发项目不同,您知道如何解决手头的问题,ML项目有很多不确定性和未知因素。一开始,你可能不知道解决方案是什么,它是否可行,或者需要多长时间。估计和规划时间表需要相当多的猜测。
通常,ML模型是黑盒。当一个模型不能产生期望的结果时,你可能不确定它失败的确切原因。在许多情况下,解决方法是简单地提出另一个假设或尝试不同的东西,并希望它能提高性能。
最后,模型准备好后,最困难的工作才刚刚开始
经过几周或几个月的工作,您终于解决了问题,并且拥有了一个在开发环境中表现良好的模型。
然而,正如我们将在下一阶段看到的,这只是到达目的地的一小部分。更大的挑战和隐患摆在面前。
模型开发通常在Jupyter笔记本中完成。很可能是使用CSV或Excel文件中数据集的静态快照来训练模型。培训在开发人员的本地笔记本电脑上运行,或者可能在云中的虚拟机上运行。
换句话说,模型的开发是相当独立的,并且与公司的应用程序和数据管道隔离开来。集成模型并将其部署到生产环境的艰苦工作即将开始。
结论
正如刚才看到的,Enterprise ML (企业机器学习)是一个过程,和所有过程一样,它从第一步开始,即构建ML模型。在许多方面,这一部分在技术上既复杂又令人兴奋。