解密谷歌机器学习工程最佳实践

更新于 2017年12月8日 机器学习
我来说两句
wx:   网页版 2017-12-08 06:52
架构 视觉 算法 应用 资源 Martin Zinkevich Will Get Will Give 广告系统 行业动态 书籍
「良心整理 | 机器学习43条军规:解密谷歌机器学习工程最佳实践」作者介绍Martin Zinkevich现在是谷歌大脑的高级科学家,负责和参与了YouTube、Google Play 以及Google Plus等产品中的机器学习项目,本文也是基于作者在这三个产品上面做机器学习项目的各种经验和教训提炼而成。在加入谷歌之前是雅虎的高级科学家,曾在2010年和2011年两度获得雅虎的最高荣誉Yahoo Team Superstar Awards,对雅虎的广告系统做出过很多杰出贡献。梗概介绍本文把在产品中应用机器学习的过程从浅到深分成了三个大的阶段,又在这三个大的阶段中细分出了一些方面,以此对43条规则进行逻辑分类。简单来说,如果你是从头开始做机器学习系统,那么就可以在不同阶段参考这里面对应的条目,来保证自己走在正确的道路上。正文开始To make great products:do machine learning like the great engineer you are, not like the great machine learning expert you aren’t.这句话一定程度上是对整篇文章(叫手册可能更合适)的一个高度概括,ML在实际工作确实更多是工程问题,而不是算法问题。优先从工程效率中要效果,当把这部分榨干后,再考虑算法的升级。Before Machine LearningRule #1: Don’t be afraid to launch a product without machine learning.规则1:不要害怕上线没有机器学习的产品。中心思想一句话概括:If you think that machine learning will give you a 100% boost, then a heuristic will get you 50% of the way there.Rule #2: First, design and implement metrics.规则2:在动手之前先设计和实现评价指标。在构建具体的机器学习系统之前,首先在当前系统中记录尽量详细的历史信息,留好特征数据。这样不仅能够留好特征数据,还能够帮助我们随时了解系统的状态,以及做各种改动时系统的变化。Rule #3: Choose machine learning over a complex heuristic.规则3:不要使用过于复杂的规则系统,使用机器学习系统。简单来讲,复杂的规则系统难以维护,不可扩展,而我们很简单就可以转为ML系统,变得可维护可扩展。ML Phase I: Your First Pipeline构建第一个ML系统时,一定要更多关注系统架构的建设。虽然机器学习的算法令人激动,但是基础架构不给力找不到问题时会令人抓狂。Rule #4: Keep the first model simple and get the infrastructure right.规则4:第一个模型要简单,但是架构要正确。第一版模型的核心思想是抓住主要特征、与应用尽量贴合以及快速上线。Rule #5: Test the infrastructure independently from the machine learning.规则5:独立于机器学习来测试架构流程。确保架构是可单独测试的,将系统的训练部分进行封装,以确保其他部分都是可测试的。特别来讲:测试数据是否正确进入训练算法。检查具体的特征值是否符合预期。测试实验环境给出的预测结果与线上预测结果是否一致。Rule #6: Be careful about dropped data when copying pipelines.规则6:复制pipeline时要注意丢弃的数据。从一个场景复制数据到另一个场景时,要注意两边对数据的要求是否一致,是否有数据丢失的情况。Rule #7: Turn heuristics into features, or handle them externally.规则7:将启发规则转化为特征,或者在外部处理它们。机器学习系统解决的问题通常都不是新问题,而是对已有问题的进一步优化。这意味着有很多已有的规则或者启发式规则可供使用。这部分信息应该被充分利用(例如基于规则的推荐排序时用到的排序规则)。下面是几种启发式规则可以被使用的方式:用启发规则进行预处理。如果启发式规则非常有用,可以这么用。例如在垃圾邮件识别中,如果有发件人已经被拉黑了,那么就不要再去学“拉黑”意味着什么,直接拉黑就好了。制造特征。可以考虑从启发式规则直接制造一个特征。例如,你使用启发式规则来计算query的相关性,那么就可以把这个相关性得分作为特征使用。后面也可以考虑将计算相关性得分的原始数据作为特征,以期获得更多的信息。挖掘启发式规则的原始输入。如果有一个app的规则启发式规则综合了下载数、标题文字长度等信息,可以考虑将这些原始信息单独作为特征使用。修改label。当你觉得启发式规则中包含了样本中没有包含的信息时可以这么用。例如,如果你想最大化下载数,同时还想要追求下载内容的质量。一种可行的方法是将label乘以app的平均star数。在电商领域,也常常用类似的方法,例如在点击率预估的项目中,可考虑对最终下单的商品或者高质量的商品对应的样本增加权重。已有的启发式规则可以帮助机器学习系统更平滑的过渡,但是也要考虑是否有同等效果更简单的实现方式。Monitoring概括来讲,要保持好的监控习惯,例如使报警是可应对的,以及建设一个Dashboard页面。Rule #8: Know the freshness requirements of your system.规则8:了解你系统对新鲜度的要求。如果模型延迟一天更新,你的系统会受到多大的效果影响?如果是一周的延迟呢?或者更久?这个信息可以让我们排布监控的优先级。如果模型一天不更新收入就会下降10%,那么可以考虑让一个工程师全天候监控它。了解系统对新鲜度的要求是决定具体监控方案的第一步。Rule #9: Detect problems before exporting models.规则9:在模型上线之前检测问题。模型上线前一定要做完整性、正确性检查,例如AUC、Calibration、NE等指标的计算确认等。如果是模型上线前出了问题,可以邮件通知,如果是用户正在使用的模型出了问题,就需要电话通知了。Rule #10: Watch for silent failures.规则10:关注静默失败。这是一个非常重要,而又经常容易被忽略的问题。所谓的静默失败指的是全部流程都正常完成,但是背后依赖数据出了问题,导致模型效果逐步下降的问题。这种问题在其他系统中并不常出现,但是在机器学习系统中出现几率会比较高。例如训练依赖的某张数据表很久没有更新了,或者表中的数据含义发生了变化等,再或者数据的覆盖度忽然变少,都会对效果产生很大的影响。解决方法是是对关键数据的统计信息进行监控,并且周期性对关键数据进行人工检查。 转自:将门创投 完整内容请点击“阅读原文” via: http://mp.weixin.qq.com/s?__biz=MzA4NDEyMzc2Mw==&mid=2649678465&idx=3&sn=f89c0756c74ff194a60ccfd749b06e6b&scene=0#wechat_redirect

 

回复