2018.12.05
DataCanvas布道师团队成员之
首席产品架构师
张 晓 林
"如何交付一个机器学习项目
今天,我们分享探讨一个实战话题:如何交付一个机器学习项目。DataCanvas首席产品架构师张晓林精选推荐并编译下文,旨在提供总体思路和具体方法。由于本次内容篇幅较长,我们将分期进行发布。
随着机器学习(ML)成为每个行业的重要组成部分,对机器学习工程师(MLE)的需求正在急剧增长。 机器学习工程师将机器学习技能与软件工程专业知识相结合,为特定应用程序找到高性能模型,并应对出现的实施挑战——从构建培训基础架构到准备部署模型。
与此同时,新的在线资源已经萌芽,以培训工程师来构建ML模型并解决遇到的各种软件挑战。 然而,新数据科学团队最常见的障碍之一是保持工程师习惯使用传统软件工程的相同水平的前进。
这一挑战最紧迫的原因是开发新ML模型的过程在一开始就非常不确定。毕竟很难知道模型在给定的训练运行结束时的表现如何,更不用说通过广泛的调整或不同的建模假设可以实现什么样的性能了。
许多类型的专业人员(比如软件和商业开发人员,寻求产品市场契合的初创公司,只有有限信息的飞行员等)都面临着类似的情况。每种职业中都采用了一个相同的框架(比如敏捷的软件开发,美国空军的OODA迭代等),以帮助他们的团队在不确定性中高效地工作。机器学习工程师可以遵循类似的框架来应对不确定性并快速提供优质产品。
在本文中,我们将介绍一个适用于对机器学习的“OODA迭代”:机器学习工程迭代。它的关键环节有:分析—选择设计方法—实施—测试的过程,能够快速有效地发现最佳模型并适应未知情况。此外,我们还将为每个阶段提供具体技巧,并优化整个过程。
机器学习团队的成功通常意味着在给定的约束条件下提供高性能模型。例如,在特定内存使用情况下,推理时间和公平性的约束条件下,实现高预测准确性的模型。性能是由与最终产品成功最相关的指标定义的,无论是准确性,速度,还是输出多样性等等。为简单起见,我们选择将“错误率”最小化作为下面的性能指标。
在最初确定新项目的范围时,我们应该准确定义成功标准,然后将其转换为模型指标。
那么在产品方面,一项服务达到什么样的指标才会被认为有用的?例如,如果我们要在新闻平台上向个人用户推荐5篇文章,我们需要多少相关内容,以及我们如何定义相关性? 鉴于此性能标准和现有数据,可以构建的最简单的模型是什么?
机器学习工程迭代的目的是围绕开发过程设置一个程式化的框架,简化决策过程,专注于最重要的后续步骤。 随着从业者在经验方面的进步,该过程成为第二天性,不断增长的专业知识可以快速地实现分析结论。也就是说,当不确定性增加时(比如当模型无法满足要求时,或在产品需求突然改变时),即使是最有经验的工程师,这个框架仍然非常有价值。
要引导下述迭代,首先应该从一个涉及非常少的不确定性的最小实现开始。通常我们希望尽快“获得一个基线”,以便我们可以评估其性能并开始迭代。这通常意味着:
• 准备模型训练、开发和测试数据集
• 完成一个简单的基线模型
举个栗子,如果我们正在构建一个树木探测器来测量一个地区的树木种群,我们可能会使用类似Kaggle竞赛中的现成数据集,以及来自目标区域的手工收集的一组照片用于开发和测试集。然后我们可以对原始像素进行逻辑回归,或者在训练图像上运行预训练网络(如ResNet)。
这里的目标不是一次性解决项目,而是开始我们的模型迭代。为了达成这个目标,以下是两个相关Tips:
• 由于团队的目标是在测试集上表现良好,因此测试集实际上是对团队目标的描述。也就是说,测试集应该反映产品或业务的需求。例如,如果你正在构建一个应用程序来检测自拍的皮肤状况,你可以随意对任何一组图像进行训练,但前提时要确保测试集包含光线不足且质量差的图像,因为很多自拍属于这种情况。
• 更改测试集会改变团队的目标,因此尽早修复测试集并对其进行修改以反映项目、产品或业务目标的变化会很有帮助。
• 使测试和开发数据集足够大,以确保模型的性能指标更加准确。如果数据集太小,那么你最终需要根据噪声结果做出决策。
• 尽可能准确地标注开发和测试集标签。错误标记将导致错误的产品目标。
• 了解人在测试集上的表现,或者现有竞品的表现,将会很有帮助。他们为你提供了最优错误率——即可能达到的最佳性能。
• 对于许多任务来说,能够达到与人类测试性能相同的结果,通常是它们良好的长期目标。在任何情况下,最终目标是使测试性能尽可能接近我们的猜测,以获得最佳性能。
• 开发数据集是测试性能的关键,可用于调整超参数。 因此,理想情况下,它应该来自与测试集相同的分布、但不相交的用户/输入组以避免数据泄漏。 确保达成这一情况的好方法之一,是在最初策划一个大样本池,随后将它们随机分成开发和测试集。
• 如果你预判生产数据集会有噪声,请确保通过使用增广数据或降级来解决训练集中的噪音问题。毕竟你不能期望专门用于锐利图像上训练的模型可以适用于模糊图像。
在获得初始模型后,你可以对它在训练、开发和测试数据集上的性能做检查。这就标志着你在模型开发中第一次迭代完成。 评估测试性能与产品所需性能之间的差距,接下来就可以迭代开发了!