机器学习规则:ML工程最佳实践----rule_of_ml section 3【翻译】
作者:黄永刚
ML Phase III: 缓慢提升、精细优化、复杂模型
第二阶段就已经接近结束了。首先你的月收益开始减少。你开始要在不同的指标之间做出平衡,你会发现有的涨了而有的却降了。事情变得有趣了。获取收益变得更难了,机器学习也已经变得更加复杂了。
警告:这一部分比前面有更多的理论虚的东西。我们见过很多团队在机器学习的一二阶段过得还是很愉快的。一旦进入第三阶段,他们就不得不寻找自己的出路了。
Rule #38: 如果目标没有变化就不要在新特征上浪费时间
随着评价进入平稳期,你的团队开始关注系统目标以外的其他问题。像以前的状态一样,如果已存的算法目标没有覆盖产品的目标,你就要改变你的目标或者产品的目标。例如,你或许优化点击、赞、下载,但是都是基于部分人类评委专家做决策的。
Rule #39: 基于产品长期目标做决策
Alice有个想法可以降低安装预测的逻辑损失。她加了一个特征。逻辑损失也降低了。当她做线上实验时,安装率也上升了。但是,当她做审议会议的时候,有人指出日活跃用户数下降了5%。小组没有上线这个模型。Alice比较失望,但是现在认识到做这个决定是基于很多准则的,而只有一部分是可以使用ML来优化的。
事实是真实世界不是地下城与龙:没有‘血量’表示你产品的健康程度。团队必须收集信息作出统计以尝试高效的预测出系统将来会成为什么样子。他们需要关注约定;日活跃用户数,30日活跃用户数,收益,广告商的投资回报。这些可以在自己系统里面使用A/B测试衡量的指标只是长期目标的一个间接衡量,既要满足用户需求,还要用户量的增长,满足合作方的要求,多赚取收益。
当左右指标都上升(至少不降低)时,最容易做决定了。如果团队要在复杂的机器学习算法和简单的启发式方法中选择,如果简单启发式方法能够在这些指标中做的更好,就应该选择它。而且,对于所有可能的指标之间也没有明确的优先级。考虑下面两个场景:
实验 | 日活跃用户数 | 日收益 |
---|---|---|
A | 1 百万 | $4 百万 |
B | 2 百万 | $2 百万 |
如果当前系统是A,那么团队不可能转向B。如果当前系统是B,那团队不可能转向A。这可能和理性的行为是矛盾的。但是,改变指标后预测能不能成功不好说,因此存在巨大的风险。每一个都存在着风险。而且没有哪个指标可以说是最终的,“我的产品5年后是什么样子呢”?
个人来讲,另一方面倾向于可以直接优化的目标。大多的机器学习工具也倾向于这种情况,工程师也能够提取稳定特征。多目标学习问题从开始就强调这个问题。例如,可以针对每个指标建立一个有有约束的问题,之后将对于多个指标的问题结合起来一起优化。但是,并不是所有指标都是可以形成机器学习的目标函数。如果一个文档被点击了,或者一个APP被安装,是因为它们刚好被展示出来了。而且还很难找到为什么用户会访问你的网站。要对一个网站做整体的预测,这是很难的,就像计算机视觉和自然语言处理一样。
Rule #40: 使用简单模型做集成
使用原始数据并直接将内容进行排序,使用这种方式的模型都容易理解和调试。然而,如果讲这些模型集成起来效果会更好。为了尽可能保持简单,集成模型要么所有的输入是其他模型的输出,要么都是原始特征,最好不要两种都存在。而且要能够对这些基模型一起训练,否则会导致差的结果。
只将基模型的输出作为输入的集成最好使用简单的模型。这样也对集成模型性质有保证了。例如,基模型取得了增长,最起码不能集成之后的结果出现下降的情况。最好就是基模型可以某种意义上的解释,以便于基模型的变化不至于把集成模型搞混乱了。这样可以保证,基础分类器的预测概率增长在集成模型的概率上不会出现下降的情况。
Rule #41: 当性能进入瓶颈期,找其他信息源,而不是捣鼓已经有了的信息
你已经添加了用户人口信息,也添加过了文档的词组信息。也经过了模板摸索(指前面的两部分),也已经对正则化进行调节了。但是依然没有在关键指标上看到多于1%的性能提升。
那是时候采取一些激进的做法,对针对不同的特征采取其它方式。如从不同维度对用户在过去一天一周一年中的使用信息进行统计并形成文档。或者使用深度学习模型。根据投入估计期望,并相应的调整投入的精力。作为一个工程项目,你必须对添加新特征所增加的复杂度和增加的收益之间进行权衡。
Rule #42: 不要期盼多样性、个性化,或者相关性和受欢迎程度相关
追求多样性意味很多东西,需要种类多样的内容来源。个性化意味着每个用户都有各自的结果。关联性意味着对一个特定的查询须有特定恰当的结果。因此这三个属性和普通的共性是不同的。
还要一个问题,这种共性很难被打破。
如果你的系统正在度量点击、滞留时长、播放量、分享量等指标,其实你真正的是在度量内容的流行程度。有的时候,团队尝试学习多样性的个性模型。为了实现个性化,他们添加了一些特征想实现系统能够实现个性化(代表用户兴趣的特征)或者多样性,但最终会发现这些特征所获得的权重远远的低于他们期望得到的。
这不是说多样性,个性化等没有价值。如前面指出的规则一样,你可以做一些后处理来增加多样性等。如果在长期目标指数得到了增长,那你就可以说多样性或者其他相关性是有价值的了。也可以继续使用你的后处理,或基于多样性等相关性来直接修改目标函数。
Rule #43: 其他人对不同的产品倾向相似,但你或许不同于此
google团队已经使用另一个产品的模型在另一个产品上,并取得了较好的结果。你可能就遇到了这么一群小伙伴。另一方面,我见过一些团队试图在独立产品中作出个性化特征。是的,按理讲应该是可行的的,但是现在看来,并不是这样。使用一个属性的原始数据来预测另一个属性的行为,有的时候是可行的。要记住,即使知道一个用户在另一个属相上的历史行为对你来说都是有帮助的。
reference:
- http://feisky.xyz/machine-learning/resources/rules_of_ml.html
- Rules of Machine Learning: Best Practices for ML Engineering
机器学习规则:ML工程最佳实践----rule_of_ml section 3【翻译】的更多相关文章
- 机器学习规则:ML工程最佳实践----rules_of_ml section 1【翻译】
作者:黄永刚 机器学习规则:ML工程最佳实践 本文旨在指引具有机器学习基础知识的工程师等人,更好的从机器学习的实践中收益.介绍一些应用机器学习需要遵循的规则,类似于Google C++ 风格指南等流行 ...
- 机器学习规则:ML工程最佳实践----rules_of_ml section 2【翻译】
作者:黄永刚 ML Phase II: 特征工程 第一阶段介绍了机器学习的一个周期,为学习系统获取训练数据,通过有趣的引导设计指标,创建一个服务框架.在有了一个完整系统之后,就进入了第一阶段. 第二阶 ...
- android最佳实践的建议(翻译自android-best-practices)
Best practices in Android development Use Gradle and its recommended project structure 使用Gradle和其推荐的 ...
- 搭建Spring4+Spring MVC web工程的最佳实践
Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将会感觉 ...
- (转)iOS 最佳实践
本文转自http://www.jianshu.com/p/b0bf2368fb95 感谢作者和译者 iOS最佳实践 iOS最佳实践 译者注 本文翻译自 futurice 公司的 iOS Good Pr ...
- CSS media query应用中的层叠特性使用最佳实践
media query是css3规范中引入的,它提供了一种responsive design的基础机制:浏览器在不同size的设备中将以不同样式展现网页,这就给一个网页能够适应不同device一种可能 ...
- 【机器学习】Google机器学习工程的43条最佳实践
https://blog.csdn.net/ChenVast/article/details/81449509 本文档旨在帮助那些掌握机器学习基础知识的人从Google机器学习的最佳实践中获益.它提供 ...
- 《C+编程规范 101条规则、准则与最佳实践》笔记
<C+编程规范 101条规则.准则与最佳实践> 0.不要拘泥于小节(了解哪些东西不应该标准化) * 与组织内现有编码规范一致即可 * 包括但不限于: - 缩进 - 行长度 - 命名规范 - ...
- 诗人般的机器学习,ML工作原理大揭秘
诗人般的机器学习,ML工作原理大揭秘 https://mp.weixin.qq.com/s/7N96aPAM_M6t0rV0yMLKbg 选自arXiv 作者:Cassie Kozyrkov 机器之心 ...
随机推荐
- 判断QString是否为纯数字,查找自身最长重复子字符串
1.判断QString是否为纯数字 bool IsDigitString(QString strSource) { bool bDigit = false; if (strSource.isEmpty ...
- [JZOJ 5893] [NOIP2018模拟10.4] 括号序列 解题报告 (Hash+栈+map)
题目链接: https://jzoj.net/senior/#main/show/5893 题目: 题解: 考虑暴力怎么做,我们枚举左端点,维护一个栈,依次加入元素,与栈顶元素和栈内第二个元素相同时弹 ...
- 27.boost多线程
#define _CRT_SECURE_NO_WARNINGS #include <boost/thread.hpp> #include <iostream> #include ...
- ShellExcuteA
ShellExecuteA(,//0表示系统打开 "open",//操作 "1.mp3",//操作路径 0,//第四个,第五个参数都是保留参数,默认都为0 0, ...
- 8年js总结
http://www.cnblogs.com/tylerdonet/p/5543813.html
- 线程状态与tcb、线程的生命周期
struct tcb { u32_t status; struct reg_context thread_context; void *stack; struct thread_info thread ...
- ActiveMQ学习笔记(4)----JMS的API结构和开发步骤
1. JMS的API结构 其实上图中的五个API在第一节中我们都已经使用到了.本节将会讲非持久化和持久化topic的使用. 2. JMS的基本开发步骤 1. 创建一个JMS工厂, Connectio ...
- NetworkX-画图
参考:https://blog.csdn.net/qq951127336/article/details/54586869 1.创建图 networkx有四种图 Graph .DiGraph.Mult ...
- 用SqlDataReader返回多个结果集
using System; using System.Data; using System.Data.SqlClient; namespace Northwind { class Program { ...
- Vrtualbox虚拟机中共享文件夹配置
虚拟机装的是ubuntu 16.0.4版本的linux,本机是macOs 10.12.1版本 Vrtualbox进行如下配置 在Vrtualbox-->设置-->共享文件夹-->添加 ...