文章目录


2016 年 11 月,谷歌宣布将其多语言神经机器翻译系统整合到谷歌翻译中,标志着深度人工神经网络在大规模生产中的首批成功案例之一。1据 Google 称,通过此次更新,翻译质量的一次飞跃提升幅度超过了过去 10 年的总和。

深度学习的这种成功更新了对机器学习 (ML) 的广泛兴趣。从那时起,越来越多的公司转向机器学习来解决他们最具挑战性的问题。在短短五年内,机器学习几乎进入了我们生活的方方面面:我们如何获取信息、我们如何沟通、我们如何工作、我们如何找到爱。ML 的传播是如此之快,以至于已经很难想象没有它的生活。然而,在医疗保健、交通、农业等领域,甚至在帮助我们了解宇宙方面,还有更多的机器学习用例有待探索。2

许多人在听到“机器学习系统”时,只会想到正在使用的 ML 算法,例如逻辑回归或不同类型的神经网络。但是,该算法只是生产中的 ML 系统的一小部分。该系统还包括最初催生 ML 项目的业务需求、用户和开发人员与您的系统交互的界面、数据堆栈以及开发、监控和更新模型的逻辑,以及实现该逻辑交付的基础设施。图 1-1显示了 ML 系统的不同组件以及本书的哪些章节将介绍它们。

MLOPS 与 ML 系统设计之间的关系

MLOps 中的 Ops 来自 DevOps,是 Developments and Operations 的缩写。使某事可操作化意味着将其投入生产,包括部署、监控和维护。MLOps 是一组用于将 ML 投入生产的工具和最佳实践。

ML 系统设计对 MLOps 采用系统方法,这意味着它从整体上考虑 ML 系统,以确保所有组件及其利益相关者可以一起工作以满足指定的目标和要求。

【Designing ML Systems】第 1 章 :机器学习系统概述-LMLPHP

图 1-1。ML 系统的不同组件。“机器学习算法”通常是人们说机器学习时想到的,但它只是整个系统的一小部分。

有很多关于这方面的优秀书籍各种机器学习算法。本书没有详细介绍任何特定的算法,而是帮助读者从整体上理解整个 ML 系统。换句话说,本书的目标是为您提供一个框架来开发最适合您的问题的解决方案,而不管您最终可能使用哪种算法。随着新算法的不断开发,算法可能很快就会过时,但本书中提出的框架仍应适用于新算法。

本书的第一章旨在概述如何将 ML 模型投入生产。在讨论如何开发 ML 系统之前,重要的是要问一个基本问题,即何时以及何时不使用 ML。我们将介绍一些流行的 ML 用例来说明这一点。

在使用案例之后,我们将继续讨论部署 ML 系统的挑战,我们将通过将生产中的 ML 与研究中的 ML 以及传统软件进行比较来做到这一点。如果您一直在开发应用 ML 系统,那么您可能已经熟悉本章所写的内容。但是,如果您只在学术环境中使用过 ML,那么本章将真实地介绍真实的 ML世界并设置您的第一个应用程序以取得成功。

何时使用机器学习

随着其在行业中的迅速采用随着技术的发展,ML 已被证明是解决各种问题的强大工具。尽管该领域内外的人们产生了令人难以置信的兴奋和炒作,但 ML 并不是可以解决所有问题的神奇工具。即使对于 ML 可以解决的问题,ML 解决方案也可能不是最佳解决方案。在开始 ML 项目之前,您可能想询问 ML 是否必要或是否具有成本效益。3

要了解 ML 可以做什么,让我们来看看 ML 解决方案通常可以做什么:

我们将查看上述框架中的每个斜体关键词,以了解其对 ML 可以解决的问题的影响:

1. 学习:系统具备学习能力

关系数据库不是机器学习系统因为它没有学习的能力。您可以在关系数据库中显式声明两列之间的关系,但它本身不太可能弄清楚这两列之间的关系。

要让机器学习系统学习,它必须有一些东西可以学习。在大多数情况下,机器学习系统从数据中学习。在监督学习中,基于示例输入和输出对,ML 系统学习如何为任意输入生成输出。例如,如果您想构建一个机器学习系统来学习预测 Airbnb 房源的租金,您需要提供一个数据集,其中每个输入都是具有相关特征(面积、房间数量、社区、便利设施、评级)的房源该列表等),相关的输出是该列表的租金价格。一旦学会,这个 ML 系统应该能够根据其特征预测新上市的价格。

2. 复杂模式:有模式要学习,而且很复杂

ML 解决方案仅在以下情况下才有用有模式要学习。理智的人不会投资构建机器学习系统来预测公平骰子的下一个结果,因为这些结果的生成方式没有规律可循。4然而,股票的定价方式存在模式,因此公司已投资数十亿美元来构建 ML 系统来学习这些模式。

模式是否存在可能并不明显,或者如果模式存在,您的数据集或 ML 算法可能不足以捕获它们。例如,埃隆马斯克的推文如何影响加密货币价格可能存在某种模式。但是,除非您在他的推文上严格训练和评估您的 ML 模型,否则您不会知道。即使你所有的模型都无法对加密货币价格做出合理的预测,但这并不意味着没有模式。

考虑一个像 Airbnb 这样的网站,上面有很多房源;每个列表都带有一个邮政编码。如果您想将列表分类到它们所在的州,则不需要 ML 系统。由于模式很简单——每个邮政编码对应一个已知的州——你可以只使用一个查找表。

租金价格与其所有特征之间的关系遵循更复杂的模式,手动指定非常具有挑战性。ML 是一个很好的解决方案。您可以提供价格和特征,让您的机器学习系统找出模式,而不是告诉您的系统如何从特征列表中计算价格。ML解决方案与查找表解决方案以及一般传统软件解决方案的区别如图1-2所示。因此,ML 也被称为 Software 2.0。5

ML 在具有复杂模式的任务(例如对象检测和语音识别)方面非常成功。对机器而言复杂的事物不同于对人类而言复杂的事物。许多人类难以完成的任务对机器来说很容易——例如,提高 10 的次方数。另一方面,许多人类容易完成的任务对机器来说却很难——例如,决定是否存在图片中的一只猫。

【Designing ML Systems】第 1 章 :机器学习系统概述-LMLPHP

图 1-2。ML 解决方案不需要手动指定模式来计算输出,而是从输入和输出中学习模式

3. 现有数据:有数据,或有可能收集数据

因为 ML 从数据中学习,所以必须成为可供它学习的数据。考虑建立一个模型来预测一个人一年应该缴纳多少税是很有趣的,但除非您可以访问大量人口的税收和收入数据,否则这是不可能的。

零样本学习(有时称为零数据学习)环境中,ML 系统可以在没有针对该任务的数据进行训练的情况下对任务做出良好的预测。然而,这个 ML 系统之前接受过其他任务的数据训练,通常与所考虑的任务相关。因此,即使系统不需要数据来学习手头的任务,它仍然需要数据来学习。

也可以在没有数据的情况下启动 ML 系统。例如,在持续学习的背景下,无需对任何数据进行培训即可部署 ML 模型,但它们将从生产中的传入数据中学习。6然而,向用户提供训练不足的模型会带来一定的风险,例如糟糕的客户体验。

在没有数据且没有持续学习的情况下,许多公司遵循“假造直到你做到”的方法:推出一种服务于人类预测的产品,而不是 ML 模型,希望使用生成的数据来训练 ML以后的模型。

4. 预测:这是一个预测问题

ML 模型进行预测,因此它们只能解决需要预测性答案的问题。当您可以从大量廉价但近似的预测中受益时,ML 会特别有吸引力。在英语中,“predict”的意思是“估计未来的值”。例如,明天天气如何?谁将赢得今年的超级碗?用户接下来想看什么电影?

随着预测机器(例如,ML 模型)变得越来越有效,越来越多的问题被重新定义为预测问题。无论您有什么问题,您都可以将其框定为:“这个问题的答案是什么?” 不管这个问题是关于未来、现在,甚至是过去的事情。

计算密集型问题是一类已经非常成功地重构为预测性的问题。您可以将问题描述为:“这个过程的结果会是什么样子?”而不是计算一个过程的确切结果,这可能比 ML 在计算上更加昂贵和耗时。并使用 ML 模型对其进行近似。输出将是精确输出的近似值,但通常情况下,它已经足够好了。您可以在图形渲染中看到很多它,例如图像去噪和屏幕空间着色。7

5. 看不见的数据:看不见的数据与训练数据共享模式

您的模型从中学习的模式只有当看不见的数据也共享这些模式时,现有数据才有用。如果一个预测应用程序是否会在 2020 年圣诞节被下载的模型基于 2008 年的数据进行训练,那么它的性能将不会很好,当时 App Store 上最受欢迎的应用程序是 Koi Pond。什么是锦鲤池?确切地。

用技术术语来说,这意味着你看不见的数据和训练数据应该来自类似的分布。你可能会问:“如果数据是看不见的,我们怎么知道它来自什么分布?” 我们没有,但我们可以做出假设——比如我们可以假设用户明天的行为与今天的用户行为不会有太大的不同——并希望我们的假设成立。如果他们不这样做,我们将得到一个性能很差的模型,我们可以通过监控来发现它,如第 8 章所述,并在生产中进行测试,如第 9 章所述。

由于当今大多数 ML 算法的学习方式,如果您的问题具有以下额外特征,则 ML 解决方案将特别出色:

6.重复

人类非常擅长少量学习:你可以给孩子看几张猫的照片,他们中的大多数人下次看到猫时就会认出猫。尽管少样本学习研究取得了令人兴奋的进展,但大多数 ML 算法仍然需要许多示例来学习模式。当一项任务重复时,每个模式都会重复多次,这使得机器更容易学习它。

7. 错误预测的成本很低

除非你的机器学习模型的性能一直是 100%,这对于任何有意义的任务来说都是极不可能的,否则你的模型会出错。当错误预测的成本很低时,ML 特别适用。例如,当今 ML 最大的用例之一是推荐系统,因为在推荐系统中,糟糕的推荐通常是可以原谅的——用户只是不会点击推荐。

如果一个预测错误会产生灾难性的后果,如果平均而言,正确预测的好处超过错误预测的成本,ML 可能仍然是一个合适的解决方案。开发自动驾驶汽车具有挑战性,因为算法错误可能导致死亡。然而,许多公司仍然希望开发自动驾驶汽车,因为一旦自动驾驶汽车在统计上比人类司机更安全,它们就有可能挽救许多生命。

8. 规模化

ML 解决方案通常需要非常重要的前期工作对数据、计算、基础设施和人才的投资,所以如果我们可以大量使用这些解决方案,那将是有意义的。

“在规模上”对不同的任务意味着不同的事情,但总的来说,它意味着做出很多预测。示例包括每年对数百万封电子邮件进行分类或预测每天应将数千张支持票发送到哪些部门。

一个问题可能看起来是一个单一的预测,但它实际上是一系列预测。例如,一个预测谁将赢得美国总统大选的模型看起来似乎每四年才做出一次预测,但实际上它可能每小时甚至更频繁地做出一次预测,因为该预测必须不断更新以纳入新的信息。

大规模出现问题也意味着有大量数据需要收集,这对于训练 ML 模型很有用。

9.模式不断变化

文化变化。口味变化。技术变化。今天流行的东西明天可能是旧新闻。考虑任务垃圾邮件分类。今天,垃圾邮件的标志是一位尼日利亚王子,但明天可能是一位心烦意乱的越南作家。

如果您的问题涉及一种或多种不断变化的模式,那么手写规则等硬编码解决方案可能很快就会过时。弄清楚你的问题是如何改变的,以便你可以相应地更新你的手写规则可能太昂贵或不可能。因为 ML 从数据中学习,您可以使用新数据更新您的 ML 模型,而无需弄清楚数据是如何变化的。也可以设置您的系统以适应不断变化的数据分布,我们将在“持续学习”一节中讨论这种方法。

用例列表可以不断增加,随着 ML 采用在行业中的成熟,它会变得更长。尽管 ML 可以很好地解决一部分问题,但它不能解决和/或不应该用于解决很多问题。当今的大多数 ML 算法都不应该在以下任何情况下使用:

  • 这是不道德的。我们将在“案例研究 I:自动评分者的偏见”一节中讨论一个案例研究,其中使用 ML 算法可能被认为是不道德的。

  • 更简单的解决方案可以解决问题。在第 6 章中,我们将介绍 ML 模型开发的四个阶段,其中第一阶段应该是非 ML 解决方案。

  • 这不划算。

但是,即使 ML 无法解决您的问题,也有可能将您的问题分解为更小的组件,并使用 ML 来解决其中的一些问题。例如,如果您无法构建聊天机器人来回答所有客户的查询,则可以构建 ML 模型来预测查询是否与常见问题之一匹配。如果是,请引导客户回答。如果没有,请将他们引导至客户服务。

我还想提醒大家不要放弃一项新技术,因为它目前不如现有技术具有成本效益。大多数技术进步都是渐进的。一种技术现在可能效率不高,但随着时间的推移,可能会有更多的投资。如果您等待该技术向其他行业证明其价值,然后再加入,您可能最终会落后于竞争对手数年或数十年。

机器学习用例

ML 在这两个领域的使用率都在增加企业和消费者应用程序。自 2010 年代中期以来,利用 ML 向消费者提供卓越或以前不可能的服务的应用程序激增。

随着信息和服务的爆炸式增长,如果没有 ML 的帮助,我们很难找到我们想要的东西,无论是搜索引擎还是推荐系统。当您访问亚马逊或 Netflix 等网站时,系统会向您推荐预计最符合您口味的商品。如果您不喜欢任何推荐,您可能想要搜索特定项目,并且您的搜索结果可能由 ML 提供支持。

如果您有智能手机,ML 可能已经在您的许多日常活动中为您提供帮助。在你的打字预测打字让电话变得更容易,这是一个 ML 系统,可以为您提供下一步可能想说的建议。ML 系统可能会在您的照片编辑应用程序中运行,以建议如何最好地增强您的照片。您可能会使用您的指纹或面部来验证您的手机,这需要机器学习系统来预测指纹或面部是否与您的相匹配。

将我吸引到该领域的 ML 用例是机器翻译,自动从一种语言翻译成另一种语言。它有可能让来自不同文化背景的人们相互交流,消除语言障碍。我的父母不会说英语,但多亏了谷歌翻译,他们现在可以阅读我的作品并与不会说越南语的朋友交谈。

ML 越来越多地出现在我们的家中,并带有 Alexa 和 Google Assistant 等智能个人助理。智能安全摄像头可以让您知道您的宠物何时离开家,或者您是否有不速之客。我的一个朋友担心他年迈的母亲独自生活——如果她跌倒了,没有人可以帮助她站起来——所以他依靠一个家庭健康监测系统来预测家里是否有人跌倒。

尽管消费者 ML 应用市场正在蓬勃发展,但大多数 ML 用例仍然在企业世界中。企业 ML 应用程序的要求和考虑因素往往与消费者应用程序大不相同。有很多例外,但在大多数情况下,企业应用程序可能有更严格的准确性要求,但对延迟要求更宽容。例如,将语音识别系统的准确率从 95% 提高到 95.5% 对大多数消费者来说可能并不明显,但将资源分配系统的效率提高 0.1% 就可以帮助像谷歌或通用汽车这样的公司节省数百万美元。同时,一秒钟的延迟可能会让消费者分心并打开其他东西,但企业用户可能更能容忍高延迟。对于有兴趣从 ML 应用程序构建公司的人来说,消费者应用程序可能更容易分发,但更难货币化。但是,除非您自己遇到过,否则大多数企业用例并不明显。

根据 Algorithmia 的 2020 年企业机器学习状况调查,企业中的 ML 应用程序多种多样,既服务于内部用例(降低成本、产生客户洞察和智能、内部处理自动化),也服务于外部用例(改善客户体验、留住客户、交互与客户)如图 1-3所示。8

【Designing ML Systems】第 1 章 :机器学习系统概述-LMLPHP

图 1-3。2020 年企业机器学习现状。来源:改编自 Algorithmia 的图片

欺诈检测是其中之一ML 在企业界最古老的应用。如果您的产品或服务涉及任何价值的交易,则很容易受到欺诈。通过利用机器学习解决方案进行异常检测,您可以拥有从历史欺诈交易中学习并预测未来交易是否存在欺诈的系统。

决定对您的产品或服务收取多少费用可能是最困难的商业决策之一;为什么不让 ML 为您做呢?价格优化是在特定时间段内估计价格以最大化定义的目标函数的过程,例如公司的利润、收入或增长率。基于机器学习的定价优化最适用于交易量大、需求波动大、消费者愿意支付动态价格的情况——例如互联网广告、机票、住宿预订、拼车和活动。

做生意,做人很重要能够预测客户需求,以便您准备预算、库存库存、分配资源和更新定价策略。例如,如果您经营一家杂货店,您希望有足够的库存,以便客户找到他们想要的东西,但您又不想库存过多,因为如果您这样做,您的杂货可能会变质并且您会赔钱。

获得新用户的成本很高。截至 2019 年,应用获取将进行应用内购买的用户的平均成本为 86.61 美元。9 Lyft 的购置成本估计为每名乘客 158 美元。10对于企业客户来说,这个成本要高得多。获客成本被投资者誉为创业杀手。11少量降低获客成本,可大幅增加利润。这可以通过更好地识别潜在客户、展示更有针对性的广告、在正确的时间提供折扣等来实现——所有这些都是 ML 的合适任务。

在你花了这么多钱获得客户之后,如果他们离开,那就太可惜了。获得新用户的成本大约是保留现有用户的 5 到 25 倍。12 流失预测是预测特定客户何时将停止使用您的产品或服务,以便您可以采取适当的行动来赢回他们。流失预测不仅可以用于客户,也可以用于员工。

为防止客户离开,重要的是要在他们出现问题时立即解决他们的问题,让他们感到高兴。自动支持票证分类可以帮助解决这个问题。以前,当客户打开支持票或发送电子邮件时,需要首先对其进行处理,然后将其传递给不同的部门,直到它到达可以解决问题的人的收件箱。机器学习系统可以分析票证内容并预测票证应该去哪里,这可以缩短响应时间并提高客户满意度。它还可用于对内部 IT 工单进行分类。

另一个在企业中流行的 ML 用例是品牌监控。品牌是企业的宝贵资产。13监控公众和您的客户如何看待您的品牌非常重要。您可能想知道何时/何地/如何提及它,无论是明确的(例如,当有人提到“Google”时)还是隐含的(例如,当有人说“搜索巨头”时),以及与之相关的情绪。如果您的品牌提及中突然出现负面情绪,您可能希望尽快解决。情感分析是典型的 ML 任务。

一组最近引起广泛关注的机器学习用例是在医疗保健领域。有可以检测皮肤癌和诊断糖尿病的机器学习系统。尽管许多医疗保健应用程序是面向消费者的,但由于它们对准确性和隐私的严格要求,它们通常是通过医疗保健提供者提供的,例如作为医院或用于协助医生提供诊断。

了解机器学习系统

了解 ML 系统将有助于设计和开发它们。在本节中,我们将讨论机器学习系统与研究中的机器学习(或学校经常教授的机器学习)和传统软件有何不同,这激发了对本书的需求。

研究与生产中的机器学习

由于行业中的 ML 使用仍然相当新,大多数具有 ML 专业知识的人通过学术界获得了它:学习课程、进行研究、阅读学术论文。如果这描述了您的背景,那么您可能需要一个陡峭的学习曲线来了解在野外部署 ML 系统的挑战,并为这些挑战提供大量解决方案。生产中的 ML 与研究中的 ML 非常不同。表 1-1显示了其中五个主要差异。

不同的利益相关者和要求

参与研究和排行榜的人项目通常只针对一个目标。最常见的目标是模型性能——开发一个在基准数据集上实现最先进结果的模型。为了排除性能上的小幅提升,研究人员经常求助于使模型过于复杂而无用的技术。

将 ML 系统投入生产涉及许多利益相关者。每个利益相关者都有自己的要求。拥有不同且经常相互冲突的需求可能会使设计、开发和选择满足所有需求的 ML 模型变得困难。

考虑一个向用户推荐餐馆的移动应用程序。该应用程序通过向餐厅收取每笔订单 10% 的服务费来赚钱。这意味着昂贵的订单比便宜的订单给应用程序更多的钱。该项目涉及机器学习工程师、销售人员、产品经理、基础架构工程师和一名经理:

机器学习工程师

想要一个模型来推荐用户最有可能订购的餐厅,并且他们相信他们可以通过使用具有更多数据的更复杂模型来做到这一点。

销售团队

想要一个模型来推荐更昂贵的餐厅,因为这些餐厅会带来更多的服务费。

产品团队

注意到延迟的每一次增加都会导致通过服务的订单下降,因此他们需要一个能够在 100 毫秒内返回推荐餐厅的模型。

机器学习平台团队

随着流量的增长,这个团队因为扩展现有系统的问题而在半夜被吵醒,因此他们希望推迟模型更新以优先改进 ML 平台。

经理

想要最大化利润,实现这一目标的一种方法可能是放开 ML 团队。14

“推荐用户最有可能点击的餐厅”和“推荐能为应用带来最多收入的餐厅”是两个不同的目标,在“解耦目标”一节中,我们将讨论如何开发满足不同目标的机器学习系统。剧透:我们将为每个目标开发一个模型并结合他们的预测。

现在让我们想象一下,我们有两个不同的模型。模型 A 是推荐用户最有可能点击的餐厅的模型,模型 B 是推荐将为应用带来最多收入的餐厅的模型。A 和 B 可能是非常不同的模型。应该为用户部署哪种模型?为了让决策更加困难,A 和 B 都不满足产品团队提出的要求:他们不能在 100 毫秒内返回餐厅推荐。

在开发 ML 项目时,ML 工程师了解所有相关利益相关者的要求以及这些要求的严格程度非常重要。例如,如果能够在 100 毫秒内返回推荐是必须具备的要求——公司发现如果你的模型花费超过 100 毫秒来推荐餐馆,10% 的用户会失去耐心并关闭应用程序——那么模型 A B型也行不通。但是,如果这只是一个很好的需求,您可能仍需要考虑模型 A 或模型 B。

与研究有不同要求的生产是成功的研究项目可能并不总是用于生产的原因之一。例如,集成是一种在许多 ML 比赛的获胜者中流行的技术,包括著名的 100 万美元的 Netflix Prize,但它并未广泛用于生产。集成结合了“多种学习算法,以获得比单独的任何组成学习算法更好的预测性能。” 15虽然它可以给您的 ML 系统带来小的性能提升,但集成往往会使系统过于复杂而无法在生产中使用,例如,做出预测的速度变慢或难以解释结果。我们将在“合奏”一节中进一步讨论合奏。

对于许多任务,性能的微小改进可以带来收入的巨大提升或成本节约。例如,产品推荐系统的点击率提高 0.2% 可以为电子商务网站带来数百万美元的收入增长。但是,对于许多任务,用户可能不会注意到小的改进。对于第二种类型的任务,如果一个简单的模型可以完成合理的工作,那么复杂的模型必须表现得更好,以证明复杂性是合理的。

对 ML 排行榜的批评

近年来,对 ML 排行榜有很多批评者,既有诸如 Kaggle 之类的竞赛,也有诸如 ImageNet 或 GLUE 之类的研究排行榜。

一个明显的论点是,在这些比赛中,构建 ML 系统所需的许多艰难步骤已经为您完成。16

一个不太明显的论点是,由于当您有多个团队在同一个保留测试集上进行测试时会发生多假设测试场景,一个模型可能会比其他模型做得更好只是偶然。17

研究人员注意到研究和生产之间的利益错位。在 EMNLP 2020 的一篇论文中,Ethayarajh 和 Jurafsky 认为,基准有助于推动自然语言处理 (NLP) 的进步,因为它鼓励创建更准确的模型,但牺牲了从业者重视的其他品质,例如紧凑性、公平和能源效率。18

计算优先级

在设计机器学习系统时,那些没有部署机器学习系统经常犯错误,过度关注模型开发部分,而对模型部署和维护部分关注不够。

在模型开发过程中,您可能会训练许多不同的模型,并且每个模型都会对训练数据进行多次传递。然后,每个经过训练的模型都会对验证数据生成一次预测以报告分数。验证数据通常比训练数据小得多。在模型开发过程中,训练是瓶颈。然而,一旦部署了模型,它的工作就是生成预测,因此推理是瓶颈。研究通常优先考虑快速训练,而生产通常优先考虑快速推理。

一个推论是研究优先考虑高吞吐量,而生产优先考虑低延迟。如果您需要刷新,延迟是指从接收查询到返回结果所需的时间。吞吐量是指在特定时间段内处理了多少查询。

术语冲突

有些书做出了区分延迟和响应时间之间。根据 Martin Kleppmann 在他的《设计数据密集型应用程序》一书中的说法,“响应时间就是客户端所看到的:除了处理请求的实际时间(服务时间)之外,它还包括网络延迟和排队延迟。延迟是请求等待处理的持续时间——在此期间它是潜在的,等待服务。” 19

在本书中,为了简化讨论并与 ML 社区中使用的术语保持一致,我们使用延迟来指代响应时间,因此请求的延迟衡量的是从发送请求到收到请求的时间。收到响应。

例如,谷歌翻译的平均延迟是从用户点击翻译到显示翻译的平均时间,吞吐量是它每秒处理和服务的查询数量。

如果您的系统总是一次处理一个查询,则较高的延迟意味着较低的吞吐量。如果平均延迟为 10 毫秒,即处理一次查询需要 10 毫秒,则吞吐量为 100 次查询/秒。如果平均延迟为 100 毫秒,则吞吐量为 10 次查询/秒。

然而,由于大多数现代分布式系统批处理查询以一起处理它们,通常是并发的,更高的延迟也可能意味着更高的吞吐量。如果您一次处理 10 个查询并且运行一个批处理需要 10 毫秒,则平均延迟仍然是 10 毫秒,但吞吐量现在提高了 10 倍——1,000 次查询/秒。如果您一次处理 50 个查询并且运行一个批处理需要 20 毫秒,那么现在的平均延迟为 20 毫秒,吞吐量为 2,500 个查询/秒。延迟和吞吐量都增加了!图 1-4说明了一次处理一个查询和批量处理查询在延迟和吞吐量权衡方面的差异。

【Designing ML Systems】第 1 章 :机器学习系统概述-LMLPHP

图 1-4。一次处理一个查询时,较高的延迟意味着较低的吞吐量。但是,在批量处理查询时,更高的延迟也可能意味着更高的吞吐量。

如果要批量在线查询,这会更加复杂。批处理要求您的系统在处理它们之前等待足够的查询以批处理方式到达,这进一步增加了延迟。

在研究中,您更关心在一秒钟内可以处理多少个样本(吞吐量),而不是处理每个样本需要多长时间(延迟)。您愿意增加延迟以增加吞吐量,例如,通过积极的批处理。

但是,一旦将模型部署到现实世界中,延迟就很重要。2017 年,Akamai 的一项研究发现,100 毫秒的延迟会降低 7% 的转化率。20 2019 年,Booking.com 发现延迟增加约 30% 会导致转化率下降约 0.5%——“这是我们业务的相关成本”。21 2016 年,Google 发现超过一半的移动用户会在加载时间超过 3 秒的情况下离开页面。22今天的用户更没有耐心了。

为了减少生产中的延迟,您可能必须减少一次可以在同一硬件上处理的查询数量。如果您的硬件能够一次处理更多查询,那么使用它来处理更少的查询意味着您的硬件利用率不足,从而增加了处理每个查询的成本。

在考虑延迟时,重要的是要记住延迟不是一个单独的数字,而是一个分布。通过使用单个数字(例如时间窗口内所有请求的平均(算术平均值)延迟)来简化此分布是很诱人的,但这个数字可能会产生误导。假设您有 10 个请求,其延迟分别为 100 ms、102 ms、100 ms、100 ms、99 ms、104 ms、110 ms、90 ms、3,000 ms、95 ms。平均延迟为 390 毫秒,这使您的系统看起来比实际慢。可能发生的情况是网络错误导致一个请求比其他请求慢得多,您应该调查这个麻烦的请求。

通常最好用百分位数来思考,因为它们会告诉你关于你请求的一定百分比的信息。最常见的百分位数是第 50 个百分位数,缩写为 p50。它也被称为中位数。如果中位数为 100 毫秒,则一半的请求花费的时间超过 100 毫秒,一半的请求花费的时间小于 100 毫秒。

较高的百分位数还可以帮助您发现异常值,这可能是出现问题的征兆。通常,您要查看的百分位数是 p90、p95 和 p99。上述 10 个请求的第 90 个百分位 (p90) 是 3,000 毫秒,这是一个异常值。

较高的百分位数很重要,因为即使它们只占用户的一小部分,有时它们也可能是最重要的用户。例如,在亚马逊网站上,请求最慢的客户通常是那些拥有最多账户数据的客户,因为他们进行了多次购买——也就是说,他们是最有价值的客户。23

使用高百分比来指定系统的性能要求是一种常见的做法;例如,产品经理可能会指定第 90 个百分位或第 99.9 个百分位系统的延迟必须低于某个数字。

数据

在研究阶段,您使用的数据集通常干净且格式正确,让您可以专注于开发模型。它们本质上是静态的,因此社区可以使用它们来对新架构和技术进行基准测试。这意味着许多人可能已经使用和讨论过相同的数据集,并且数据集的怪癖是已知的。您甚至可以找到开源脚本来处理数据并将其直接提供给您的模型。

在生产中,数据(如果有的话)要混乱得多。它很嘈杂,可能是非结构化的,不断变化。它可能是有偏见的,你可能不知道它是如何有偏见的。标签(如果有)可能是稀疏的、不平衡的或不正确的。更改项目或业务需求可能需要更新部分或全部现有标签。如果您使用用户数据,您还必须担心隐私和监管问题。我们将在“案例研究 II:“匿名”数据的危险”一节中讨论用户数据处理不当的案例研究。

在研究中,您主要使用历史数据,例如,已经存在并存储在某处的数据。在生产中,您很可能还必须处理由用户、系统和第三方数据不断生成的数据。

图 1-5改编自特斯拉 AI 总监 Andrej Karpathy 的精彩图表,该图表说明了他在博士期间遇到的数据问题,与他在特斯拉时相比。

【Designing ML Systems】第 1 章 :机器学习系统概述-LMLPHP

图 1-5。研究中的数据与生产中的数据。资料来源:改编自 Andrej Karpathy 24的图片

公平

在研究阶段,模型是尚未用于人类,因此研究人员很容易将公平性视为事后的想法:“让我们先尝试获得最先进的技术,然后在生产时担心公平性。” 当它投入生产时,为时已晚。如果您优化模型以获得更高的准确性或更低的延迟,则可以证明您的模型优于最先进的模型。但是,在撰写本书时,还没有与公平指标相当的先进技术。

您或您生活中的某个人可能已经在不知不觉中成为有偏见的数学算法的受害者。您的贷款申请可能会被拒绝,因为 ML 算法会选择您的邮政编码,这体现了对一个人的社会经济背景的偏见。您的简历可能排名较低,因为排名系统雇主使用您姓名拼写的选择。您的抵押贷款可能会获得更高的利率,因为它部分依赖于有利于富人并惩罚穷人的信用评分。现实世界中机器学习偏差的其他例子包括预测性警务算法、潜在雇主进行的性格测试和大学排名。

2019 年,“伯克利研究人员发现,在 2008 年至 2015 年期间,面对面和在线贷款机构总共拒绝了 130 万信誉良好的黑人和拉丁裔申请人。” 当研究人员“使用被拒绝申请的收入和信用评分但删除种族标识符时,抵押贷款申请被接受。” 25对于更多令人讨厌的例子,我推荐 Cathy O'Neil 的数学毁灭武器26

ML 算法不会预测未来,而是对过去进行编码,从而使数据中的偏差等长期存在。当 ML 算法大规模部署时,它们可以大规模地歧视人。如果一个人类操作员一次只能对几个人做出全面的判断,那么机器学习算法可以在几秒钟内对数百万人做出全面的判断。这尤其会伤害少数群体的成员,因为对他们的错误分类只会对模型的整体性能指标产生很小的影响。

如果一个算法已经可以对 98% 的人口做出正确的预测,而改进对另外 2% 的预测会产生成倍的成本,那么不幸的是,一些公司可能会选择不这样做。在 2019 年麦肯锡公司的一项研究中,只有 13% 的接受调查的大公司表示他们正在采取措施降低公平和公平的风险,例如算法偏见和歧视。27然而,这种情况正在迅速改变。我们将在第 11 章介绍公平和负责任的 AI 的其他方面。

可解释性

2020 年初,图灵奖获得者 Geoffrey Hinton 教授提出了一个关于重要性的激烈争论的问题ML 系统中的可解释性。“假设您患有癌症,您必须在无法解释其工作原理但治愈率达到 90% 的黑匣子 AI 外科医生和治愈率 80% 的人类外科医生之间做出选择。你希望人工智能外科医生是非法的吗?” 28

几周后,当我向公共非科技公司的 30 名技术主管提出这个问题时,只有一半的人希望高效但无法解释的人工智能外科医生对他们进行手术。另一半想要人类外科医生。

虽然我们大多数人都习惯使用微波炉而不了解它是如何工作的,但许多人对人工智能的感觉并不相同,尤其是当人工智能对他们的生活做出重要决定时。

由于大多数 ML 研究仍然在单一目标(模型性能)上进行评估,因此研究人员没有动力研究模型可解释性。然而,对于业内大多数机器学习用例来说,可解释性不仅是可选的,而且是一项要求。

首先,可解释性对于用户(包括业务领导者和最终用户)来说很重要,以了解为什么做出决策,以便他们可以信任模型并检测前面提到的潜在偏见。29其次,开发人员能够调试和改进模型很重要。

仅仅因为可解释性是一项要求并不意味着每个人都在这样做。截至 2019 年,只有 19% 的大公司正在努力提高其算法的可解释性。30

讨论

有些人可能会争辩说,只了解 ML 的学术方面是可以的,因为有很多研究工作。第一部分——只知道 ML 的学术方面是可以的——是正确的。第二部分是假的。

虽然进行纯粹的研究很重要,但大多数公司负担不起,除非它导致短期业务应用。尤其是现在研究界采用了“更大、更好”的方法。通常,新模型仅需要大量数据和数千万美元的计算。

随着 ML 研究和现成模型变得更容易获得,更多的人和组织希望为它们找到应用程序,这增加了生产中对 ML 的需求。

绝大多数与机器学习相关的工作将是,并且已经在生产 ML。

机器学习系统与传统软件

由于 ML 是软件的一部分工程(SWE),并且软件已在生产中成功使用了半个多世纪,有些人可能想知道为什么我们不只是在软件工程中采用久经考验的最佳实践并将其应用于机器学习。

这是一个绝妙的主意。事实上,如果 ML 专家是更好的软件工程师,那么 ML 生产将是一个更好的地方。许多传统的 SWE 工具可用于开发和部署 ML 应用程序。

然而,许多挑战是 ML 应用程序所独有的,需要它们自己的工具。在 SWE 中,有一个基本假设,即代码和数据是分开的。事实上,在 SWE 中,我们希望尽可能保持模块化和分离(参见 Wikipedia page on separation of concern)。

相反,ML 系统是部分代码、部分数据和从两者创建的部分工件。过去十年的趋势表明,使用最多/最佳数据开发的应用程序获胜。大多数公司不会专注于改进 ML 算法,而是专注于改进他们的数据。由于数据可以快速变化,ML 应用程序需要适应不断变化的环境,这可能需要更快的开发和部署周期。

在传统的 SWE 中,您只需要专注于测试和版本控制您的代码。使用机器学习,我们也必须测试和版本化我们的数据,这是困难的部分。如何对大型数据集进行版本控制?如何知道数据样本对您的系统是好是坏?并非所有数据样本都是平等的——有些样本对您的模型比其他样本更有价值。例如,如果您的模型已经训练了 100 万次正常肺扫描和仅 1000 次癌变肺扫描,则癌变肺扫描比正常肺扫描更有价值。不加选择地接受所有可用数据可能会损害模型的性能,甚至使其容易受到数据中毒攻击。31

ML 模型的大小是另一个挑战。截至 2022 年,ML 模型通常拥有数亿甚至数十亿个参数,这需要千兆字节的随机存取存储器 (RAM) 才能将它们加载到内存中。几年后,十亿个参数可能看起来很古怪——比如,“你能相信将人类送上月球的计算机只有 32 MB 的内存吗?”

然而,就目前而言,将这些大型模型投入生产,尤其是在边缘设备上,32是一项巨大的工程挑战。然后是如何让这些模型运行得足够快以发挥作用的问题。如果提示下一个字符所需的时间比您输入所需的时间长,那么自动完成模型就没有用了。

在生产中监控和调试这些模型也很重要。随着 ML 模型变得越来越复杂,加上对其工作缺乏可见性,很难找出问题所在,或者在出现问题时足够快地发出警报。

好消息是这些工程正在以极快的速度应对挑战。早在 2018 年,当变压器的双向编码器表示 (BERT) 论文首次发表时,人们就在谈论 BERT 太大、太复杂、太慢而无法实用。预训练的大型 BERT 模型有 3.4 亿个参数,大小为 1.35 GB。33快进两年后,BERT 及其变体已经在 Google 的几乎所有英语搜索中使用。34

概括

这一开篇旨在让读者了解如何将 ML 带入现实世界。我们首先浏览了当今生产中 ML 的广泛用例。虽然大多数人都熟悉面向消费者的应用程序中的 ML,但大多数 ML 用例都是针对企业的。我们还讨论了何时适合 ML 解决方案。尽管 ML 可以很好地解决很多问题,但它并不能解决所有问题,当然也不适合所有问题。但是,对于 ML 无法解决的问题,ML 有可能成为解决方案的一部分。

本章还强调了研究中的 ML 和生产中的 ML 之间的差异。差异包括利益相关者的参与、计算优先级、所用数据的属性、公平问题的严重性以及对可解释性的要求。本部分对那些从学术界进入 ML 生产的人最有帮助。我们还讨论了机器学习系统与传统软件系统的不同之处,这激发了对本书的需求。

ML 系统很复杂,由许多不同的组件组成。在生产中使用 ML 系统的数据科学家和 ML 工程师可能会发现,仅关注 ML 算法部分是远远不够的。了解系统的其他方面很重要,包括数据堆栈、部署、监控、维护、基础设施等。本书采用系统方法来开发 ML 系统,这意味着我们将整体考虑系统的所有组件而不是只看 ML 算法。我们将在下一章详细介绍这种整体方法的含义。

11-13 11:57