您实际上是如何完成一个机器学习项目的?有哪些工具可以帮助完成每一步?
> photo by tolga ulkan on unsplash
在这个时代,每个人都在学习机器学习(ml)。似乎每个收集数据的公司都在尝试找出某种方式来使用ai和ml分析其业务并提供自动化凯发app官网的解决方案。
到2027年,机器学习的市值预计将达到1170亿美元—《财富》杂志
ml的大量涌入导致许多新手没有正式的背景。令人高兴的是,更多的人开始兴奋并学习了这一领域,这很高兴,但很显然,将ml项目整合到生产环境中并不是一件容易的事。
image from the 2020 state of enterprise ml by algorithmia based on 750 businesses
55%的企业尚未将它们的ml模型投入生产— algorithmia
如果您拥有训练模型所必需的数据和计算资源,那么很多人似乎都认为ml项目非常简单。他们再犯错了。如果不部署模型,这种假设似乎会导致大量的时间和金钱成本。
> naive assumption of the ml lifecycle (image by author)
在本文中,我们将讨论ml项目的生命周期实际上是什么样的,以及一些有助于解决该问题的工具。
机器学习生命周期
实际上,机器学习项目不是简单明了的,它们是在改善数据,模型和评估之间进行的一个循环,从未真正完成。这个周期对于开发ml模型至关重要,因为它专注于使用模型结果和评估来完善数据集。高质量数据集是训练高质量模型的最可靠方法。如此反复循环的速度决定了您的成本,幸运的是,有些工具可以在不牺牲质量的情况下帮助加快循环速度。
> a realistic example of ml lifecycle (image by author)
与任何系统一样,即使已部署的ml模型也需要监视,维护和更新。您不能只是部署ml模型而忘了它,而是期望它在其余时间中能够像在现实世界中的测试集上一样工作。当您发现模型中的偏差,添加新数据源,需要其他功能等时,部署在生产环境中的ml模型将需要更新。这使您重新回到数据,模型和评估周期。
截至2021年,深度学习在十多年来一直很重要,并帮助使ml成为市场的领先和中心。机器学习行业蓬勃发展,开发了无数产品来协助机器学习模型的创建。ml生命周期的每一步都有一些工具,您可以使用它们来加快流程,而不会成为没有ml项目的公司之一。
下一节将深入探讨ml生命周期的每个阶段,并重点介绍流行的工具。
阶段1:数据
> data in the ml lifecycle (image by author)
虽然最终目标是建立高质量的模型,但是训练一个好的模型的生命线在于传递的数据的数量,更重要的是质量。
ml生命周期中与数据相关的主要步骤是:
数据收集-无论质量如何,都收集尽可能多的原始数据最后,无论如何,仅注释其中的一小部分,这是大部分成本的来源。当模型性能出现问题时,可以根据需要添加大量数据,这很有用。
定义注释模式-这是生命周期数据阶段最重要的部分之一,通常会被忽略。构造不佳的注释架构将导致类和边缘情况的模棱两可,从而使训练模型更加困难。
例如,对象检测模型的性能在很大程度上取决于大小,位置,方向和截断等属性。因此,在注释期间包括对象大小,密度和遮挡之类的属性可以提供创建模型可以学习的高质量训练数据集所需的关键元数据。
数据注释-注释是一次又一次地执行几个小时的相同任务的乏味过程,这就是为什么注释服务是一项蓬勃发展的业务的原因。结果是注释者可能会犯许多错误。尽管大多数注释公司保证最大错误百分比(例如最大错误为2%),但更大的问题是注释架构定义不正确,导致注释者决定以不同的方式标记样本。注释公司的质量检查团队很难发现这一点,这是您需要检查的事情。
改善数据集和注释-尝试改善模型性能时,您可能会在这里花费大部分时间。如果您的模型正在学习但表现不佳,那么罪魁祸首几乎总是一个训练数据集,其中包含偏见和错误,这些偏见和错误正在为模型创建性能上限。改善模型通常涉及诸如硬样本挖掘(添加与模型失败的其他样本相似的新训练数据),基于模型学习到的偏差重新平衡数据集,更新注释和模式以添加新标签并优化现有标签的方案。。
dagshub —数据集版本控制
fiftyone —可视化数据集并发现错误
阶段2:模型
> models in the ml lifecycle (image by author)
即使此过程的输出是模型,理想情况下,您仍将在此循环中花费最少的时间。
in industry, more time is spent on datasets than models. credit to andrej karpathy
探索现有的预训练模型-这里的目标是尽可能多地重用可用资源,以使自己最好地开始建模生产。如今,转移学习是深度学习的核心租户。您可能不会从头开始创建模型,而是对在相关任务上预先训练的现有模型进行微调。例如,如果要创建遮罩检测模型,则可能会从github下载预训练的面部检测模型,因为这是更受欢迎的话题,需要做更多的工作。
fiftyone 模型动物园—只需一行代码即可下载并运行模型
tensorflow hub —训练有素的机器学习模型的存储库
modelzoo.co —针对各种任务和库的预训练深度学习模型
构建训练循环-您的数据可能会与用于预训练模型的数据有所不同。对于图像数据集,在为模型设置训练管道时需要考虑输入分辨率和对象大小之类的东西。您还需要修改模型的输出结构,以匹配标签的类和结构。pytorch闪电提供了一种简单的方法,可以用有限的代码扩大模型训练的规模。
scikit learn —构建和可视化经典ml系统
pytorch,pytorch lightning,tensorflow,trax —流行的深度学习python库
sagemaker —在sagemaker ide中构建和训练ml系统
实验跟踪-这整个周期可能需要多次迭代。您最终将训练许多不同的模型,因此在跟踪模型的不同版本以及对其进行训练的超参数和数据时要一丝不苟,将大大有助于保持事物的组织性。
阶段3:评估
> evaluation in the ml lifecycle (image by author)
设法获得学习了训练数据的模型后,就该开始挖掘并查看其在新数据上的表现如何。
评估ml模型的关键步骤:
可视化模型输出-拥有训练有素的模型后,您需要立即在几个样本上运行它并查看输出。这是在对整个测试集进行评估之前,找出培训/评估管道中是否存在任何错误的最佳方法。它还将显示是否存在任何明显的错误,例如您的两个类的标签错误。
选择正确的指标-提出一个或几个指标可以帮助比较模型的整体性能。为了确保您选择适合您任务的最佳模型,应开发符合最终目标的指标。当您发现要跟踪的其他重要品质时,还应该更新指标。例如,如果要开始跟踪对象检测模型在小对象上的性能,请对包围盒<0 .05作为对象之一的对象使用map。
尽管这些总体数据集指标可用于比较多个模型的性能,但它们很少有助于理解如何提高模型的性能。
scikit学习-提供通用指标
python,numpy-开发自定义指标
查看故障案例-模型所做的一切都基于对其进行训练的数据。因此,假设它能够学习某些东西,如果它的性能比您预期的要差,则需要查看数据。查看模型运行良好的情况可能很有用,但是查看模型正确预测的假阳性和假阴性至关重要。在仔细研究了这些样本之后,您将开始看到模型中的故障模式。
例如,下图显示了来自“打开图像”数据集的样本,一个假阳性显示为后轮。事实证明,这种误报是缺少注释。验证数据集中的所有车轮注释并修复其他类似的错误可以帮助改善模型在车轮上的性能。
> image credit to tyler ganter (source)
制定凯发app官网的解决方案-确定故障案例是找出解决方法的第一步,以提高模型性能。在大多数情况下,它可以回溯到添加训练数据,类似于模型失败的地方,但是它还可以包括更改管道中的预处理或后处理步骤或修复注释之类的事情。无论凯发app官网的解决方案是什么,您都只能通过了解模型失败的地方来解决问题。
阶段4:生产
> deploying a model (image by author)
最后!您已经建立了一个模型,该模型可以很好地执行您的评估指标,并且在各种极端情况下都不会出现重大错误。
现在,您需要:
监控模型-测试您的部署,以确保您的模型相对于评估指标和推理速度之类的测试数据仍能按预期运行。
评估新数据-在生产中使用模型意味着您将经常通过从未经过测试的模型传递全新数据。进行评估并挖掘特定的样本,以查看模型如何处理遇到的任何新数据,这一点很重要。
继续理解模型-模型中的某些错误和偏见可能很根深蒂固,需要很长时间才能发现。您需要针对各种可能导致问题的边缘情况和趋势不断测试和探查模型,如果这些情况可能会被客户发现,则会引起问题。
扩展功能-即使一切运行正常,该模型也可能无法实现您期望的利润增长。从添加新类,开发新数据流到使模型更高效,有无数种方法可以扩展当前模型的功能以使其变得更好。每当您要改善系统时,都需要重新启动ml生命周期以更新数据,建模和评估所有内容,以确保新功能能够按预期工作。
fiftyone
上面的内容很笼统,没有偏见,但是我想向您介绍我一直在使用的工具。
在ml生命周期的各个部分都有许多工具。但是,非常缺乏工具可以帮助我在本文中强调的一些关键点。可视化复杂数据(例如图像或视频)和标签,或编写查询以查找模型效果不佳的特定情况等操作通常是通过手动脚本完成的。
我一直在voxel51上开发fiftyone,这是一种开源数据可视化工具,旨在帮助调试数据集和模型并填补这一空白。fiftyone使您可以在本地或远程可视化gui中的图像和视频数据集以及模型预测。它还提供了强大的功能,可以评估模型并针对数据集或模型输出的任何方面编写高级查询。
fiftyone可以在笔记本电脑上运行,因此请使用此colab笔记本电脑在浏览器中进行尝试。或者,您可以使用pip轻松安装它。
pip install fiftyone
> sample from object detection model and dataset in fiftyone (image by author)
概要
试图将机器学习(ml)纳入其业务的所有公司中只有一小部分设法将模型实际部署到生产中。ml模型的生命周期不是直截了当的,而是需要在数据和注释改进,模型和训练流水线构建以及样本级别评估之间进行连续迭代。如果您知道自己要干什么,那么这个周期最终可能会产生可用于生产的模型,但是还需要随着时间的推移进行维护和更新。幸运的是,开发了无数工具来帮助完成此过程的每个步骤。