导航菜单

教程|一份机器学习工程开发流程指南 教你如何交付机器学习项目

随着机器学习(ML)成为每个行业的重要组成部分,对机器学习工程师(MLE)的需求急剧增长。 MLE需要将机器学习技能与软件工程专业知识相结合,以找到针对特定应用的高性能模型,并解决新出现的实施挑战。从构建培训基础架构到准备部署模型。新机器学习团队遇到的最常见障碍之一是工程师习惯于传统软件工程的开发。开发新ML模型的过程从一开始就非常不确定,需要不断的试验才能找到比较。正确的模型。

许多类型的专业人士都面临着类似的情况:软件和业务开发人员,寻找适合产品市场的创业公司等。这些职业中的每一个都使用通用框架来帮助团队高效工作:软件开发敏捷/scrum,初创公司和美国空军的OODA环。 MLE还可以遵循类似的框架来应对不确定性并快速开发优质产品。

ML工程循环

在本文中,我们将描述ML的“OODA环”的概念:ML工程循环,其中ML工程师迭代地

1.分析2.选择方法3.实施4.测量

快速有效地发现最佳模型,适应未知环境。此外,我们将为每个阶段以及优化过程提供具体提示。

d3453dafebfa43858e5d0a6e900837bc

MLE戒指

提供高性能模型。例如,实现高预测精度的模型也受到存储器使用,预测时间等的约束。无论准确性,操作速度和产出多样性如何,绩效都由与最终产品成功最相关的指标定义。为简单起见,本文选择将“错误率”最小化为性能指标。

当刚开始确定新项目的范围时,就应该准确定义成功的标准,然后将其转换为模型指标。在产品方面,服务需要达到什么样的性能水平?例如,如果在新闻平台上向个人用户推荐5篇文章,我们需要多少相关内容,以及如何定义相关性?鉴于此性能标准和拥有的数据,可以构建的最简单的模型是什么?

ML工程环的目的是围绕开发过程设置一个死记硬背的框架,简化决策过程,专注于其中最重要的步骤。当不确定性增加时,即使是最有经验的工程师,这个框架仍然是非常有价值,例如,当模型意外地无法满足要求时,团队的目标突然改变等情况。

入门

要引导下面描述的循环,您应该从一个涉及非常少的不确定性的最小实现开始通常我们希望尽快建立足够的系统,以便我们可以评估其性能并开始迭代开发这通常意味着:

设置训练,开发和测试数据集,以及构建好一个简单的模型。

例如,如果要构建一个树木探测器来测量一个地区的树木种群,可能会使用类似的Kaggle竞赛中的现成训练集,以及来自目标区域的手工收集的一组照片用于开发和测试集。然后可以对原始像素进行逻辑回归,或者在训练图像上运行预训练网络(如RESNET)此时的目标不是一次性地完成项目,而是开始迭代周期以下是一些有所帮助的提示:

提示

关于测试集:

XX由于团队的目标是在测试集上表现良好,因此测试集应该反映产品或业务的需求。例如,如果您正在构建应用程序以检测自拍的皮肤状况,请随意训练任何图像集,但请确保测试集包含低光和低质量图像。更改测试集会更改团队的目标,因此尽早修复测试集并对其进行修改以反映项目,产品或业务目标的变化会很有帮助。测试集训练集大小设置得足够大,以使性能指标足够精确,以便在模型之间进行良好区分。尽可能为开发集和测试集创建标签或注释。错误标志的测试集等同于错误指定的产品要求。了解人类在测试集上的表现,或现有/竞争系统的表现如何,将为您提供最佳的错误率,即今天可以实现的最佳性能。最终目标是使测试性能尽可能接近我们的猜测,以获得最佳性能。

关于开发和培训集:

开发集是团队的测试性能代理,可用于超参数调整。因此,它应具有与测试集相同的分布。一种好的方法是首先收集大量样本,然后将它们随机分成开发和测试集。如果生产数据被认为是有噪声的,请务必通过使用数据增强或降级来解决训练集中的噪声问题。获得初始原型后,应检查其在培训,开发和测试集上的性能,以评估测试性能与产品所需性能之间的差异。开始迭代开发模型!d8d851a31cc843c3bca50cbd48deadb4

分析

识别性能瓶颈

分析阶段就像一个医学诊断:它配备了一组可以执行的诊断,目的是为限制模型性能的因素提供最可能的诊断。在实践中,可能存在导致当前结果的许多不同重叠问题。不要试图理解每个缺点,而是要了解最重要的因素,因为随着模型的改进,许多小问题会改变甚至消失。

下面,我们列出了一组通用的诊断程序。

每个分析的一个良好起点是查看培训,开发和测试性能。建议在每个实验结束时使用代码,以便习惯于每次查看这些数字。通常,训练集错误<=开发集错误<=测试集错误(如果每组中的数据遵循相同的分布)。根据前一个实验的训练,开发和测试错误率,您可以快速查看这些因素中的哪些是当前约束约束。

2ed5c5882438419d9c1abfa83336530f

权重直方图

诊断和治疗

1.优化算法尚未精确调整。查看学习曲线,看看损失是否在减少并检查是否过度拟合。可以观察到神经元反应的直方图以检查饱和度(导致梯度消失)。 2.训练集可能包含错误标记或损坏的数据。在使用训练算法之前,手动检查代码阶段的一些训练示例。 3.模型可能太小或泛化能力不强。

如果开发集错误是当前限制因素,则可能是由以下问题引起的:

1.模型可能太大或过于贴合。 2.没有足够的训练数据来学习基本模型的良好模型。 3.培训数据的分布与开发或测试数据分布不匹配。 4.模型的超参数设置很差。 5.模型归纳和数据匹配不好。

如果测试集错误是当前的限制因素,这通常是由于开发集太小或实验期间过度拟合的开发集。

对于上述任何一种情况,您可以通过手动检查模型错误的一组随机示例来了解模型的失败。

1. Try to visualize the data to identify common types of errors, then browse through the examples and record how often each error occurs. 2. Some samples may be mislabeled or have multiple reasonable labels. 3. Some samples may be more difficult to predict than others, or may lack the context needed to make the right decisions.

Please note that many of the above diagnostics have direct and obvious responses. For example, if the training data is too small, then you only need to get more training data! We still find it psychologically useful to separate the analysis phase from the selection phase, because many people are easily trapped in trying random methods without really digging into potential The problem. In addition, an effort to return to error analysis with an open mind will often lead to more useful insights that can improve decisions made.

Example

67d23e05267f4fbc8239ce49893488d3

As we all know, satellite data is very noisy and usually needs to be checked. In the case of Insight, when AI researcher Jack Kwok was building a segmentation system to help with disaster recovery, he noticed that although his segmentation model performed well on his satellite image training set, it did not perform well on the development set. The reason is that the hurricane image quality is lower and more blurred than the training data. Adding additional enhancements to the training pipeline, applying blur to the image helps narrow the gap between training and development performance.

d6957e62f1954a31af6bf2bcc7a99c75

Selection method

Find the easiest way to resolve bottlenecks

After the analysis, you need to have a good understanding of the types of errors that the model has and the factors that affect performance. There may be several possible solutions for a given diagnosis, and the next step is to enumerate and optimize them.

Some of the above diagnostics have potential solutions. For example, if the training data set is too small, collecting more training data can be a fairly quick and simple solution.

xx建议ML工程师列出尽可能多的想法,然后选择一个简单,快速的解决方案。如果现有解决方案可能有效,请尝试在其上使用迁移学习。

提示

根据诊断,以下是一些常见的解决方案。

如果您需要调整优化程序以更好地适应数据:

对于数值优化器,请尝试调整学习速率或动量设置。尝试不同的初始化策略或从预先训练的模型开始。尝试一种更容易调整的模型。在深度学习中,具有批量标准化的剩余网络或网络可能更容易训练。

如果模型不符合训练数据:

使用更大或更具表现力的模型类。检查标记错误,缺少字段等的训练集上的模型错误示例。在培训数据清理方面投入时间可以显着提高绩效。

如果模型在开发集中表现不佳:

添加更多培训数据。使用真实训练示例生成的新样本扩充数据。例如,如果您注意到树形检测器在模糊图像上始终表现不佳,请使用OpenCV增强图像以使图像看起来有点模糊。搜索更广泛或更细粒度的超参数范围,以确保在开发集上找到性能最佳的模型。尝试不同形式的正则化(例如权重衰减,丢失或决策树的修剪)。尝试不同的模型,不同类型的模型可以改变数据拟合度和泛化能力。最好从最简单的模型开始。

0c753b3e3c9143e087b114e18e9ef999

实施

只构建您需要构建和快速完成的内容

此阶段的目标是快速实现基础模型,以便您可以测量结果并从中学习,然后快速返回开发周期。因此,建议重点关注构建当前实验所需的内容。

提示

Most people overestimate the cost of collecting and tagging data and underestimate the difficulty of solving problems in a data-poor environment.

When collecting and tagging data:

View data regularly. View the raw data, view and view the tags after preprocessing. This is very important! Capture many errors by keeping a close eye on the data in each step. Labeling and cleaning data is a common task. Most people overestimate the cost of collecting and tagging data and underestimate the difficulty of solving problems in a data-poor environment. Once in the rhythm, you can easily mark 20 images per minute. Thinking, do you want to spend an hour tagging images and spend an hour solving a simple classification problem with 1200 image datasets, or spend 3 weeks trying to learn models from 5 samples?

When constructing a new model, start with a similar existing implementation. Many similar research papers are open source, which will save a lot of development time. For any questions, it is recommended to perform the following steps in succession:

Reproduce the experiment under the article. 3. Slowly adjust the model and data to meet the needs of the task. 4. Rewrite any parts you need.

Write a test program to check that the gradient, tensor values, input data, and labels are formatted correctly. Do this when you initially set up the model so that once you capture the error and resolve it, you won't encounter it again.

577c270d0862407b96538227e32c574c

Measurement

Print out the test results you need and any other metrics.

If the performance of the experimental results improves, this may indicate that you are on the right track. In this case, it might be a good time to figure out the good components and make sure that the rest of the team can reproduce the experiment.

On the other hand, if performance is poor or there is not enough improvement, you need to decide whether to try again (back to the analysis phase) or give up the current idea. This depends on the cost of both, the cost of trying and the cost of sunk.

Tips

xx

有用的绩效指标包括模型的准确性和损失,以及业务价值指标。注意,业务相关的指标最终是重要的,因为它们决定了目前开发的模型的有用性。如果测试指标与业务指标不同,则此测量周期结束是停止并考虑更改优化标准或测试集的好时机。由于在每个开发循环结束时都打印出相关的指标,此时也是计算其他指标的时机,可以在分析阶段帮助你看决定是否继续使用当前的想法。最终会建立一个“仪表板”,其中包含测试指标和业务指标,以及每次实验结束时可以看到的其他有用数据。

优化循环

尽管任务固有的不确定性,上面的ML工程环将帮助开发者朝着更好的模型方向前进。遗憾的是,它无法保证立刻开发出正确的模型,还需要我们需要培养自己在每个阶段做出正确选择的能力,比如确定性能瓶颈、决定尝试哪些解决方案、如何正确实现,以及如何衡量应用程序的性能。此外,还应该花时间考虑提高迭代的质量和速度,以便在每个周期中取得最大进展,并且可以快速完成多次迭代。

提示

xxxx如果分析阶段的结果不令人满意,请创建一个总结实验结果的脚本,从培训和开发集中收集错误并对其进行格式化。仪表板经常使用的诊断输出可以帮助您克服目前的想法。如果你想要尝试一些东西,只需选择一个方向来试验它。试图一次做太多事情会减慢速度。收集数据是获得更好性能的常用方法,投资工具以使数据更易于收集,清理和标记是有意义的。如果您感到陷入诊断瓶颈或者不知道如何选择好的模型来尝试下一步,请考虑联系该领域的专家。专家通常可以在错误分析期间提供有用的见解,研究论文或经验丰富的ML从业者可能会在您尝试试验的事物列表中添加创意解决方案。良好的实施技能很重要,编码约定可以防止错误。如果实验花费的时间太长,请考虑花一些时间寻找代码优化或与系统专家讨论如何加快培训速度。与其他决策一样,只有在解决当前疼痛点时才能处理这些项目。有些团队花了太多时间建立一个“完美”的框架,但发现真正的麻烦在其他地方。

结论

机器学习项目具有固有的不确定性,上面推荐的方法旨在为开发人员提供一些指导。虽然每个实验的结果都是不可预测的,但很难负责实现特定的准确性目标,但至少您可以负责完成错误分析,开发思路清单,编写代码以及查看其工作原理。

作者信息

数据科学家Emmanuel

文章的原标题《how to deliver on machine learning projects》,译者:海燕

北风网

(本文是网站的摘录或转载。版权归原作者或出版媒体所有。如果您有版权问题,请与我们联系。)