构建可靠的机器学习系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 循环中的教训

现在应该清楚机器学习以数据开始和结束。如果不了解所拥有的数据和可以从中提取的信息,就不可能成功将机器学习可靠地集成到任何业务领域或应用程序中。为了使这些工作发挥作用,我们必须驯服数据。

还应该清楚的是,在任何给定环境中实施机器学习都没有固定的顺序。通常从数据开始是有意义的,但从数据开始,你将需要访问每个功能层级,甚至可能会访问它们多次。要解决的问题会告知我们需要的数据。基础设施服务会告诉我们可以构建的模型。训练环境会限制我们将使用的数据类型以及数据量。隐私与道德的原则也会在上述方面进行限制。模型构建过程需要一个针对整个循环的全视图,也需要整个组织本身的全视图。在机器学习领域,将不同的关注点隔离开并单独讨论是不可行、也没有用的。

所有这一切的背后都是组织复杂度以及与机器学习相关的风险承受能力的问题。并非所有组织都准备好在这些技术上进行大规模投资,并将其关键业务功能置于未经验证的算法上,这些组织也不应该这样做!即使对于具有大量机器学习经验并能够评估模型质量和价值的组织,大多数新的机器学习思想也应该先试用,因为大多数新的机器学习思想都无法在实际中生效。在许多方面,机器学习工程最好是作为一个持续进行的实验来实施,部署增量更改和优化,并在产品管理的帮助下通过评估更改和优化成功与否来确认哪些要保留。不可能像今天许多软件工程所做的,将机器学习视为确定性开发过程。然而,即使考虑到当今世界的基线混乱,你也可以通过把每一次机器学习实验当作第一次实验来显著提高机器学习实验最终成功的机会[8]

由于实施是循环的,因此完全可以按任意顺序阅读本书。选择一个最接近你现在最关心的内容的章节,并从那里开始。然后,找出最迫切的问题并转到下一章。所有章节都与其他章节有广泛的交叉引用。

如果你按顺序阅读,那也很好,你将从数据开始。对将公平性和道德问题纳入基础设施每个部分的方式感到好奇的人可以直接跳到第6章。

当读完本书时,你会了解从何处开始将机器学习整合到组织的服务中。你还将拥有包含如何改变才能使整个流程成功的路线图。


[1] ETL(Extract,Transform,Load)是表示这种数据处理的一种常见抽象。维基百科的“提取、转换、加载”页面(https://oreil.ly/XqcQs)有一个合理的概述。

[2] 我们使用哪些成熟的库和系统主要取决于应用程序。如今,TensorFlow、JAX和PyTorch都被广泛用于深度学习,但如果你的应用程序使用另一个不同的学习方式(例如,常见的XGBoost),那么还有很多其他系统。选择一个模型架构基本上超出了本书的讨论范围,尽管在第3章和第7章中有小部分内容涉及。

[3] 参考阅读Andrej Karpathy 2019年的优秀博客文章“A Recipe for Training Neural Networks”(http://karpathy.github.io/2019/04/25/recipe)以了解更多信息。

[4] 如果你熟悉电子商务中A/B测试的概念,那么这里也适合验证这种测试能否作为集成测试的一部分正确运行。这里的一个很好的用例是可以区分存在与不存在机器学习建议时用户的行为。

[5] 最简单的方式是只生成一个随机数,并从中选择1%来获得模型。但这意味着,即使在同一网络会话中,同一用户也会有时获得模型生成的推荐,有时则无法获得。这对于我们弄清楚模型是否有效没有太大帮助,并可能严重损害用户体验。因此,对于We b应用程序,我们可能会选择所有登录用户的1%或所有cookie的1%来获得模型生成的结果。但在这种情况下,我们将很难判断模型生成的结果对用户的影响,并且在当前用户与新用户的选择上可能存在偏差。我们会希望同一用户有时得到模型生成的结果,有时得不到,或者我们可能希望某些用户总是得到模型生成的结果,但其他用户只在特定的会话或时间里得到。重点是,如何随机访问机器学习结果是一个有点复杂的统计问题。

[6] 完整起见,确实有一种安全的方法可以部署新的数据格式。具体来说,在系统开始写入新格式之前,完成支持读取新格式的部署。显然,在这个案例中并没有这样做。

[7] 也不要忘记数据漂移:与2020年的模型相比,2019年的模型对世界大部分地区口罩的重要性和意义的看法截然不同。

[8] 在这种情况下,Martin Casado和Matt Bornstein的“Taming the Tail:Adventures in Improving AI Economics”(https://oreil.ly/474mq)是一篇值得参考的文章。