谷歌机器学习白皮书全解析 43条黄金法则(三)

AI科技评论按:此白皮书为谷歌总结的机器学习(ML)最优实践方法,浓缩了其多年技术积累与经验,尤其是 YouTube、Google Play 和 Google+ 等平台背后的 ML 算法开发、维护经历。谷歌于白皮书中总结了四十三条 ML 黄金法则,旨在帮助已经掌握了基础知识的开发者少走弯路。本文上接AI科技评论"谷歌机器学习白皮书全解析 43条黄金法则(二)"。

3.3 训练服务的偏差(Training­-Serving Skew)

这里训练服务偏差是指系统在训练时的性能表现和服务中的性能表现出现差别。造成这种差别的原因可能有如下三个方面:

1) 在训练和服务中的数据处理流水线不同;

2) 在训练和服务中使用了不同的数据;

3) 模型和算法间的反馈回路引起。

我们注意到谷歌的机器学习系统也存在训练服务偏差,而且会对性能产生负面影响。这里需要说明的是:最好的解决办法就是明确地监视它,使系统和数据的改变不至于引发潜在的偏差。

29. 确保训练和服务一样好的最直接办法是:保存服务时使用的特征,然后将这些特征导入日志,以便在训练中使用

即使你不能对每个样例都这样做,做一小部分也比什么也不做好,这样你就可以验证服务和训练之间的一致性(见规则37)。在谷歌采取了这项措施的团队有时候会对其效果感到惊讶。比如YouTube主页在服务时会切换到日志记录特征,这不仅大大提高了服务质量,而且减少了代码复杂度。目前有许多团队都已经在其基础设施上采用了这种策略。

30. 重视采样数据

当数据太多时,有些团队可能会选择丢弃一部分以减轻负担。这是一个明显的错误:历史经验证明在训练过程中丢弃数据将引发一系列问题(详见规则6)。当然,有时候的确可以丢弃数据,比如那些从未向用户显示过的,但重要性加权却是更好的选择。重要性加权意味着,如果你决定以30%的概率对样例X进行抽样,则权重应该是3/10。值得一提的是,使用重要性加权并不影响规则14中讨论的校准属性。

31. 注意表格中的数据可能改变

假设你通过包含文件特征的表格(表格中还可能包含评论或点击的次数)加入文件的ID信息,那么需要注意表格中的特征可能会在训练和服务的不同时间点发生一些变化,造成模型对同一文档的预测也跟着改变。避免此类问题的最简单方法是在服务时记录特征(请参阅规则32)。如果表格的变化足够缓慢的话,你可以每天或每小时都记录一次表格以获得非常接近的数据,但需要注意的是,这并不能完全解决问题。

32. 尽量在训练和服务流水线中复用代码

首先需要明确的一点是:批处理与在线处理不同。在线处理中,你必须在每个请求到达时及时处理(例如必须为每个查询单独查找);而在批处理中,你可以组合任务(例如建立联结)。类似的,可以将服务视为在线处理过程,而训练视为批处理过程,而其中有许多代码是可以复用的。比如说,你可以创建特定于系统的对象,其中的所有联结和查询结果都以人类可读的方式存储,错误也可以被简单地测试。然后,一旦在服务或训练期间收集了所有信息,你就可以通过一种通用方法在这个特定对象和机器学习系统需要的格式之间形成互通,训练和服务的偏差也得以消除。另外,由此推知:最好不要在训练和服务期间使用不同的编程语言(因为不同的语言间几乎无法复用)。

33. 训练和测试的数据不能相同

一般来说,最好用不同的数据对模型进行训练和测试,例如你用1月5日之前的数据训练了一个模型,那么最好用1月6日之后的数据对模型展开测试。可能模型对新数据的性能表现不如训练数据,但也不会太糟。由于可能会产生每日效应(daily effects),因此你可能无法预测平均点击率或转化率,但曲线下方的面积(表示正面样例的分数高于反面样例的可能性)应该是接近的。

34. 在二进制分类过滤的应用场景中(例如垃圾邮件检测),不要为了纯净的数据做太大的性能牺牲

一般在过滤应用场景中,反面样例并不会对用户展示。不过假如你的过滤器在服务过程中阻止了75%的反面样例,那么你可能需要从向用户显示的实例中提取额外的训练数据并展开训练。比如说,用户将系统认可的邮件标记为垃圾邮件,那么你可能就需要从中学习。

但这种方法同时也引入了采样偏差。如果改为在服务期间将所有流量的1%标记为“暂停”,并将所有这样的样例发送给用户,那你就能收集更纯净的数据。现在你的过滤器阻止了至少74%的反面样例,这些样例可以成为训练数据。

需要注意的是,如果你的过滤器阻止了95%或更多的反面样例,那这种方法可能就不太适用。不过即使如此,如果你想衡量服务的性能,可以选择做出更细致的采样(例如0.1%或0.001%),一万个例子足以准确地估计性能。

35. 注意排序问题的固有偏差

当你彻底改变排序算法时,一方面会引起完全不同的排序结果,另一方面也可能在很大程度上改变算法未来可能要处理的数据。这会引入一些固有偏差,因此你必须事先充分认识到这一点。以下这些方法可以有效帮你优化训练数据。

1) 对涵盖更多查询的特征进行更高的正则化,而不是那些只覆盖单一查询的特征。这样,模型将偏好于那些基于一个或几个特定查询的特征,而不是所有的特征。这种方式可以有效防止那些最常见的查询结果泄漏到不相关的查询中。需要注意的是,这与一条更传统的建议相左:更多地正则化一些具有单一值的特征栏。

2) 只允许特征具有正向权重,这样一来就能保证任何好特征都会比未知特征合适。

3) 不要选择那些只处理文档数据的特征。例如,不管搜索请求是什么,即使一个给定的应用程序是当前的热门下载,你也不会想在所有地方都显示它。没有文档特征的话,这一点会很容易做到。

36. 避免具有位置特征的反馈回路

内容的位置会显著影响用户与它交互的可能性。很明显,如果你把一个App置顶,那它一定会更频繁地被点击。处理这类问题的一个有效方法是加入位置特征,即关于页面中的内容的位置特征。假如你用正向特征来训练模型,那模型就会更偏向“1st-position”这类的特征。因而模型对其他因素的权重就会相应地减小,例如对“1st-position = true”这种样例。在服务的时候,你可以选择不提供任何位置特征的实例,或者为所有位置特征设置相同的初始值,因为在决定以怎样的顺序显示它们之前,你具有决策权。

需要注意的是,因为训练和测试的不对称性,所以最好在一些位置特征和模型之间保持一定的分离性,这一点很重要。让模型成为位置特征函数和其他特征函数的和,是理想的状态。比如说,最好不要交叉任何文档特征和位置特征。

37. 测量训练/服务偏差

许多情况都会引起偏差,但它们大多可以分为如下三类:

1) 训练数据和测试数据的性能之间的差异。一般来说,这总是存在的,但并不会太严重。

2) 测试数据的性能与“第二天数据”(next-day data)之间的差异。同样,这也会一直存在。你可以不同程度地正则化以最大限度地提高第二天的性能(next-day performance)。然而,如果在测试数据和第二天数据之间存在很大的性能下降,这有可能意味着某些特征是时间敏感的,而且整个模型的性能也会跟着下降。

3) “第二天数据”和实时数据的性能之间的差异。如果你将模型应用于训练数据的样例,也应用于相同的服务样例,则它们应该给出完全相同的结果(详见规则5)。因此,这里的差异可能是指工程误差。雷锋网

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2017-01-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 深度学习初学者必读:张量究竟是什么?

选自Kdnuggets 作者:Ted Dunning 机器之心编译 参与:晏奇、吴攀 今天很多现有的深度学习系统都是基于张量代数(tensor algebra...

2665
来自专栏CDA数据分析师

一位算法师工程师的Spark机器学习笔记:构建一个简单的推荐系统

推荐引擎应用场景: .用户有海量选择:随着场景内item越来越多,用户越来越难以选择到合适的产品 .个性化场景:在选择产品时,会借鉴那些与推荐用户相似地群体,...

2377
来自专栏CDA数据分析师

访谈 | 与吉林大学统计系教授聊聊时间序列分析

本文由经管之家CDA数据分析师独家整理,转载请注明来源 前不久,经管之家邀请到了吉林大学数据学院概率统计系教授朱复康博士参与了论坛的线上互动问答,与广大坛友就时...

17910
来自专栏机器之心

TensorFlow发布面向JavaScript开发者的机器学习框架TensorFlow.js

机器之心报道 参与:机器之心编辑部 当时时间 3 月 30 日,谷歌 TenosrFlow 开发者峰会 2018 在美国加州石景山开幕,来自全球的机器学习用户围...

37212
来自专栏新智元

【AI玩跳一跳终极奥义】首个端到端神经网络,看AI在玩游戏时注意什么

作者:Flood Sung 编辑:费欣欣 【新智元导读】不用传统外挂,训练纯深度学习AI来玩跳一跳,结果会如何?本文作者使用模仿学习,训练了一个端到端的神经网络...

3727
来自专栏数据派THU

带你用深度学习虚拟机进行文本迁移学习(附代码)

本文讲述了现代机器学习的模型,主要由微软数据科学家Anusua Trivedi和数据科学家经理Wee Hyong Tok共同撰写。

1024
来自专栏人工智能LeadAI

推荐系统 | 威尔逊区间法

我推荐一种之前在惠普做过一种排序方法:威尔逊区间法 我们先做如下设定: (1)每个用户的打分都是独立事件。 (2)用户只有两个选择,要么投喜欢'1',要么投不喜...

4236
来自专栏黄成甲

数据分析之相关分析

描述性分析只能分析数据呈现出来的基本特征,不能挖掘变量之间深层次的关系,无法为后期模型的建立及预测做准备。这个时候就需要掌握推断性分析方法,第一个方法就是相关分...

422
来自专栏AI科技评论

开发 | 如何从零训练神经网络玩游戏?这里有一段详细的解读视频

AI科技评论消息,最近,Youtube 上的知名游戏博主 SethBling 训练了一个叫 MariFlow 的神经网络来玩 Mario Kart 游戏。在进行...

3527
来自专栏大数据文摘

李飞飞CS231n项目:这两位工程师想用神经网络帮你还原买家秀

每当某个明星或者时尚博主在微博或者朋友圈po出一张图,这就是一次低成本的营销机会。随着网购与照片分享变得越来越流行,利用用户原创内容(UGC, User Gen...

560

扫描关注云+社区