像真正的工程师一样进行机器学习,而不是像优秀的工程师那样机器学习专家。
实际上,您将面临的大部分问题都是工程问题。均匀拥有优秀机器学习专家的所有资源,大部分好处都是都源自出色的特征,而不是出色的机器学习算法。基本的原则是方法是:
这种方法适用于。只有当学习一些简单的技巧,让自己取得更大的成功。增加复杂性会减慢未来版本的发布速度。
本文档的布局如下:
例如,如果您要对应用程序市场中的应用程序进行排名,您可以使用安装率或安装次数。如果您检测到垃圾内容,以便滤除之前发送过垃圾邮件的发布商不要害怕使用人类修改。如果您需要对联系人进行排名,请对最近使用的联系人进行排名最高(或按字母顺序排序)。如果机器学习并不是在掌握了数据之前,请勿使用商品。
在正式确定机器学习系统的用途之前,请尽可能可能性。这样做的原因如下:
通过以更加自由的方式收集指标,您可以更全面地了解。发现问题了?添加指标进行跟踪!对某些人感到兴奋上次发布版本的定量变化?添加指标进行跟踪!
专注于您的第一个流水线的系统基础架构。玩得很开心所有富有想象力的机器学习产品,如果您不信任自己的流水线。
第一个模型能最大限度地提升您的商品效果,因此不需要多花些心思但您遇到的基础架构问题要比实际情况多得多预期。在有人能够使用您精心设计的新型机器学习系统之前,以确定:
选择简单的特征可以更轻松地确保:
有了系统可靠地完成这三项工作后,您就完成了大部分工作。您的简单模型可为您提供基准指标和可用于测试更复杂的模型。有些团队的目标是表示“中性”首次发布:明确降低优先级的首次发布避免分散注意力。
确保基础架构是可测试的,系统是被封装的,以便您测试其周围的所有内容。具体而言:
通常,机器学习试图解决的问题全新的内容。现有的排名或分类系统无论你想要解决什么问题这意味着规则和启发法。这些启发式方法经过调整后,机器学习。您的启发法应该挖掘这有两个原因首先,向机器的会更加流畅。其次,这些规则通常包含大量不想舍弃的系统直觉。共有四种使用现有启发词语的方法:
在机器学习中使用启发法时,务必留意是否会带来额外的复杂性系统。在新的机器学习算法中使用旧的启发式方法可以有助于顺利实现过渡,但要考虑更简单的方法来实现同样的效果。
一般而言,应养成良好的提醒健全度,例如让提醒具有可操作性以及拥有信息中心页面
许多机器学习系统都有一个阶段,需要您将模型导出到。如果导出的模型存在问题,则是问题。
如果系统很大,并且有很多特征列,请了解谁创建了或维护每个特征列。如果您发现某个特征列即将消失,请确保有人信息。虽然许多特征列都有描述性名称,更详细地了解这项功能的来龙去脉以及它能起到什么帮助作用。
要进行建模,最简单的方法是直接观察到并归因于以下操作:
从一开始就避免对间接影响进行建模:
间接效应是衡量指标的有效方法,可在A/B测试和发布期间使用决策。
最后,不要试图让机器学习系统弄清楚以下问题:
线性回归、逻辑回归和泊松回归概率模型。每个预测都可解释为概率或预期值。这使其比模型更易于调试使用目标(零一损失、各种合页损失等),以直接优化分类准确性或排名效果。对于例如,如果训练中的概率与或通过检查生产系统,找出问题所在。
例如,在线性回归、逻辑回归或泊松回归中,平均预测预期与平均标签(1-时刻已校准或刚刚校准)。假设您没有并且您的算法已收敛,true。如果每个样本的特征值为1或0,则校准特征值为1的3个样本集。此外,如果您每个样本的特征值都为1,则所有样本的集合就是已校准。
质量排名是一门艺术,但垃圾内容过滤就像一场战争。影响选择优质帖子的参考信息他们将调整自己的帖子,使其具有这些属性。因此,质量排名应侧重于对质量良好的内容进行排名信仰。您不应为垃圾内容排名学习者提供折扣非常高。同样,“少儿不宜”内容应与质量分开处理排名。垃圾信息过滤则另当别论。您应该知道,需要生成的特征会不断变化。通常将是您添加到系统中的显而易见的规则(如果一个帖子超过了不要检索该帖子,等等)。任何学习模型每天更新一次,甚至更快。创作者的声誉内容将会起到很大的作用
在某种程度上,必须整合这两个系统的输出。保留不过,您应该对搜索结果中的垃圾内容采取更严格的过滤措施这比过滤电子邮件中的垃圾邮件要简单得多此外,将代码删除质量分类器的训练数据中的垃圾内容。
在机器学习系统生命周期的第一阶段,将训练数据输入学习系统,检测感兴趣的指标,并创建服务基础架构。之后您有一个可正常运行的端到端系统,其中包含插桩单元测试和系统测试,第二阶段开始。
在第二阶段,有很多容易实现的目标。有很多种显而易见的特征,可以引入系统。因此,第二个涉及提取尽可能多的特征,将它们以直观的方式组合起来在此阶段,所有指标的趋势。我们会推出很多新功能是时候发布新功能了我们聘用了许多工程师,他们能够将所有工作所需的数据整合到一起,打造真正卓越的学习系统。
不要指望你现在正在处理的模型是甚至会停止发布模型。因此考虑此次发布中增加的复杂性是否会降低未来发布的新版本中。许多团队每季度都会为客户启动一个或更多。发布新模型有三个基本原因:
这可能是一个有争议的观点,但可以避免很多误区。第1个我们来介绍一下什么是学习的特征。学习特征是指由外部系统(如非监督式聚类)或由学习器本身进行(例如,通过分解模型或深度学习)。这两种方式都很有用,但它们可能会带来很多问题,不是第一个模型。
分解模型和深度模型的主要问题在于,非凸形。因此,我们无法保证而每次迭代找到的局部最小值可以是与众不同。这种变化使得我们难以判断对系统的更改是有意义的或随机的。通过创建模型,无需您可以获得出色的基准性能。在此之后基准,您可以尝试更为深奥的方法。
在拥有海量数据的情况下,学习数百万个简单的特征比一些复杂的特征。要检索的文档和规范化查询不会提供很多泛化,使用标签对头部查询进行排名。因此,别害怕一种特征,其中每项特征都适用于你的一小部分数据,整体覆盖率在90%以上您可以使用正则化来消除不适用于过少样本的特征。
离散化包括获取一个连续特征并创建许多离散特征。以年龄等连续特征为例。您可以创建一个年龄小于18岁的特征为1,如果年龄在18到35岁之间,则为1。无需过多考虑这些直方图:基本分位数可为您提供大部分的影响。
“交叉”用于组合两个或更多特征列。TensorFlow中的特征列表示一组同构特征(例如,{男性、女性}、{美国、加拿大、墨西哥}等)。叉型记号是一种新的特征列,例如,{男性,女性}×{美国,加拿大,墨西哥}。这一新功能列将包含该特征(男性、加拿大)。如果您使用TensorFlow让TensorFlow为你创建这个组合,这个(男性,加拿大)特征将是否出现在代表加拿大男性的示例中。请注意,这需要大量大量数据,用于学习具有三个、四个或更多基准组合的模型特征列。
处理文本时,有两种替代方案。最严厉的就是点积。点积最简单的形式是只计算查询和文档之间通用的字词。然后,您可以离散化处理。另一种方法是交集:因此,我们将得到一个特征当且仅当“小马”一词出现时,同时存在于文档和以及另一个特征,当且仅当单词“the”为同时在文档和查询中查询。
目前关于ResponsibleAI的模型复杂度是否合适,但此规则基本上我谈到过,人们对从一千个例子中,我们能学到任何东西需要超过100万个样本,因为它们会卡在某种方法中,知识。关键在于根据数据规模调整学习规模:
未使用的功能会产生技术债务。如果您发现自己没有使用特征,并且将其与其他特征结合使用是行不通的,那么将其从基础架构中移除您希望保持基础设施干净可以尽快尝试最具前景的特征。如果随时有人可以重新添加您的地图项。
在考虑添加或保留哪些功能时,请留意覆盖率。数量特征覆盖哪些示例?例如,如果您有一些个性化功能,但只有8%的用户进行过个性化设置就不会非常有效
同时,一些特征可能会超出其权重。例如,如果您的某个特征仅覆盖1%的数据,但90%的样本为正向的特征,则非常适合添加该特征。
在介绍机器学习的第三阶段之前,可以专注于任何机器学习课程都未教授的内容:分析现有模型并加以改进。这更像是一门艺术但还有助于避免几种反模式。
这可能是让团队陷入困境的最简单的方法。虽然fishfood可以带来很多好处(在团队中使用原型)和dogfood测试(使用公司内的原型设计),员工应注意评估效果是否正确一项明显糟糕的更改不应使用任何看起来比较接近生产状态的内容,或花钱请外行人士回答通过众包平台,或通过针对真实用户的实时实验。
以前可以做的最简单、有时最有用的测量之一用过这款新模型来计算新结果来自正式版。例如,如果您遇到了排名问题针对整个系统中的某个查询样本运行这两个模型,并查看结果的对称差值的大小(按排名排名)。如果差异很小那么它几乎没有任何变化如果差距非常大则您需要确保更改是好的环顾四周对称差较大的查询可以帮助您了解更改的性质。不过,请确保系统稳定版。确保模型与自身比较时,其得分较低(理想情况下零)对称差值。
您的模型可能会尝试预测点击率。不过,归根结底,键你该如何预测。如果您将其用于那么最终排名的质量要比预测本身。如果您预测某文档是垃圾内容的概率,然后对被阻止的内容进行界定,以及允许的内容的精确度更加重要大多数情况下同意:如果他们不同意,可能就会带来微小的收益。因此,如果有一些变化虽然改善了对数损失,但查找其他功能。当这种情况开始发生得越来越频繁是时候重新审视模型的目标了。
假设您看到一个模型“错误”的训练样本。在则该错误可能是假正例或假负例。在排名任务中,错误可能是一对错误,其中正例排名较低而不是负值。最重要的一点是,这是一个示例,机器学习系统知道这个错误,并希望修正错误,优化建议。如果您向模型提供可修正错误的特征,模型将使用它。
您团队中的部分成员会开始对现有损失函数捕获到的那些不喜欢的特征。在这时,他们应该竭尽所能把抱怨化为实实在在数字。例如,如果他们认为有太多“搞笑应用”正在展示可以要求人工审核者识别搞笑应用。(您可以可以采用人工标注的数据,的查询占了很大一部分流量。)如果您的您可以开始将其用作特征、目标、或指标一般规则是“先衡量,再优化”。
假设您有一个新系统,它会查看每个doc_id和exact_query,然后针对每个查询计算每个文档的点击概率。您发现在两个版本的系统中,其行为与当前系统几乎完全相同。同时运行A/B测试和A/B测试,因此考虑到它的简洁性,不过,您发现未显示任何新应用。为什么呢?既然您的系统只会根据自身在该查询中的历史记录来显示文档,了解是否应显示新文档。
要了解此类系统如何长期运作,唯一的方法就是它仅使用模型上线时获取的数据进行训练。这非常难度也很大。
训练-应用偏差是指训练期间的表现与使用偏差性能这种偏差可能由以下原因引起:
我们观察到了Google的生产机器学习系统,应用偏差,从而对性能产生负面影响。最好的解决办法是明确监控这些数据,以便系统和数据更改不会造成偏差被忽视。
批处理与在线处理不同。在线处理过程中,您必须在收到每个请求后对其进行处理(例如),而在批处理中,您可以合并任务(例如进行联接)。投放时您进行的是在线处理,而训练属于批处理任务。不过,您仍需为重复使用代码的方法例如,您可以创建一个对象其中任何查询或联接的结果可能以非常人性化的方式存储,并且可以轻松测试错误。然后,收集完所有信息后,无论是应用还是训练,运行一种通用方法,以通俗易懂、特定于你的系统,以及机器学习系统预期。这样可以消除训练-应用偏差的一个根源。作为推论,在训练之间尽量不要使用两种不同的编程语言。和投放。这样的话,您几乎不可能代码。
一般而言,使用收集到的数据来衡量模型的表现因为这能更好地反映系统执行生产环境。如果您根据1月5日之前的数据生成模型,请使用1月6日起的数据。您预计在新数据上表现不会那么好,但应该不会变差。由于存在每日效果,您可能无法预测平均点击次数而曲线下方的面积,表示正类别样本的得分高于负类别样本的可能性应该比较接近
在过滤任务中,标记为负例的样本不会用户。假设您有一个过滤器,可以屏蔽75%的负例。您可能会想要从实例。例如,如果用户将某封电子邮件标记为垃圾邮件,您可能需要从中吸取经验教训。
但这种方法会引入采样偏差。在以下情况下,您可以收集更清晰的数据:而是在所有流量中,将1%的流量标记为“预留”向用户提供样本。现在,您的过滤器屏蔽了至少74%的反例。这些预留样本可以成为训练数据。
请注意,如果过滤器屏蔽了95%或更多的负分类样本,方法变得不太可行。即便如此,如果您想衡量您可以制作更小的样本(例如0.1%或0.001%)。十数千个样本就足以非常准确地估算性能。
当您彻底改变排名算法,以至于不同的结果则表明你已经有效地更改了算法要评估的数据。这时会出现这种偏差,您应该设计模型。具体方法有多种。这些方法是以所有方式青睐您的模型已经见过的数据。
内容的位置会极大地影响用户的互动可能性。如果您将某个应用放在首位,那么该应用的点击率会更高,您便会确信它更有可能被点击。要解决这一问题,这是为了添加定位特征,即网页内容。您使用位置特征训练模型,学习权重,例如,特征“第1位”大量。您的模型因此对于“1stposition=true”的样本,它对其他因素的权重较低。然后在提供服务时,不向任何实例提供位置特征,因为您要先对候选定位设置进行评分,已确定显示顺序
请注意,请务必将任何位置特征与模型的其余部分。让模型是位置特征与其余特征的特征是理想的。例如,切勿越过定位特征。
一般来说,有几种因素可能会导致偏差。此外,您可以将其分为以下几个部分:
有些迹象表明第二阶段即将结束。首先,你的月增长开始减弱。你将开始拥有各指标间的权衡取舍:您将看到一些指标上升,而另一些指标则下降实验。这才是真正有趣的方面。由于增益较难机器学习必须变得更加复杂。需要注意的是:部分比前面的部分具有更多蓝天规则。我们见证了许多团队是机器学习的第一阶段和第二阶段的理想时刻。一次阶段III已到达,各团队必须找到自己的道路。
Alice有一个关于减少预测安装次数的逻辑损失的想法。她添加特征。逻辑损失下降。在进行实时实验时看到安装率提高然而,当她进行发布审核时有人指出,日活跃用户数减少了5%。团队决定不发布该模型。爱丽丝很失望,但现在认识到发布决策取决于多个条件,而只有其中一部分条件使用机器学习直接进行优化。
做出发布决策时,只有所有指标都有所提高(或至少不会变得更糟)。如果团队能够在先进的机器之间学习算法和简单的启发式方法(如果简单的启发法在所有这些指标上的表现都更出色,则应选择启发式算法。此外,并非对所有可能的指标值进行明确排名。具体而言,请考虑以下两种情况:
如果当前系统是A,那么团队不太可能改用B。如果而当前系统是B,那么团队就不太可能改用A。本次似乎与理性行为相冲突;然而,对当前环境变化的指标不一定能达成,因此也就有巨大的风险,更改。每个指标都涵盖了团队所担心的一些风险。
此外,没有一个指标能涵盖该团队最大的顾虑,即“我的产品在哪里?”五年后”?
接收原始特征并直接对内容进行排名的统一模型是最容易调试和理解的模型。然而,一个集成学习模型“model”结合其他模型的分数)可以取得更好的效果。为了保持每个模型都应该是一个仅接受输入的输入,或具有许多特征(但不是两者皆有)的基本模型。如果您有以单独训练的其他模型为基础,然后将它们组合起来也可能会导致不良行为
使用一个简单的模型进行集成学习,该模型只接受“基本”的输出作为输入。您还希望在这些集成学习模型上强制实施属性。例如,基本模型生成的得分的增加不应降低集成学习的分数。此外,最好将传入模型语义可解释(例如经过校准),底层模型不会混淆集成模型。此外,强制要求基础分类器的预测概率的提升降低集成学习的预测概率。
但常识往往很难打败。
Google的团队通过采用能够预测一种产品之间的联系,并在另一个产品中发挥良好的效果。您的好友属于他们。另一方面,我看过几个团队难以应对各种产品间的个性化功能。是的,似乎因为它应该能正常运行。目前好像没有。有时使用来自一个属性的原始数据来预测另一个属性的行为。此外,请注意,即使用户知道某位用户在其他媒体资源上已有历史记录帮助。例如,如果两个产品上都存在用户活动仅作陈述性的陈述。
Google内部和外部都有很多关于机器学习的文档。
感谢DavidWestbrook、PeterBrandt、SamuelIeong、ChenyuZhao、LiWei、MichalisPotamias、EvanRosen、BarryRosenberg、ChristineRobson、JamesPine、TalShaked、TusharChandra、MustafaIspir、JeremiahHarmsen、KonstantinosKatsiapis、GlenAnderson、DanDuckworth、ShishirBirmiwal、GalElidan、SuLinWu、JaihuiLiu、FernandoPereira和HrishikeshAradhye进行了多次更正,建议和实用示例。另外,感谢KristenLefevre、SuddhaBasu和ChrisBerg,他们在早期版本中提供了帮助。不限错误、遗漏或(喘气!)不受欢迎的观点都是我自己的。
本文档中多次提到了Google产品。接收者提供更多背景信息,我会对其中最常见的示例进行简要说明。
GooglePlay有许多解决各种问题的模型。Play搜索、Play首页个性化推荐和“用户还安装了以下应用”等应用都会使用机器学习。