机器学习的四十三条经验法则——来自谷歌的ML工程最佳实践
本文主要围绕的是谷歌公司(Google)在机器学习方面的经验,旨在为那些具备一定机器学习基础的读者提供最佳的经验法则。文章向读者展现机器学习经验法则的方式,与谷歌 C++ 风格指南以及其它流行的编程实践指南相类似。如果你曾上过机器学习的相关课程,或者曾构建或研究过机器学习的模型,那么你就已经具备了足够多的阅读本文的知识了。AI100 编译了《Rules of Machine Learning: Best Practices for ML Engineering》全文内容,在AI100公众号后台回复【机器学习法则】下载PDF全文翻译。
本文共分为四部分:
关于第一部分,它会帮助读者理解,当下构建机器学习系统是否适合。
关于第二部分,它将向读者介绍,第一次该如何部署自己的工作流。
关于第三部分,它将向读者介绍,机器学习系统是一个不断迭代更新的过程,工作流中会持续不断地添入新特征;同时,第三部分还会涉及如何评价模型、如何评价训练过程中的偏误。
在最后一部分,文章为大家提供了一些停滞不前时的做法。
在机器学习之前
法则1:不用害怕发布一款没有用到机器学习的产品。
法则2:将度量标准的设计和执行置于首位。
法则3:在机器学习和启发式方法中优先选择机器学习。
机器学习阶段1:第一条工作流
认真对待第一条工作流的基础架构建设。虽然发挥想象力构思模型很有意思,但首先得确保你的工作流是可靠的,这样出了问题才容易发现。
法则4:第一个模型要简单,基础架构要正确。
法则5:单独测试基础架构。
法则6:复制工作流时留意丢失的数据。
法则7:要么把启发式方法转化为特征,要么在外部处理它们。
监 控
一般来说,所有系统都要设置良好的警示程序,警报系统需要顺利执行,或者设置一个仪表板页面(dashboardpage)。
法则8: 了解系统的更新需求。
法则9: 输出模型前发现问题。
法则10:当心潜在的故障。
法则11:为特征栏指定负责人并进行文件编制。
你的第一个目标
你会关注许多系统评测指标,但机器学习算法的目标通常只有一个——这个目标是一个数字,算法需要不断地努力优化这个数字。在这里,我对目标和度量作一下区分:度量是系统报告给出的数字,不一定很重要。
法则12:选择直接优化的目标时不要想太多。
法则13:选择一个简单、可观测并且可归类的评估指标作为你的第一个目标。
法则14:从容易解释的模型入手会让调试过程更加容易。
法则15:在策略层将垃圾信息过滤和质量排名分开。
机器学习阶段2:特征工程
在机器学习系统研发周期的第一阶段,重点是把训练数据导入学习系统,确定度量和兴趣的评价指标(仪表化),并创建基础架构。当你有了一个端对端的系统,并且该系统的单元和测试都仪表化之后,第二阶段便开始了。
在第二阶段可以轻松实现许多成果。很多明显的特征都能被纳入系统。因此,该阶段需要纳入尽可能多的特征,并依据直观的感觉组合起来。在这个阶段,所有的度量仍会上升,会有很多成果发布,这时候最适合招募大量工程师,他们可以整合你需要的数据,来创造一个真正了不起的学习系统。
法则16:做好反复发布新模型的打算。
法则17:从直接观测到的特征入手,使用reported特征,而不是learned特征。
法则18:利用那些能跨语境使用的特征进行探索。
法则19:尽量使用明确的特征。
法则20:组合并改良现有的特征,用浅显易懂的方式创造新特征。
法则21:线性模型中的特征权重的数量应大致和样例数量形成一定的比例。
法则22:清除那些不再使用的特征。
系统的人工分析
在进入机器学习的第三阶段之前,有必要先关注一下机器学习课程上没有教过的东西:如何看待和改进现有的模型。这更像是艺术而非科学,但却能帮助我们避免某些反模式(anti-pattern)。
法则23:你并非典型终端用户。
法则24:测试模型之间的差量(delta参数)。
法则25:选择模型时,性能表现比预测力更重要。
法则26:在错误中寻找规律,然后创建新特征。
法则27:量化系统的不良行为。
法则28:注意,短期行为相同并不代表长期行为也相同。
训练偏差(Training-Serving Skew)
训练偏差是指训练时的表现和实际运行时的表现的差别。这种偏差可能由以下因素引起:
在训练时和在实际工作流中用不同的方式处理数据。
训练中的数据和在实际运行中的不同。
模型和算法之间存在回馈环。
我们观察到 Google 的机器学习产品也出现了训练偏差,这个训练偏差为实际的运行状况带来了负面的影响。最好的解决方案就是对其进行监督,以便观察到系统和数据的不易察觉的变化。
法则29: 要让实际产品和训练时表现一样好,最好的方法是实际运行中保留特征集,并记录到日志中以便训练中使用。
法则30: 抽样数据很重要,不要武断删去。
法则31:如果要从表格中组合数据,注意训练时和实际运行时表格可能发生改变。
法则32:尽量在训练流和实际运行流中使用重复代码。
法则33:使用比训练时还要新的数据来测试模型。
法则34:在过滤器的二元分类(比如检测垃圾邮件或定义感兴趣邮件)中,为了获得干净的数据牺牲一些短期性能表现。
法则35:明白排序问题存在固有偏差。
法则36:用位置特征来避免反馈环。
法则37:测量训练偏差。
机器学习阶段3:放慢速度、优化细化和复杂的模型
相关的信号肯定在提示,第二阶段已经接近尾声了。首先,你每月的收益开始减少。你开始权衡比较各种度量:在某些试验中,有些度量获得了提高,而另一些度量却在下降。而且,事情变得越来越引人注目。随着收益越来越难得,机器学习也变得更为复杂。
警告:相比之前两个章节,这个章节的法则大有纸上谈兵之嫌。很多团队十分顺利地走过了第一阶段和第二阶段,但是到了第三阶段,却不得不开创新的道路。
法则38: 如果目标有问题,就不要在新特征上浪费时间。
法则39:发布决策依赖多个标准。
法则40:保持模型集合(ensembles)的简单性。
法则41:当性能达到峰值时,寻找新的定量信息源加以补充而非改善现有信号。
法则42: 多样化、个性化或相关性可能与模型的流行与否,并不相关。
法则43:在不同的产品中,朋友可能相同,但兴趣却不尽然。
在AI100公众号后台回复关键词【机器学习法则】下载全文。
本文由 AI100 编译,转载需得到本公众号同意。
编译:AI100
原文链接:http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf