机器学习-2

本文来自于网易云课堂

这一部分和之前的内容有相当多的重合!之前的文章已经介绍过这一部分内容了深度学习的实用层面

设立训练集、验证集和测试集

设立训练集,验证集和测试集的方式大大影响了你或者你的团队建立机器学习应用方面取得进展的进度。不同的团队即使是大公司的团队,错误的设立这些集合的方式会让团队的进度变慢。那么我们该如何设立这些数据集来让你的团队效率最大化呢?
dev集,也就是开发集(development set),有时也叫做交叉验证集(cross validation set)。机器学习的工作流程是,你尝试很多思路,用训练集训练很多不同的模型,然后使用开发集来评估不同的思路,然后选择一个,然后不断迭代去改善开发集的性能。直到最后你得到一个令人满意的成本,然后你在用测试集去评估。
机器学习-2
假设你在训练一个猫分类器,你使用了前4个国家和地区的数据作为验证集,使用了后面几个的数据作为测试集。然后,你设定了一个指标。那么这个dev set和这个指标就相当于图中的靶心,意思就是让团队不断朝着靶心努力。一旦建立了这样的目标,整个团队就会不断的快速迭代,尝试不同的想法,做实验,可以很快的开发出不同的模型并选出最好的那个。机器学习团队一般都很擅长使用不同的方法去逼近目标。但是,dev set和test set的设置是有问题的,那么可能经过几个月的不断的尝试迭代之后,团队“惊喜”的发现,花了那么多月的时间针对开发集做优化,在测试集上的表现却不佳。

针对这样的情况,Andrew Ng 建议你将所有数据洗牌,放入开发集和测试集,所有的开发集和测试集都含有8个国家的数据并符合同一分布。
这里给出了一个方针:
choose a dev set and test set (same distribution) to reflect data you expected to get in the future and consider important to do well

数据集的规模

那么验证集和测试集的规模需要多大呢?可以见这篇文章
深度学习的实用层面

测试集的目的是完成了系统开发后,测试集可以帮你评估投产系统的性能,方针(guideline)就是令测试集足够大,能够以高置信度评估整体性能和不同的想法。

之前讲了设置开发集和评估指标,如同设定一个靶子,让团队去瞄准,但有时候可能这个项目在进行的过程中,你意识到目标的位置放错了,这种情况下,你应该移动你的目标。

什么时候改变指标

为什么是人的表现?

在过去的几年里,更多的机器学习团队一直在讨论,如何比较机器学习系统和人类的表现。为什么会这样呢?Andrew Ng认为主要有2个原因,首先因为深度学习的进步,机器学习算法突然变得更好了,在许多领域机器学习算法以及威胁到人类的表现了。其次,事实证明,当你试图让机器做人类能做的事情时,可以精心设计机器学习的流程让你的工作流程效率更高。所以,在这些场合,比较人类和机器是很自然的。
机器学习-2
随着时间的增长,机器学习的性能无法超过某个理论上限,就是所谓的贝叶斯最优误差,也就是说没有任何办法设计出1个x->y的函数让它能够超过一定的准确度。比如对于猫分类,给一个非常模糊的图片,无论是人还是机器都无法识别出里面是否有猫,也就是准确率无法达到100%。而贝叶斯误差就是从x到y映射的理论最优函数。对于人类擅长的东西,包括看图识别实物,听写音频,或者阅读语言,人类一般很擅长处理这些自然数据,只要机器学习比人类差,你就可以从让人帮你标记例子(花钱),这样有更多的数据可以喂给学习算法或者分析误差和偏差方差,然后提高机器学习算法的性能。

可避免偏差

之前讨论过,你希望你的学习算法能在训练集上表现良好,但有时你实际上并不想做的 太好。你得知道人类水平的表现是怎样的,可以确切告诉你算法在训练集上的表现。
机器学习-2
还是以猫分类为例,假如说人的误差为1%,而训练误差和开发误差分别打到8%、10%,那么我们可能会集中精力去减少偏差。而如果说人的误差差不多,这时我们可能会集中精力去减少方差。这里我们称贝叶斯误差(这里我们可以认为人类表现近似就是贝叶斯误差)和训练集误差的差值称为可避免误差。它表明了你可以一直接近但实际上你做不到比贝叶斯误差更好,除非过拟合。训练集和验证集的差大概说明你的算法在方差问题上还有多少改善空间。在这个例子中,当你理解人类水平误差,理解你对贝叶斯误差的估计,你就可以在不同的场景中专注于不同的策略如使用避免偏差 策略还是避免方差策略。

理解人的表现

人类水平误差用来估计贝叶斯误差(human-level error as a proxy for Bayes error)
机器学习-2
这个时候我们应该如何界定人类水平误差?是3%,1%,0.7%还是0.5%?思考人类误差最有用的方式之一是把它作为贝叶斯误差的替代或估计,从这个例子来看,经过团队讨论,误差可以达到0.5%,那么根据定义贝叶斯误差必须在0.5%以下,那么在这个背景下我就可以用0.5%估计贝叶斯误差,所以将人类水平定义为0.5%。但是如果是为了发表论文或者是部署系统,可能只需要超过一个医生的水平就达到应用的地步了。
具体的应用是和你的目标相关的。而在具体分析的时候更大程度上是看可避免偏差和方差,哪个更大我们实际上更关注哪个。

改善你的模型表现

如何提高算法表现的指导方针:
假如说你已经完成了这么两件事
1. 首先你的算法对训练集拟合的很好。这意味着你你能做到可避免偏差很低。
2. 在训练集上表现很好,推广到开发集和测试集上表现也很好。这就是说方差不是太大。

机器学习-2