机器学习-4

本文来自于网易云课堂

在不同的划分上进行训练和测试

深度学习算法对训练数据的胃口很大,当你收集到足够多的数据集并构成训练集时算法效果最好。这导致很多团队用尽一切办法收集数据然后把他们堆到训练集里,让训练的数据量更大,即使有些数据都来自和开发集测试集不同的分布。所以在深度学习时代,越来越多的团队,都用来自和开发集和测试集分布不同的数据来训练。这里有一些微妙的地方,一些最佳做法,来处理训练集和测试集存在差异的情况。
假如你要开发一个识别猫的app,你的数据源有两个。一个是用户上传的图片,这些图片可能很业余,甚至很模糊。另一个是通过爬虫网络得到很多取景专业,高分辨率,拍摄专业的图片。前期你的用户量很少,可能用户的图片很少,不到1万张。而通过网络爬虫,也许你从互联网上下载了超过20万张猫图。你真正关心的算法表现是你的最终系统处理来自应用程序的这个图片分布时效果好不好。

现在你进入了两难的境地。一个是来自用户的小的数据集,它是一种分布,而另一个是大得多的数据集,来自另一个分布,图片的外观和你真正想要处理的并不一样。那么你该怎么做呢?

这里有一种选择,你可以将两种数据组合在一起,这样你就有了21万张图片,然后将这21万张图片随机分配到训练、开发和测试集中。这么做有一些好处,你的训练集、开发集和测试集都来自同一分布,这样更好管理。但坏处在于,而且坏处还不小,就是如果你观察开发集,看看这2500个样本,里面很多都是网页上的图片,并不是你真正关心的图片,你真正要处理的是来自手机的图片。根据分布,2500个样本中真正来自于用户的期望只有119。设立开发集的目标是瞄准你的目的,而采用这种方式很大程度都在优化网络图片,这并不是你想要的。所以,这一个选项不推荐考虑。
这里写图片描述
第二个选项还是205000张图片,5000张来自于。但是开发集和测试集都是2500张用户图片。这样将数据分成训练集、开发集和测试集的好处在于现在你瞄准的目标就是你想要处理的目标。缺点在于分布不一样。但事实证明这样划分在长期能给你带来更好的系统性能。

不同匹配数据划分的偏差和方差

分析方差和偏差会让你确定一个方向,但当数据分布不同时,分析偏差和方差的方式可能不一样。
这里写图片描述
同样以猫分类问题举例子,对于同一分布,训练集误差为1%而开发集误差为10%,那么你会说存在很大的方差问题。但是如果是不同分布,这个结论就不能轻易的下了。特别是,也许算法在开发集上做的不错,可能是因为训练集很容易识别,因为训练集都是高分辨率图片,但开发集难识别的多。所以也许模型并没有方差问题,这只不过反映了开发集包含更难准确分类的图片。所以这个分析的问题在于,当你看训练误差,再看开发误差,有两件事变了。首先算法只见过训练集数据,没见过开发集数据。第二,开发集数据来自不同的分布,而且因为你同时改变了两件事情,很难确认这增加的9%误差,有多少是因为算法没看到开发集中的数据导致的,这是问题方差的部分。以及有多少是因为开发集数据就是不一样导致的。为了弄清楚哪个因素影响更大,定义一组新的数据是有意义的,我们称之为训练-开发集,这是一个新的数据子集。这个数据集来自于训练集,与训练集同一分布,但是不参与到训练中。
这里写图片描述
从上图可以看到,第一种就是属于方差问题,第二种属于数据不匹配的问题。因为贝叶斯误差基本为0,所以第三种是存在偏差问题了。而第四个例子不仅有偏差还有方差问题。
这里写图片描述
你突然发现在开发集上和测试集上表现良好。如果你发现这种现象,这说明训练集数据其实比你的开发集和测试集难识别的多,才导致了误差 下降。
这里写图片描述
这里以后视镜语音识别的例子介绍一下更普适的分析。事实证明,我们可以将这些误差放到一张表中。水平轴上放入不同的数据集,
第一项可能是来自小型智能音箱的语音识别问题的数据。第二项是收集的和后视镜(rear view)有关的语音数据。

定位数据不匹配

如果你的训练集来自和开发测试集不同的分布,如果误差分析显示你有一个数据不匹配的问题,该怎么办?这个问题没有完全系统的解决方案,但我们可以尝试一些东西。
这里写图片描述

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页