机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践

2020 年 12 月 23 日

机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践

本文最初发表于 Towards Data Science 博客,经原作者 Bruce H. Cottman 授权,InfoQ 中文站翻译并分享。


本文主要介绍了在机器学习项目的最初设计阶段中,你可能会遇到的陷阱,并详细阐述如何避免这些陷阱的最佳实践。



图 1:机器学习应用的迭代生命周期


你是否成功设计、训练和测试了一个机器学习应用(Machine Learning Application,MLA)?虽然经过了实验室的审核,但机器学习应用的表现却是不能令人接受的,甚至可能在生产中失败?


如果是这样,请继续阅读本文,我将详细介绍我的同事和我遇到过的陷阱。接下来我将详细讨论最佳实践,其中一些是我们已经开发的可避免这些陷阱的解决方案。


方法


降低机器学习应用设计、开发和部署的高成本和负担,是 DataOps、DevOps、MLOps、GitOps、CloudOps......xOps 的方法论领域,其中,Ops 代表运营(Operations)。


我们认为,你应该按照这个顺序,先学会爬行,再学会行走,再学会跑步,然后也许是再学会飞行。


在我们看来,xOps 就相当于机器学习应用生命周期中的行走、跑步和飞行。


我们从爬行开始。


本文重点讨论项目启动时的陷阱和最佳实践:机器学习应用设计阶段。


项目管理被描述为陷阱和最佳实践。


项目管理可以布置成一个步骤图(边和节点)。按特定顺序执行的任务就是瀑布式项目管理方法。一个例子是按设计、开发、测试和最后部署的顺序排列。


注:我们有两个项目取得了成功,但也有很多项目失败了。用瀑布项目方法按顺序完成这些任务。对于失败的项目,我们不是没有时间,就是没有资金。这些项目都麻烦,要花掉很多周末的时间。


机器学习应用项目管理被想象成一种连续的任务循环图(参见图 1)。我们也可以把一个应用项目看作是一个任务清单,其中每个任务都是部分完成的。这些任务中有些可以并行执行,有些依赖于其他任务,有些重复执行,直到应用变成“垃圾箱”。


注:我们建议你通过迭代和异步的方式来完成任务。


但愿以上就是我们需要讨论的关于机器学习应用项目管理方法的全部内容。从现在开始,我们将重点介绍一些在机器学习应用设计阶段所遇到的比较多的陷阱。这些陷阱来自于 40 多年的综合经验和大约 18 个机器学习应用项目。


对于本文所列举的任何陷阱,都会详细说明一种或多种最佳实践的变通办法或解决方案。每个最佳实践通常都是一个组件任务,它只有尽可能少的先验输入。你会注意到,有些任务有不可避免的启动依赖性。


在机器学习应用项目生命周期中,我们也陷入了开发和生产过程中的陷阱。我们(通常)用最佳实践来发现自我。


陷阱和最佳实践


陷阱 1:寻找问题的机器学习解决方案


我们之所以把这个陷阱放在第一个位置,是因为作为一家咨询集团,主要是在 2016 年及更早的时候,在业务问题不需要机器学习解决方案的时候,我们常常将精力投入到机器学习方案。


对所有这些客户来说,他们想要说他们正在使用机器学习应用,无论他们是否需要机器学习,还是没有为机器学习做好准备。


陷阱 2:没有数据,没有发现问题


请不要笑,但在 2017 年之前的早些时候,我们受雇于客户,却没有发现任何数据或问题。


我们发现,第 1 个陷阱和第 2 个陷阱都需要解决,然后才能继续。


最佳实践 1:了解业务问题,定义机器学习应用解决方案


不要与那些不能或不愿意让你定义可行的机器学习解决方案的公司合作。


最佳实践 2:低成本意味着低成功率


你的第一个项目应该增加功能,而不是替换和改进现有功能。


要证明机器学习的增值,首先要避免将机器学习应用于组织的遗留(现有)系统。说起来容易做起来难!


注:你可能最终会理解组织或部门的业务流程以及该流程的系统实现。对于希望用机器学习解决的业务用例,系统实现将很少或完全不了解。


最佳实践 3:查找并确定业务用例、流程和 / 或数据流图


关键绩效指标(Key Performance Indicators,KPI)被组织视为重要指标。组织可以衡量各部门、流程和项目的健康指标。


另外,对利益相关者进行调查,找出最让他们失望的地方。


举例来说,一家连锁酒店衡量房间的可用性,或者一家餐厅衡量桌子的可用性。机器学习可以根据过去的预订情况预测未来的预订情况。但是,更有价值的机器学习会降低可用性。


最佳实践 4:每次只做一个机器学习应用


一旦确定了业务用例问题,就可以提出一个机器学习应用解决方案。在第一个机器学习应用取得可衡量的成功之后,你就可以启动其他的机器学习应用项目了。


最佳实践 5:当第一个机器学习应用取得成功后,通过启动更多的机器学习应用项目来增加投资


这种最佳实践是突出的。但不那么明显的是,在第一个机器学习应用项目投入生产之前,你的赞助商可能希望启动更多的机器学习应用项目。


你的赞助者(或你)可能会因为实验室中训练、测试和验证的漂亮结果而非常兴奋。提醒自己和他们要对过去的灾难保持警觉。


陷阱 3:设计单体架构


创建单体应用会导致瀑布式开发过程。不同的步骤和应用的各个部分是高度相关的。


最佳实践 6:设计组件管道或微服务架构


将机器学习应用设计成组件或微服务的管道。在这种情况下,每个组件都是一个可分离的机器学习微服务。每个组件都是完全可执行的,彼此独立,需要明确定义的输入和输出。


技巧:基于组件的架构能够让你的团队以异步的方式进行开发机器学习应用的不同部分。


最佳实践 7:机器学习应用设计蓝图


设计的第一部分规定了机器学习应用的功能性和非功能性需求。确定的需求构成了机器学习应用的架构设计。此外,需求将决定生产策略,并对机器学习应用进行具体测试。


技巧:制定并广泛分享机器学习应用架构蓝图,展示端到端集成机器学习应用管道中的各个逻辑组件。


最佳实践 8:使用软件工程最佳实践


在机器学习中运用软件开发项目的经验。


由于输入数据和调整参数对随机机器学习的应用比确定性应用有更大的影响,因此机器学习就不同。然而,你将会发现你过去的大部分软件工程方法和最佳实践都适用于你的机器学习项目。


陷阱 4:重新发明轮子


我们看到了很多因为前期工作研究不到位而不得不重新启动项目的例子。


能工摹形,巧匠窃意。(Good artists borrow, great artists steal.)——Pablo Ruiz Picasso(1881 年 10 月 25 日——1973 年 4 月 8 日)


技巧:一开始花点时间在 GitHub 上搜索一下,然后继续完成这个项目。


技巧:我们的经验是,arvix.org 上的好论文都是用代码实现的,并放在 GitHub 上。代码片段有助于启动项目。


陷阱 5:解决方案太过简单


对于较小规模的项目,一个开箱即用的解决方案可能就足够了。不幸的是,为了确保在竞争中的领先优势,可能需要定制功能或多个机器学习模型组合。


最佳实践 9:自然语言处理应用架构需要 Transformer


由于自然语言处理应用在近两年发生了显著的变化,我们决定在本文中加入孤立的最佳实践。


我们曾在 2017 年部署了基于 GLOVE 的自然语言处理应用 。2018 年出现了 BERT Transformer。通过两个关键的改进,BERT 带来了自然语言处理性能的大跃进:


  1. BERT 被预先训练在一个语料库大小至少 4 个数量级(10000 倍),比我们的基于 GLOVE 的机器学习模型更加巨大;

  2. BERT 的模型参数的数量比我们基于 GLOVE 的 ML 模型大两个数量级(100 倍)。


[……] 扩展到极端规模的模型也会带来很大的改进 [……]


——Devlin 等人,2018 年


陷阱 6:不通报进展情况


无论机器学习应用有多成功,在项目过程中都会出现一些小问题。我们已经找到了一份提供给客户项目发起人和经理的 1~2 页的每周状态报告,即使他们没有要求这么做,但这可以消除项目中的大部分沟通错误。


故事:有一次,我们被炒了鱿鱼,但幸运的是,在两天之后,当几次误解澄清之后,我们又被重新雇用了。从此以后,每周的状态报告就成了必需的最佳实践。


陷阱 7:弄错了业务用例


无论你在项目中的位置如何,你的要求都是错误的,你需要停下来并重新评估。做好重新开始或者被解雇的准备。记录你新提出的解决方案。人生苦短,无法继续推出一个需要解决问题的机器学习应用解决方案。


陷阱 8:机器学习 App 不能满足需求


陷阱 8 与陷阱 7 类似。由于你正确地处理了业务用例,所以我们把它列在这里,但目前业务需求的优先级不高,或者消失了。这样的话,你唯一能做的就是提出不同的需求,去满足它们。要做好走人的准备。


陷阱 9:客户没有机器学习的经验或知识


早些时候,我们举办了《如何从机器学习中获益?》(How to benefit from Machine Learning?)课程。现在,我们将这些课程指向 Github、Coursera 和 Medium 博客上的 Awesome-X URL。


但我们不会放弃幻灯片,因为我们还是会经常用到它。


技巧:为客户的开发人员提供机器学习实践的指导。


陷阱 10:没有机器学习部署基础设施


对于“我们没有 ML 部署基础设施”这个问题,我们只有一个答案(可行的解决方案),那就是去获取一个云账户。


推出自己的基础设施是可以做到的。Apple、Amazon、Google、IBM、Zillow 和其他数十亿(或数万亿)的公司都已经做到了。我们的答案是:去获取一个云账户。


最佳实践 10:在云端中部署


Google Cloud Platform(GCP)是基于云端部署机器学习模型的主要选择之一。其他选择有 AWS、Microsoft Azure、Paperspace 等。


技巧:我们最喜欢的是免费的 GCP Colab。


最佳实践 11:定期审核解决方案


机器学习的最新进展正在发生,并且正在加速。你不想被另一个 BERT 类的事情蒙蔽双眼。


要及时掌握最新文献。你还可以向你的客户宣传全新的、优秀的机器学习项目。


结语


我们是从外部顾问的角度为客户设计机器学习应用而写的本文。但是,如果你是负责设计机器学习应用解决方案的内部员工或团队,那么本文提到的所有陷阱和最佳实践都同样适用。


人工智能 1.0 行业的第一波浪潮在 20 世纪 80 年代末可以说是失败的。人工智能 1.0 行业由于难以推出强大的生产机器学习应用而夭折。


人工智能 2.0 行业之所以取得成功,是因为强大的生产机器学习应用的推广和日常使用。我们预计成功将会持续增长,人们在生活中使用机器学习,甚至都没有意识到这一点(尽管存在营销行为)。


但愿这些陷阱和最佳实践能帮助你设计机器学习应用,并使它们成功地投入到生产环境中。


我们将详述在机器学习项目生命周期的开发和部署阶段遇到的更多陷阱。此外,我们还将列出我们用来摆脱困境的最佳实践。我们在后续博文中完成这一任务。


作者介绍:


Bruce H. Cottman,博士,物理学家、机器学习科学家、不断取得进步的软件工程师。热衷从新兴技术中推断未来。


原文链接:


https://towardsdatascience.com/10-pitfalls-and-11-best-practices-for-the-design-phase-of-a-machine-learning-application-project-66c3d599f87


2020 年 12 月 23 日 11:14581
用户头像
刘燕 InfoQ记者

发布了 469 篇内容, 共 146.8 次阅读, 收获喜欢 828 次。

关注

评论 2 条评论

发布
用户头像
想说,这翻译质量还可以提升一下。
2020 年 12 月 23 日 11:57
回复
是啊 ,云里雾里的...感觉内容挺好,但是就是看不懂,😃
2020 年 12 月 25 日 07:53
回复
没有更多评论了
发现更多内容

用 Python 实现定时自动化收取蚂蚁森林能量

Python小二

Python

给,你们想要的内存溢出MAT排查工具

田维常

内存溢出

释放数字化活力 高质量建设数字中国

CECBC区块链专委会

数字经济

DataOps系列丨DataOps的组织架构与挑战

DataPipeline

大数据

JVM运行时数据区,你真得好好学一学

Simon郎

JVM Java 分布式

架构师系列之6: python实现一致性hash

桃花原记

架构师训练营 W05 作业

Geek_f06ede

DataOps系列丨DataOps理念与设计原则

DataPipeline

大数据

阿里大牛八年打造,编程宝典,从初学到编程进阶—深入学习—实战

马士兵老师

Java 阿里巴巴 程序员 架构 编程语言

LeetCode 热题 - 递归

哈希说

LeetCode

区块链+供应链,双链融合开启新时代

CECBC区块链专委会

区块链 供应链物流

大专学历Java开发7年,从年初被裁到四面美团点评成功上岸,闭关七个月,入职那一天我哭了!

Java架构追梦

Java 阿里巴巴 面试 美团 java架构

五、一致性哈希算法

Geek_28b526

《ZooKeeper分布式过程协同技术详解》.pdf

田维常

电子书

结合实战和源码来聊聊Java中的SPI机制?

冰河

Java spi 服务发现

区块链的新信任模式将重塑传统金融业

CECBC区块链专委会

区块链 资产流动性

输入法B端市场转化:百度推动产业智能化的新路径

脑极体

《使用C ++的数据结构和程序设计》限时免费下载

计算机与AI

c++

Spring Cloud Config 实现分布式配置中心

AI乔治

Java 架构 微服务 Spring Cloud

架构师训练营第 1 期 - 第九周总结

Todd-Lee

极客大学架构师训练营

DataOps系列丨数据的「资产负债表」与「现状」

DataPipeline

大数据

石、火、水:从OriginOS透视移动系统进化论

脑极体

Maven-技术专题-Setting文件结构解析

李浩宇/Alex

Nacos实战及其源码分析

程序员Fox

Spring Cloud nacos spring cloud alibaba

第五周-笔记

leo

极客大学架构师训练营

第五周 - 作业

leo

极客大学架构师训练营

网络冲浪信任危机频发,区块链能否破局?

CECBC区块链专委会

区块链 征信透明

实现2nm工艺突破,台积电为何能给“摩尔定律”续命?

脑极体

Appium常用操作之「Toast提示信息获取」

清菡

git使用与原理剖析及其私服搭建

程序员Fox

git

消灭微服务的坏味道 之 循环依赖

码猿外

微服务 循环依赖 坏味道

解读2020之年终技术盘点特辑

解读2020之年终技术盘点特辑

机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践-InfoQ