机器学习工程最佳实践
马丁·辛克维奇
本文档旨在帮助掌握了机器学习基础知识的人员 受益于 Google 在机器学习方面的最佳实践。它 提出了一种机器学习样式,类似于 Google C++ 样式指南 以及其他热门的实践编程指南。如果您参加了课程 或者构建或处理机器学习模型, 具备阅读本文档的必要背景知识。
术语
在我们讨论有效的 机器学习:
- 实例:您想要创建的主题 预测。例如,实例可能是您希望 分类为“关于猫”或“与猫无关”。
- 标签:预测任务的答案,它可以是由 或训练数据中提供的正确答案。对于 例如,某个网页的标签可能是“关于猫”。
- 特征:预测任务中使用的实例的属性。对于 例如,某个网页可能具有“包含字词‘猫’”这一特征。
- 特征列:一组相关特征,例如所有可能的特征的集合 用户可能居住的国家/地区一个样本可能具有一个或多个特征 出现的情况。“特征列”是 Google 专用的术语。 特征列称为“命名空间” 大众系统(在 Yahoo/Microsoft),或 字段。
- 样本:一个实例(及其特征)和一个标签。
- 模型:预测任务的统计表示法。您使用 然后使用模型进行预测。
- 指标:您关心的一个数字。可能不会直接优化。
- 目标:算法尝试优化的一种指标。
- 流水线:机器学习算法的基础架构。 包括从前端收集数据,将其放入训练数据中 文件、训练一个或多个模型,以及将模型导出到生产环境。
- 点击率:网页访问者中点击了某个 链接。
概览
要打造优质产品,请做到以下几点:
像真正的工程师一样进行机器学习,而不是像优秀的工程师那样 机器学习专家。
实际上,您将面临的大部分问题都是工程问题。均匀 拥有优秀机器学习专家的所有资源,大部分好处都是 都源自出色的特征,而不是出色的机器学习算法。基本的原则是 方法是:
- 确保管道从头到尾都稳固可靠。
- 首先要设定合理的目标。
- 以简单的方式添加常识性特征。
- 确保管道稳固可靠。
这种方法适用于 。只有当 学习一些简单的技巧,让自己取得更大的成功。增加复杂性会减慢未来版本的发布速度。
在你学完了这些简单的技巧后,你可能就会发现 是你的未来应用请参阅 第三阶段 机器学习项目。
本文档的布局如下:
- 第一部分可帮助您了解 现在是构建机器学习系统的好时机。
- 第二部分介绍了如何部署 第一个流水线
- 第三部分介绍了发布和 在向流水线添加新特征的同时进行迭代,如何评估模型 以及训练-应用偏差。
- 通过 最后一部分 就是当您达到稳定阶段时该做些什么。
- 之后是相关工作列表和一个 附录 本文档中经常作为示例使用的系统的背景信息。
采用机器学习技术之前
第 1 条规则:不要害怕发布未采用机器学习技术的产品。
机器学习很酷,但它需要数据。从理论上讲, 然后针对新产品调整模型, 很可能低于 启发词语。如果您认为 机器学习技术会为您提供 100% 的提升,而启发式方法则会为您提供 50% 一路走来。
例如,如果您要对应用程序市场中的应用程序进行排名,您可以使用 安装率或安装次数。如果您检测到垃圾内容, 以便滤除之前发送过垃圾邮件的发布商不要害怕使用人类 修改。如果您需要对联系人进行排名,请对最近使用的联系人进行排名 最高(或按字母顺序排序)。如果机器学习并不是 在掌握了数据之前,请勿使用商品。
第 2 条规则:首先,设计并实施指标。
在正式确定机器学习系统的用途之前,请尽可能 可能性。这样做的原因如下:
- 尽早从系统用户处获取权限会更容易。
- 如果您认为将来可能存在问题, 最好立即获取历史数据。
- 如果您在设计系统时考虑到指标测量,那么 将更适合 。具体而言,你一定不想感到厌烦 查找日志中的字符串,以便对指标进行插桩!
- 您会注意到有哪些变化和变化。例如, 假设您想要直接优化单日活跃用户数。不过, 在早期操控系统时,你可能会注意到 用户体验的显著改变并不会使这一点 指标。
Google+团队衡量每次读取时采用的扩展能力, 每次阅读转发次数,以及每次阅读 +1 次 已读数、评论数/已读数、每位用户的评论数、每位用户的转发次数等 如何计算帖子的优劣。另请注意, 在该框架中,您可以将用户分组到不同的存储分区中, 这一点很重要。请参阅 第 12 条规则。
通过以更加自由的方式收集指标,您可以更全面地了解 。发现问题了?添加指标进行跟踪!对某些人感到兴奋 上次发布版本的定量变化?添加指标进行跟踪!
第 3 条规则:选择机器学习而非复杂的启发法。
简单的启发词语可以让你的产品上市。复杂的启发法是 且难以维护。掌握了数据并对目标有基本了解后 然后再转向机器学习。与在大多数软件工程领域一样 您需要不断更新方法,无论是 启发式算法或机器学习模型,您会发现 机器学习模型更易于更新和维护(请参阅 第 16 条规则)。
机器学习第一阶段:您的第一个流水线
专注于您的第一个流水线的系统基础架构。玩得很开心 所有富有想象力的机器学习产品, 如果您不信任自己的 流水线。
第 4 条规则:确保第一个模型简单易用,并正确实施基础架构。
第一个模型能最大限度地提升您的商品效果,因此不需要 多花些心思但您遇到的基础架构问题要比实际情况多得多 预期。在有人能够使用您精心设计的新型机器学习系统之前, 以确定:
- 如何为您的学习算法获取样本。
- 首先明确什么是“良好”“bad”和“bad”对你的系统意味着什么。
- 如何将模型集成到应用中。您可以采用 或 离线使用样本预计算模型,并将结果存储在表中。 例如,您可能想要对网页进行预分类并存储结果 但您可能希望实时对聊天消息进行分类。
选择简单的特征可以更轻松地确保:
- 特征可以正确应用于您的学习算法。
- 模型学习到合理的权重。
- 特征在服务器中正确到达您的模型。
有了系统可靠地完成这三项工作后,您就完成了 大部分工作。您的简单模型可为您提供基准指标和 可用于测试更复杂的模型。有些团队的目标是 表示“中性”首次发布:明确降低优先级的首次发布 避免分散注意力。
第 5 条规则:独立于机器学习测试基础架构。
确保基础架构是可测试的, 系统是被封装的,以便您测试其周围的所有内容。 具体而言:
- 测试将数据传入算法的过程。检查 。在隐私权允许的情况下,手动 检查输入到训练算法的结果。如果可能,请检查 对比相同数据的统计信息 在其他地方处理
- 测试能否从训练算法中获取模型。确保 模型在训练环境中给出的分数与 您的广告投放环境(请参阅 第 37 条规则)。
机器学习具有不可预测性,因此请确保您 对用于在训练和服务中创建样本的代码进行测试, 你可以在应用期间加载并使用固定模型。此外, 解读数据:请参阅 分析大型复杂数据集的实用建议。
第 6 条规则:复制流水线时注意丢弃的数据。
通常,我们通过复制现有流水线(即 货物崇拜编程 ),而旧流水线会丢弃新流水线所需的数据。 例如,Google+ 热门信息流水线 删除旧帖子(因为它会尝试对最新帖子进行排名)。此流水线 已复制用于 Google+ 信息流,其中较早的帖子 仍然有意义,但管道仍会丢弃旧帖子。另一个 常见模式是仅记录用户看到的数据。因此,这些数据是 如果我们要对用户看不到特定帖子的原因进行建模, 因为已舍弃所有负例。以下国家/地区也发生过类似问题: 开始游戏。在处理 Play 应用首页时,创建了新的流水线, 包含来自 Play 游戏着陆页的示例,但没有任何功能 消除歧义。
第 7 条规则:将启发式算法转变为特征或在外部处理它们。
通常,机器学习试图解决的问题 全新的内容。现有的排名或分类系统 无论你想要解决什么问题这意味着 规则和启发法。这些启发式方法经过调整后, 机器学习。您的启发法应该挖掘 这有两个原因首先,向机器的 会更加流畅。其次,这些规则通常包含大量 不想舍弃的系统直觉。共有四种 使用现有启发词语的方法:
- 使用启发法进行预处理。如果这个特征非常好, 则可以选择此方法举例来说,如果在垃圾邮件过滤器中,发件人 已列入黑名单,请勿试图重新了解哪些内容已被列入“黑名单” 。屏蔽该邮件。这种方法最适合 分类任务。
- 创建地图项。直接通过启发法创建特征是一种很好的做法。 例如,如果您使用启发法计算某个查询的相关性得分, 因此您可以将得分添加为特征的值。以后再说 可能希望利用机器学习技术 (例如,将值转换为 值,或将其与其他特征相结合),但首先使用原始值 推断出的值。
- 挖掘启发法的原始输入。如果有适用于应用的启发法, 该公式包含的是安装量、 星期几,然后考虑将这些内容拆分开来, 然后分别将这些输入数据馈送到学习中。一些技巧 适用于集成学习的规则(请参阅 第 40 条规则)。
- 修改标签。如果您觉得启发式算法 捕获标签中当前未包含的信息。例如: 如果您想要尽可能提高下载量 优质内容,或许解决方案是用标签乘以 应用获得的平均星数。这方面有很大的余地。 请参阅“您的第一个目标”。
在机器学习中使用启发法时,务必留意是否会带来额外的复杂性 系统。在新的机器学习算法中使用旧的启发式方法可以 有助于顺利实现过渡,但要考虑 更简单的方法来实现同样的效果。
监控
一般而言,应养成良好的提醒健全度,例如让提醒具有可操作性 以及拥有信息中心页面
第 8 条规则:了解系统对新鲜度的要求。
如果您的模型已发布一天,性能会下降多少?一周 旧?一个季度前?这些信息有助于您了解 监控指标如果您丢失了重要商品 如果模型未更新, 第二天,最好让工程师连续观察该视频。大多数广告 投放系统每天都要处理新广告, 。例如,如果 Google Play 搜索未更新,可能会有 在不到一个月的时间内造成负面影响。“热门信息”的一些模型 Google+ 的模型中没有帖子标识符, 他们可以 并不经常导出这些模型。其他具有帖子标识符的模型 更新频率大大增加另请注意,新鲜度可能会随时间而变化 特别是在向模型中添加特征列或从中移除特征列时。
第 9 条规则:在导出模型之前检测问题。
许多机器学习系统都有一个阶段,需要您将模型导出到 。如果导出的模型存在问题,则是 问题。
在导出模型之前,请进行健全性检查。具体而言,请确保 模型对于预留数据的性能是否合理。或者,如果您有 也不要导出模型。多个团队 持续部署模型时,检查 ROC 曲线 (简称 AUC) 。有关未导出的模型的问题,您需要 但在面向用户的模型中出现问题可能需要一个页面。好多了 在影响用户之前需要等待和确定的策略
第 10 条规则:留意静默失败情况。
与其他机器学习系统相比,机器学习系统 各种类型的系统假设要联接的特定表不是 更新。机器学习系统会做出调整,行为 都会继续保持在相当好的水平,然后逐渐衰退。有时,您会发现 过时数月的表,而简单刷新就可以提高性能 单个广告的覆盖率 特征可能会因实现方式变更而发生变化:例如,特征列 可能被填充到 90% 的样本中,然后突然下降到 示例。Play 曾经有一个过时 6 个月的表,而且令人耳目一新 仅这一表就使安装率提高了 2%。如果您跟踪 有时还可以手动检查数据 导致这些类型的故障
第 11 条规则:提供特征列所有者和文档。
如果系统很大,并且有很多特征列,请了解谁创建了 或维护每个特征列。如果您发现 某个特征列即将消失,请确保有人 信息。虽然许多特征列都有描述性名称, 更详细地了解这项功能的来龙去脉 以及它能起到什么帮助作用。
您的第一个目标
你会有很多自己关注的系统指标, 但机器学习算法通常需要一个目标,即 也就是算法“尝试”的进行优化在这里 目标与指标之间的差距:指标是指您的系统 这些报告不一定重要,也可能不重要。另请参阅 第 2 条规则。
第 12 条规则:选择直接优化哪个目标时无需过多考虑。
您想赚钱、取悦用户、让世界更美好 位置。您关注的指标有很多, (请参阅第 2 条规则)。不过, 在机器学习过程的早期阶段,您会注意到它们都在增加, 那些您并未直接优化的对象例如,假设您关心 点击次数和访问者在网站上停留的时间。如果您针对 那么广告所花费的时间可能会增加。
因此,请保持简单易懂,在权衡不同的指标时不要太过费心 你仍然可以轻松提高所有指标的时间请勿采用此规则 不过,请不要将目标与最终生命值混淆 系统(请参阅 第 39 条规则)。 而且,如果您发现自己直接提高 优化型指标,但决定不发布,则可能需要修改某些目标, 必需。
第 13 条规则:为您的第一个目标选择一个可观察且可归因的简单指标。
很多时候你并不知道真正的目标是什么。您以为自己确实如此, 您注视旧系统和新机器学习系统的数据并进行对比分析 您就会意识到自己想要调整目标此外,不同的团队 成员通常无法就真正的目标达成一致。机器学习目标应该是 一个既易于衡量又可代表真实情况的目标。 事实上,通常并没有什么“真实的”目标(请参阅 规则 39)。 因此 基于简单的机器学习目标进行训练,并考虑使用“政策层”顶部 它允许您添加其他逻辑(希望非常简单的逻辑) 最终排名。
要进行建模,最简单的方法是直接观察到并归因于 以下操作:
- 用户是否点击了此已排名链接?
- 用户是否下载了此已排名对象?
- 此已排名对象是否被转发/回复/通过电子邮件发送?
- 是否对此已排名对象进行了评分?
- 这个显示的对象是否被标记为垃圾内容/色情内容/攻击性内容?
从一开始就避免对间接影响进行建模:
- 该用户第二天访问网站了吗?
- 用户访问了网站多长时间?
- 日活跃用户数是多少?
间接效应是衡量指标的有效方法,可在 A/B 测试和发布期间使用 决策。
最后,不要试图让机器学习系统弄清楚以下问题:
- 用户是否乐于使用该产品?
- 用户对体验是否满意?
- 产品是否提高了用户的整体幸福感?
- 这对公司的整体健康状况有何影响?
这些都很重要,但也极难衡量。而应使用 指标:如果用户感到满意,他们会在网站上停留更长时间。如果用户 满意,他们明天会再次光顾。就身心健康和 企业健康状况,因此需要通过人工判断来将任何 根据所销售产品的性质确定机器学习目标, 业务计划
第 14 条规则:从可解释的模型着手可以更轻松地进行调试。
线性回归、逻辑回归和泊松回归 概率模型。每个预测都可解释为 概率或预期值。这使其比模型更易于调试 使用目标(零一损失、各种合页损失等), 以直接优化分类准确性或排名效果。对于 例如,如果训练中的概率与 或通过检查生产系统, 找出问题所在。
例如,在线性回归、逻辑回归或泊松回归中, 平均预测预期与平均标签(1- 时刻已校准或刚刚校准)。假设您没有 并且您的算法已收敛, true。如果每个样本的特征值为 1 或 0, 则校准特征值为 1 的 3 个样本集。此外,如果您 每个样本的特征值都为 1,则所有样本的集合就是 已校准。
借助简单的模型,您可以更轻松地处理反馈环(请参阅 第 36 条规则)。 通常,我们会根据这些概率预测结果来做出决定:例如,排名 期望值(即点击概率/下载概率等)降低的帖子。 不过,请注意,在选择要使用的模型时, 模型所给出的数据的可能性要更重要, 第 27 条规则)。
第 15 条规则:在政策层中区分垃圾内容过滤和质量排名。
质量排名是一门艺术,但垃圾内容过滤就像一场战争。影响 选择优质帖子的参考信息 他们将调整自己的帖子,使其具有这些属性。因此, 质量排名应侧重于对质量良好的内容进行排名 信仰。您不应为垃圾内容排名学习者提供折扣 非常高。同样,“少儿不宜”内容应与质量分开处理 排名。垃圾信息过滤则另当别论。您应该知道, 需要生成的特征会不断变化。通常 将是您添加到系统中的显而易见的规则(如果一个帖子超过了 不要检索该帖子,等等)。任何学习模型 每天更新一次,甚至更快。创作者的声誉 内容将会起到很大的作用
在某种程度上,必须整合这两个系统的输出。保留 不过,您应该对搜索结果中的垃圾内容采取更严格的过滤措施 这比过滤电子邮件中的垃圾邮件要简单得多此外,将代码删除 质量分类器的训练数据中的垃圾内容。
机器学习第二阶段:特征工程
在机器学习系统生命周期的第一阶段, 将训练数据输入学习系统, 检测感兴趣的指标,并创建服务基础架构。之后 您有一个可正常运行的端到端系统,其中包含插桩单元测试和系统测试, 第二阶段开始。
在第二阶段,有很多容易实现的目标。有很多种 显而易见的特征,可以引入系统。因此,第二个 涉及提取尽可能多的特征, 将它们以直观的方式组合起来在此阶段,所有指标 的趋势。我们会推出很多新功能 是时候发布新功能了 我们聘用了许多工程师,他们能够将所有 工作所需的数据整合到一起, 打造真正卓越的学习系统。
第 16 条规则:制定发布和迭代更新计划。
不要指望你现在正在处理的模型是 甚至会停止发布模型。因此 考虑此次发布中增加的复杂性是否会降低 未来发布的新版本中。许多团队每季度都会为客户启动一个或更多 。发布新模型有三个基本原因:
- 您将想到一些新功能。
- 您要调整正则化并以新的方式组合旧特征。
- 您正在调整目标。
无论如何,对模型进行关注使用起来可能不是件好事:查看数据 将信息输入到示例中有助于发现新信号以及旧信号、失效信号 。因此,在构建模型时,请考虑添加或移除 或重新组合特征。想一想为 并验证其正确性。思考一下能否 同时运行两个或三个副本。最后,不必担心 第 16 个特征(共 35 个特征)能否纳入这个版本的流水线。您 。
第 17 条规则:从直接观察和报告的特征(而不是学到的特征)开始。
这可能是一个有争议的观点,但可以避免很多误区。第 1 个 我们来介绍一下什么是学习的特征。学习特征是指 由外部系统(如非监督式聚类) 或由学习器本身进行(例如,通过分解模型或深度学习)。 这两种方式都很有用,但它们可能会带来很多问题, 不是第一个模型。
如果您使用外部系统来创建地图项,请注意,外部系统 都有自己的目标。外部系统的目标可能仅仅是微不足道 与当前目标相关如果您抓取外部 则信息可能会过时。如果您从 其含义可能会发生变化。如果您使用外部系统 提供一种功能,但请注意,采用这种方式时需要非常小心。
分解模型和深度模型的主要问题在于, 非凸形。因此,我们无法保证 而每次迭代找到的局部最小值可以是 与众不同。这种变化使得我们难以判断 对系统的更改是有意义的或随机的。通过创建模型,无需 您可以获得出色的基准性能。在此之后 基准,您可以尝试更为深奥的方法。
第 18 条规则:探索可跨情境泛化的内容特征。
机器学习系统通常只是整个大环境的一小部分。对于 例如,假设有个帖子可能会出现在“热门信息”中,那么 在信息显示在“推荐的内容”中之前, 温度高。如果您向学员提供这些统计信息,他们将能推广新帖子 它在正在优化的上下文中没有任何数据。 YouTube“接下来观看”频道可能会根据观看次数或 观看次数(用户观看一个视频后观看另一个视频的次数 YouTube 搜索带来的观看次数。您还可以使用露骨内容 用户评分。最后,如果您有一项用作标签的用户操作 能够在不同的上下文中看到对该文档执行的操作 功能。所有这些功能都可以让您为情境引入新的内容。 请注意,这与个性化无关:要确定用户是否喜欢 内容,然后再判断出不同观众的喜欢程度。
第 19 条规则:尽可能使用非常具体的特征。
在拥有海量数据的情况下,学习数百万个简单的特征比 一些复杂的特征。要检索的文档和 规范化查询不会提供很多泛化, 使用标签对头部查询进行排名。因此,别害怕 一种特征,其中每项特征都适用于你的一小部分数据, 整体覆盖率在 90%以上您可以使用正则化来消除 不适用于过少样本的特征。
第 20 条规则:组合并修改现有特征,以人类可以理解的方式创建新特征。
您可以通过多种方式组合和修改地图项。机器学习 借助 TensorFlow 等系统,您可以使用 转换。 两种最标准的方法是“离散化”和“十字”。
离散化包括获取一个连续特征并创建许多 离散特征。以年龄等连续特征为例。您可以 创建一个年龄小于 18 岁的特征为 1, 如果年龄在 18 到 35 岁之间,则为 1。无需过多考虑 这些直方图:基本分位数可为您提供大部分的影响。
“交叉”用于组合两个或更多特征列。TensorFlow 中的特征列 表示一组同构特征(例如,{男性、女性}、{美国、 加拿大、墨西哥}等)。叉型记号是一种新的特征列, 例如,{男性, 女性} × {美国,加拿大, 墨西哥}。这一新功能列 将包含该特征(男性、加拿大)。如果您使用 TensorFlow 让 TensorFlow 为你创建这个组合,这个(男性, 加拿大)特征将 是否出现在代表加拿大男性的示例中。请注意,这需要大量 大量数据,用于学习具有三个、四个或更多基准组合的模型 特征列。
生成非常大的特征列的组合可能会过拟合。例如, 假设您正在执行某种搜索,并且您有一个特征列, 特征列,其中包含数据集中单词 文档。你可以用“十字架”来组合这些符号 特征(请参阅第 21 条规则)。
处理文本时,有两种替代方案。最严厉的就是 点积。点积最简单的形式是只计算 查询和文档之间通用的字词。然后,您可以 离散化处理。另一种方法是交集:因此,我们将得到一个特征 当且仅当“小马”一词出现时,同时存在于文档和 以及另一个特征,当且仅当单词“the”为 同时在文档和查询中查询。
第 21 条规则:您可以在线性模型中学习的特征权重数量与您拥有的数据量大致成正比。
目前关于 Responsible AI 的 模型复杂度是否合适,但此规则基本上 我谈到过,人们对 从一千个例子中,我们能学到任何东西 需要超过 100 万个样本,因为它们会卡在某种方法中, 知识。关键在于根据数据规模调整学习规模:
- 如果您开发的是搜索排名系统 则得到 1000 个字词。 那么您应该在文档之间使用点积 以及查询功能 TF-IDF, 还有五十种其他高度人工工程的 功能。1000 个样本,十几个特征。
- 如果您有一百万个样本,请将文档和查询 特征列,同时使用正则化和特征选择。 这将为您提供数百万个特征,但通过正则化, 所需的资源千万个样本,也许有十万个特征。
- 如果您有数十亿或数千亿个样本,则可以使用 包含文档和查询词元的特征列,使用特征选择 和正则化。你会有十亿个样本, 功能。统计学习理论很少设定严格的限制, 很好的指南。
最后,使用 第 28 条规则 决定要使用哪些功能。
第 22 条规则:清理不再使用的特征。
未使用的功能会产生技术债务。如果您发现自己没有使用 特征,并且将其与其他特征结合使用是行不通的,那么 将其从基础架构中移除您希望保持基础设施干净 可以尽快尝试最具前景的特征。如果 随时有人可以重新添加您的地图项。
在考虑添加或保留哪些功能时,请留意覆盖率。数量 特征覆盖哪些示例?例如,如果您有一些 个性化功能,但只有 8% 的用户进行过个性化设置 就不会非常有效
同时,一些特征可能会超出其权重。例如,如果 您的某个特征仅覆盖 1% 的数据,但 90% 的样本 为正向的特征,则非常适合添加该特征。
对系统的人工分析
在介绍机器学习的第三阶段之前, 可以专注于任何机器学习课程都未教授的内容: 分析现有模型并加以改进。这更像是一门艺术 但还有助于避免几种反模式。
第 23 条规则:您不是典型的最终用户。
这可能是让团队陷入困境的最简单的方法。虽然 fishfood 可以带来很多好处(在团队中使用原型)和 dogfood 测试(使用公司内的原型设计),员工应注意 评估效果是否正确一项明显糟糕的更改 不应使用任何看起来比较接近生产状态的内容, 或花钱请外行人士回答 通过众包平台,或通过针对真实用户的实时实验。
导致这种情况的原因有以下两种。第一,您离现在太近 代码。您可能正在寻找帖子的特定方面,或者 因为情感上过于牵涉(例如确认偏差)。其次, 您的时间太宝贵了。考虑 9 位工程师齐聚一处的成本 一个小时的会议,并考虑有多少合同规定使用人工标签购买 是众包平台
如果您确实想获得用户反馈,请使用用户体验 方法。创建用户角色(Bill Buxton 的 素描用户体验) 并进行易用性测试(需要 使用史蒂夫·克鲁格的 Don’t Make me Think) 。用户角色 就是创建一个假设性的用户。例如,如果您的团队成员都是男性, 不妨设计一个 35 岁的女性用户画像( 特征),看看模型生成的结果,而不是 10 个 25-40 岁之间的男性。通过真实的观众来观看他们的反应 进行易用性测试也可以从 您的观点。
第 24 条规则:衡量模型之间的增量。
以前可以做的最简单、有时最有用的测量之一 用过这款新模型来计算 新结果来自正式版。例如,如果您遇到了排名问题 针对整个系统中的某个查询样本运行这两个模型,并查看 结果的对称差值的大小(按排名 排名)。如果差异很小 那么它几乎没有任何变化如果差距非常大 则您需要确保更改是好的环顾四周 对称差较大的查询可以帮助您了解 更改的性质。不过,请确保系统 稳定版。确保模型与自身比较时,其得分较低(理想情况下 零) 对称差值。
第 25 条规则:选择模型时,实用性效果比预测能力更重要。
您的模型可能会尝试预测点击率。不过,归根结底,键 你该如何预测。如果您将其用于 那么最终排名的质量要比 预测本身。如果您预测某文档是垃圾内容的概率, 然后对被阻止的内容进行界定,以及允许的内容的精确度 更加重要大多数情况下 同意:如果他们不同意,可能就会带来微小的收益。因此,如果 有一些变化虽然改善了对数损失,但 查找其他功能。当这种情况开始发生得越来越频繁 是时候重新审视模型的目标了。
第 26 条规则:在衡量的错误中寻找规律,并创建新特征。
假设您看到一个模型“错误”的训练样本。在 则该错误可能是假正例或假负例。 在排名任务中,错误可能是一对错误,其中正例排名较低 而不是负值。最重要的一点是,这是一个示例, 机器学习系统知道这个错误,并希望修正错误, 优化建议。如果您向模型提供可修正错误的特征, 模型将使用它。
另一方面,如果您尝试根据样本创建特征, 系统会忽略该功能。例如, 假设用户在 Play 应用搜索中搜索“免费游戏”。假设 排名靠前的搜索结果之一是相关度较低的搞笑应用。因此,您针对 “搞笑应用”。不过,如果您要最大限度地提高安装量,并且用户 在他们搜索免费游戏时安装搞笑应用功能 就无法达到您想要的效果
找到模型判断有误的样本后,再寻找 现有功能集以外的位置例如,如果系统看起来 将较长的帖子降位,然后添加帖子长度。不要太过具体 您添加的功能。如果您要增加帖子长度,请不要猜测是什么 只需添加十几个特征,然后让模型自行思考 (请参阅 第 21 条规则 )。这是获得所需内容的最简单方式。
第 27 条规则:尝试量化观察到的不良行为。
您团队中的部分成员会开始对 现有损失函数捕获到的那些不喜欢的特征。在 这时,他们应该竭尽所能把抱怨化为实实在在 数字。例如,如果他们认为有太多“搞笑应用”正在展示 可以要求人工审核者识别搞笑应用。(您可以 可以采用人工标注的数据, 的查询占了很大一部分流量。)如果您的 您可以开始将其用作特征、目标、 或指标一般规则是“先衡量,再优化”。
第 28 条规则:请注意,短期行为相同并不意味着长期行为相同。
假设您有一个新系统,它会查看每个 doc_id 和 exact_query, 然后针对每个查询计算每个文档的点击概率。 您发现在两个版本的系统中,其行为与当前系统几乎完全相同。 同时运行 A/B 测试和 A/B 测试,因此考虑到它的简洁性, 不过,您发现未显示任何新应用。为什么呢?既然您的 系统只会根据自身在该查询中的历史记录来显示文档, 了解是否应显示新文档。
要了解此类系统如何长期运作,唯一的方法就是 它仅使用模型上线时获取的数据进行训练。这非常 难度也很大。
训练-应用偏差
训练-应用偏差是指训练期间的表现与使用偏差 性能这种偏差可能由以下原因引起:
- 在训练流水线和服务流水线中处理数据的方式存在差异。
- 从训练到应用时数据的变化。
- 模型与算法之间的反馈环。
我们观察到了 Google 的生产机器学习系统, 应用偏差,从而对性能产生负面影响。最好的解决办法是 明确监控这些数据,以便系统和数据更改不会造成偏差 被忽视。
第 29 条规则:确保训练时能够像实际工作一样,最佳方法是保存应用时使用的特征集,然后通过管道将这些特征传输到日志,以便在训练时使用。
即使您不能对每个样本都执行此操作,也可以对一小部分样本执行此操作, 以便验证应用和训练之间的一致性(请参阅 第 37 条规则)。实现这一目标的团队 有时也会对结果感到惊讶。 YouTube 首页 在传送时切换到了具有显著质量的日志记录功能 改进并降低代码复杂性,并且许多团队 基础架构
第 30 条规则:对抽样数据进行重要性加权,不要随意丢弃它们!
当您的数据过多时,就会忍不住选取文件 1-12,并且 忽略文件 13-99。这是错误的做法。虽然 永不向用户显示,重要性加权最适合用于 。重要性加权意味着,如果您决定要 概率为 30% 的样本样本 X,赋予其权重 10/3。 重要性加权,本次培训中讨论的 第 14 条规则 仍保持不动。
第 31 条规则:请注意,如果您在训练和应用时联接表中的数据,表中的数据可能会发生变化。
假设您将文档 ID 与包含这些文档特征(例如 评论次数或点击次数)。从训练时间到应用时间, 更改表格您的模型对同一文档的预测可能 因此在训练和应用时存在差异。避免这种排序的最简单方法 即在应用时记录特征(请参阅 第 32 条规则 )。如果表 也可以每小时或每天截取表快照 比较相近的数据。请注意,这仍不能完全解决 问题。
第 32 条规则:尽可能在训练流水线和服务流水线之间重复使用代码。
批处理与在线处理不同。在线处理过程中, 您必须在收到每个请求后对其进行处理(例如 ),而在批处理中,您可以合并任务(例如 进行联接)。投放时您进行的是在线处理,而 训练属于批处理任务。不过,您仍需为 重复使用代码的方法例如,您可以创建一个对象 其中任何查询或联接的结果可能 以非常人性化的方式存储,并且可以轻松测试错误。然后, 收集完所有信息后,无论是应用还是训练, 运行一种通用方法,以通俗易懂、 特定于你的系统,以及机器学习系统 预期。这样可以消除训练-应用偏差的一个根源。作为 推论,在训练之间尽量不要使用两种不同的编程语言。 和投放。这样的话,您几乎不可能 代码。
第 33 条规则:如果您根据 1 月 5 日之前的数据生成模型,请根据 1 月 6 日及之后的数据测试模型。
一般而言,使用收集到的数据来衡量模型的表现 因为这能更好地反映系统执行 生产环境。如果您根据 1 月 5 日之前的数据生成模型,请 使用 1 月 6 日起的数据。您预计 在新数据上表现不会那么好,但应该不会变差。 由于存在每日效果,您可能无法预测平均点击次数 而曲线下方的面积,表示 正类别样本的得分高于负类别样本的可能性 应该比较接近
第 34 条规则:在用于过滤的二元分类(例如垃圾邮件检测或确定感兴趣的电子邮件)中,在短期内小牺牲一下性能,即可获得非常纯净的数据。
在过滤任务中,标记为负例的样本不会 用户。假设您有一个过滤器,可以屏蔽 75% 的负例 。您可能会想要从 实例。例如,如果用户将某封电子邮件标记为垃圾邮件, 您可能需要从中吸取经验教训。
但这种方法会引入采样偏差。在以下情况下,您可以收集更清晰的数据: 而是在所有流量中,将 1% 的流量标记为“预留” 向用户提供样本。现在,您的过滤器屏蔽了至少 74% 的 反例。这些预留样本可以成为训练数据。
请注意,如果过滤器屏蔽了 95% 或更多的负分类样本, 方法变得不太可行。即便如此,如果您想衡量 您可以制作更小的样本(例如 0.1% 或 0.001%)。十 数千个样本就足以非常准确地估算性能。
第 35 条规则:注意排名问题存在的固有偏差。
当您彻底改变排名算法,以至于不同的结果 则表明你已经有效地更改了算法要评估的数据 。这时会出现这种偏差,您应该设计 模型。具体方法有多种。这些方法是 以所有方式青睐您的模型已经见过的数据。
- 对覆盖更多查询的特征进行更高的正则化,而不是 只针对一项查询启用的功能这样,模型会倾向于 一个或若干个查询所特有的特征, 泛化到所有查询。这种方法有助于防止 泄露到不相关的查询中产生的结果。请注意,这与 对特征列进行更多正则化的更传统建议 具有更多唯一值。
- 仅允许特征具有正权重。因此,任何良好的特征 比“未知”特征好。
- 不启用仅记为文档的功能。这是第 1 条的极端版本。对于 即使某给定应用是热门下载应用,而不管其 您不想在所有地方都展示它非仅处理文档 功能可帮助您轻松实现这一目标。您不想展示特定商品的原因 这都与 确保用户能使用所需的所有应用例如,如果用户搜索 他们可能会下载“愤怒的小鸟” 这并不是他们的本意。展示此类应用可能会提高下载率, 最终会导致用户需求无法得到满足
第 36 条规则:通过位置特征避免出现反馈环。
内容的位置会极大地影响用户的互动可能性 。如果您将某个应用放在首位,那么该应用的点击率会更高, 您便会确信它更有可能被点击。要解决这一问题, 这是为了添加定位特征,即 网页内容。您使用位置特征训练模型, 学习权重,例如,特征“第 1 位”大量。您的模型 因此对于“1stposition=true”的样本,它对其他因素的权重较低。 然后在提供服务时,不向任何实例提供位置特征, 因为您要先对候选定位设置进行评分, 已确定显示顺序
请注意,请务必将任何位置特征与 模型的其余部分。 让模型是位置特征与 其余特征的特征是理想的。例如,切勿越过 定位特征。
第 37 条规则:衡量训练/应用偏差。
一般来说,有几种因素可能会导致偏差。 此外,您可以将其分为以下几个部分:
- 训练数据的效果与留出时间之间的差异 数据。一般来说,这种情况始终存在,但并非总是坏事。
- 留出数据与“次日”效果之间的差异 数据。同样,这种情况始终存在。您应该将正则化调整为 最大限度地提升次日的效果。但是,如果 与次日数据之间的差异可能表明某些功能 具有时效性,并且可能会降低模型性能。
- “次日”的效果差异数据和实时 数据。如果您将模型应用于训练数据中的某个样本, 因此得到的结果应该与之前完全相同(请参阅 第 5 条规则 )。 因此,此处的差异可能表示存在工程错误。
机器学习第三阶段:缓慢增长、优化优化和复杂模型
有些迹象表明第二阶段即将结束。 首先,你的月增长开始减弱。你将开始拥有 各指标间的权衡取舍:您将看到一些指标上升,而另一些指标则下降 实验。这才是真正有趣的方面。由于增益较难 机器学习必须变得更加复杂。需要注意的是: 部分比前面的部分具有更多蓝天规则。我们见证了许多团队 是机器学习的第一阶段和第二阶段的理想时刻。一次阶段 III 已到达,各团队必须找到自己的道路。
第 38 条规则:如果目标不一致的情况造成了问题,就不要在新功能上浪费时间。
随着衡量结果趋于平稳,您的团队将开始关注 将超出当前机器学习系统的目标范围。如 如果现有算法未涵盖产品目标, 您需要更改目标或产品目标。对于 例如,您可以优化点击次数、+1 次数或下载次数, 并在一定程度上取决于人工审核者所做的决定。
第 39 条规则:发布决策是长期产品目标的替代指标。
Alice 有一个关于减少预测安装次数的逻辑损失的想法。她 添加特征。逻辑损失下降。在进行实时实验时 看到安装率提高然而,当她进行发布审核时 有人指出,日活跃用户数减少了 5%。 团队决定不发布该模型。爱丽丝很失望,但现在 认识到发布决策取决于多个条件,而只有其中一部分条件 使用机器学习直接进行优化。
事实是,现实世界并不是龙和地下城,也没有“命中” 积分"识别商品的状况该团队必须使用 它收集的统计信息,以尝试有效预测系统的 。他们需要关注互动度、1 天活跃用户数 (DAU)、30 天 日活 (DAU)、收入和广告主的投资回报率。这两种指标 A/B 测试本身的衡量机制 目标:满足用户、增加用户、提高合作伙伴满意度和利润, 即便如此,您也可以考虑使用代理 和一家蓬勃发展的公司。
做出发布决策时,只有所有指标都有所提高(或至少 不会变得更糟)。如果团队能够在先进的机器之间 学习算法和简单的启发式方法(如果简单的启发法 在所有这些指标上的表现都更出色,则应选择启发式算法。此外, 并非对所有可能的指标值进行明确排名。具体而言,请考虑 以下两种情况:
实验 | 日活跃用户数 | 收入/天 |
---|---|---|
A | 100 万 | 400 万美元 |
B | 200 万 | 200 万美元 |
如果当前系统是 A,那么团队不太可能改用 B。如果 而当前系统是 B,那么团队就不太可能改用 A。本次 似乎与理性行为相冲突;然而,对当前环境变化的 指标不一定能达成,因此也就有巨大的风险, 更改。每个指标都涵盖了团队所担心的一些风险。
此外,没有一个指标能涵盖该团队最大的顾虑,即“我的产品在哪里?” 五年后”?
另一方面,个人更倾向于选择能够完成的目标 直接优化。大多数机器学习工具都青睐这样的环境。一个 都能在这种市场中稳步进行 环境有一种机器学习类型,即多目标学习, 从而开始解决这个问题例如,您可以用公式来表示 约束满意度问题,其中每个指标都有下限,以及 会优化指标的某些线性组合。不过,即便如此, 指标可以轻松理解为机器学习目标:如果某个文档 这是因为用户看到了相应内容。但是 而要弄清楚用户为什么访问您的网站就要困难得多了。如何预测 整体而言 AI 完备性:与计算机一样难 视觉或自然语言处理技术,
第 40 条规则:确保集成学习简单易行。
接收原始特征并直接对内容进行排名的统一模型 是最容易调试和理解的模型。然而,一个集成学习模型 “model”结合其他模型的分数)可以取得更好的效果。为了保持 每个模型都应该是一个仅接受输入的输入, 或具有许多特征(但不是两者皆有)的基本模型。如果您有 以单独训练的其他模型为基础,然后将它们组合起来 也可能会导致不良行为
使用一个简单的模型进行集成学习,该模型只接受“基本”的输出 作为输入。您还希望在这些集成学习模型上强制实施属性。 例如,基本模型生成的得分的增加不应 降低集成学习的分数。此外,最好将传入模型 语义可解释(例如经过校准), 底层模型不会混淆集成模型。此外,强制要求 基础分类器的预测概率的提升 降低集成学习的预测概率。
第 41 条规则:当效果达到稳定状态时,寻找可供添加的新信息来源,而不是优化现有信号。
您添加了一些有关用户的受众特征信息。你添加了一些 以及文档字词的相关信息。您已了解模板 并调整正则化。你还没有发现含有更多亮点的发布 您的关键指标在几个季度的提升幅度就超过了 1%。接下来该怎么做呢?
是时候开始为完全不同的目标构建基础架构了 功能,如该用户在 过去一天、过去一周或过去一年的数据,或来自其他媒体资源的数据。使用 Wikidata 或公司内部信息(例如 Google 的 知识图谱)。使用深度分析 学习。开始调整您对多少回报的预期 ,并相应加大投入力度。与任何 就必须权衡添加新特征 以降低复杂性的代价。
第 42 条规则:不要期望多样性、个性化或相关性与热门程度之间的相关性,正如您想象的那样。
一组内容的多样性可以有多种含义, 该内容的来源之一。个性化意味着 用户会获得自己的结果。相关性是指 查询更适合该查询。因此, 这些属性定义为与普通属性不同
但常识往往很难打败。
请注意,如果您的系统衡量的是点击次数、观看时长、观看次数、+1 次数、 您可以衡量内容的热门程度。团队 有时会尝试学习具有多样性的个人模型。为了提供个性化体验,他们将 (某些特征代表 或多样化(指明此文档是否含有 与返回的其他文档共有的功能,例如作者或内容), 并发现这些特征的权重变小了(或者有时是不同的标志) 比他们预期的要大
这并不意味着多样性、个性化或相关性不重要。 如上一条规则所述,您可以通过进行后期处理来 多样性或相关性。如果您发现长期目标有所增加,您可以 声明除了热门程度外,多样性/相关性也很有价值。您可以 可以继续使用后处理,也可以直接修改 基于多样性或相关性确定目标。
第 43 条规则:在不同产品中,您的好友通常是相同的。但您的兴趣却不是这样。
Google 的团队通过采用能够预测 一种产品之间的联系,并在另一个产品中发挥良好的效果。 您的好友属于他们。另一方面,我看过几个团队 难以应对各种产品间的个性化功能。是的,似乎 因为它应该能正常运行。目前好像没有。有时 使用来自一个属性的原始数据来预测另一个属性的行为。此外, 请注意,即使用户知道某位用户在其他媒体资源上已有历史记录 帮助。例如,如果两个产品上都存在用户活动 仅作陈述性的陈述。
相关作品
Google 内部和外部都有很多关于机器学习的文档。
- 机器学习速成课程: 应用机器学习简介。
- 机器学习:概率方法 ,向大家介绍机器学习领域。
- 良好的数据分析: 一种考虑数据集的数据科学方法。
- 深度学习,作者:Ian Goodfellow 等人学习非线性模型。
- Google 论文 技术债务,也就是 很多一般性建议
- Tensorflow 文档。
致谢
感谢 David Westbrook、Peter Brandt、Samuel Ieong、Chenyu Zhao、Li Wei、 Michalis Potamias、Evan Rosen、Barry Rosenberg、Christine Robson、James Pine、 Tal Shaked、Tushar Chandra、Mustafa Ispir、Jeremiah Harmsen、Konstantinos Katsiapis、Glen Anderson、Dan Duckworth、Shishir Birmiwal、Gal Elidan、Su Lin Wu、Jaihui Liu、Fernando Pereira 和 Hrishikesh Aradhye 进行了多次更正, 建议和实用示例。另外,感谢 Kristen Lefevre、Suddha Basu 和 Chris Berg,他们在早期版本中提供了帮助。不限 错误、遗漏或(喘气!)不受欢迎的观点都是我自己的。
附录
本文档中多次提到了 Google 产品。接收者 提供更多背景信息,我会对其中最常见的示例进行简要说明 。
YouTube 概述
YouTube 是一项流式视频服务。YouTube“接下来观看”和 YouTube 首页 网页团队使用机器学习模型对视频推荐进行排名。“接下来观看”频道推荐 在当前播放的视频结束后观看,而首页会推荐 向浏览首页的用户展示广告
Google Play 概览
Google Play 有许多解决各种问题的模型。Play 搜索、Play 首页个性化推荐和“用户还安装了以下应用”等应用都会使用 机器学习。
Google+ 概览
Google+ 在多种情况下都采用了机器学习技术: “信息流”信息被用户看到的次数,按“热门信息”进行排名个帖子(帖子 对你认识的人进行排名,等等。Google+ 2019 年,Google 已关闭所有个人账号,并被 Google Currents 所取代 。