吴恩达新书《Machine Learning Yearning》读后感,验证(测试)集怎么选?如何高效分析性能?降低可避免偏差和方差?实操经验总结

如果你要选验证集或测试集,就选那些你预料未来数据的样子(Choose dev and test sets to reflect data you expect to get in the future and want to do well on)— 吴恩达

前不久吴恩达新书“机器学习念想”(Machine Learning Yearning)手稿完工(不知道这样翻译会不会被打。。)David 9 忍不住拜读 ,把读后感总结如下,欢迎指正和交流:

纵观全书分三部分:

  1. 怎么构建验证集和测试集?
  2. 如何构建有效的性能和错误分析机制 ?如何优化模型?
  3. 端到端模型的一些讨论

事实上,上手深度学习(机器学习)项目最先要做的和模型本身关系不大,而是构思性能验证系统和错误分析的有效机制。

艺术品最华丽的可能是最后的润色,但其构思、规划以及推敲往往占据大师平时更多心力

列奥纳多·达·芬奇《岩间圣母》草图(左), 和最后完整润色后画作(右)

同样,构建一个高效的深度学习系统,首先要有一个好的验证体系、推敲整理过的数据集、高效的错误分析机制,这样最后的润色(模型优化)才能水到渠成。

1. 谈谈验证(测试)集怎么选?

书中建议是,如果你要选验证集或测试集,就选那些你预料未来数据的样子。因此训练集样本分布不需要和验证集(测试集)相同。用白话说就是以你预料“现场”的样本分布为准。

如果你在打造一个模型预测上海范围的车牌,那你的验证集就应该多选择“沪”牌(哪怕你的数据集有许多外地车牌)。

来自:http://www.91survey.com/news/8663.html

其次,验证集和测试集应该同分布,如果两者不同分布,集中注意在验证集上,而最后不知道测试集上的性能为什么差异巨大,给团队一个确定目标往往更重要(书中还建议把验证集分出一小部分重点关注集(eyeball dev set)指导模型优化)。另外70%训练集30%验证集对于非常大数据集不适用(一大锅好汤厨师尝一口就行无须喝掉1/3)。验证集的作用是探测出你对模型的改进。

另外模型是个强迭代的产品,为了提高效率可以找一个单一的度量指标去优化模型,哪怕准确率和召回率都要考虑,也可以求个平均值,以平均值(F1 score)为目标:

来自:Machine Learning Yearning

觉得验证集选错的时候也不要忘了更新验证集,不只是模型整个学习系统都要不断迭代

来自:Machine Learning Yearning

2. 如何构建有效的性能和错误分析机制 ?

如果你不是领域专家,不必一开始就精细地设计整个学习系统,可以从构建一个可用的“玩具”模型开始逐步优化(像达芬奇的素描)。构建一个重点关注集(eyeball dev set)指导模型优化,尽量使这个集合精简(这样你就可以随时人工查看分错的样本)

模型性能分析基本的两个概念是Bias和Variance(偏差和方差),偏差可以理解为训练集上的错误率e,方差是模型在验证集上的误差和刚才训练错误率e的差距(即训练错误率16%,验证错误率17%,那么方差就差了1%(我们知道模型在验证集表现总是比训练集差一点)。书中用大数据趋近的方式理解这两条学习曲线

来自:Machine Learning Yearning

当训练数据集变大时(横坐标),训练错误率变大(根据大数定理越来越接近真实分布错误率);验证集错误率越来越小逼近训练错误率(同样可以用大数来理解)。其中假设绿色的线是最优的错误率,最优错误率训练错误率的差就是不可避免的偏差(unavoidable bias)。验证集训练集的差就是前面提到的方差(variance)。

那么如何降低可避免偏差和方差呢?文中也给出一些参考

降低可避免的偏差

1. 增加模型复杂度,这可能会使方差增大,这时你可能需要增加正则约束

2. 做更仔细的特征工程,对输入特征人工优化

3. 去除已有的正则约束(有增大方差的风险)

4. 设计更好的模型结构(运气好可以同时降低偏差和方差 )

降低方差

1. 增加更多训练数据(有时验证集错误率和训练集差距大只是因为训练集太小了)

2. 增加正则约束(有升高偏差的风险)

3. 对输入特征做人工删减和优化

4. 降低模型复杂度(有升高偏差风险)

5. 设计更好的模型结构(运气好可以同时降低偏差和方差 )

最后,由于现今大训练集获得变得容易,书中讨论了端到端(end to end)模型。如果你有非常大量的两端数据集,端到端模型的优势很明显:

来自:Machine Learning Yearning

如一个自动驾驶的方向控制模型,如果是端到端模型无须一些繁琐的人工特征筛选,模型会自动找到摄像头图片和方向盘转动的关系。但是如果数据量不够,其中某个环节可能很快成为瓶颈,这时其实一些手工特征或者拆分端到端模型效果也许更好:

来自:Machine Learning Yearning

当把端到端模型拆分为多个模块时(识别汽车,识别行人,规划行车路线),也需要注意别让拆分的那些模型变成系统的瓶颈。拆分时尽量把单模型控制得简单。

 

参考文献:

  1. Machine Learning Yearning
  2. https://mp.weixin.qq.com/s/3C3BvaXHqNo9MMXy-06ovg

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注