第七部分 不同的分布的训练集和测试集
陈曦,朱小栋
第三十六章 什么时候你会用不同分布的数据做训练集和测试集
假设:(你要做一个猫图像的甄别app软件)你有200,000张来自网上的图片,而用户通过app上传了10,000张图像。两者的分布是不同的,如果你用的是非常需要数据的深度学习算法去做训练,那么你改使用这200,000张来自网上的图片。
那么你是否该把这两组图片数据打乱然后在分为训练集/验证集/测试集?
- 不是,当你设定验证集和测试集的时候,你应该选择那些能够可以很好能够反映未来的数据的数据。
这里的处理方法:是将10,000张图像平分为2份,其中一份(5,000张图片)做为验证集/测试集的数据。另外5,000张加上网上的200,000张做为训练集数据。即使这样使训练集和验证集/测试集的数据分布不一样,但在训练过程中神经网络仍然能学到很多信息。
第三十七章 什么时候决定是否使用你的全部数据
当你的神经网络隐藏层的数目很多的时候,加入20,000张网上找来的图像数据在你的训练集是没问题的。
这些图像的作用有哪些呢?
- 这些图片可以告诉你的神经网络,猫是什么样子的或者猫不是什么样子的。并且将从网上图片中学到的应用到手机app的图像中。
- 另一方面,神经网络可能会利用其表征能力(representational capacity)学网上图像的一些特征(例如,更高的分辨率或者是图像的布局等等),这可能会不利于你的算法的表现。(假如你的神经网络足够“深”那么你不需要担心这个问题,但假如你的神经网络不够大,你需要考虑你的训练集数据与验证/测试集匹配的问题)
另外,假如你的验证/测试集的图像中偶然包含了一些关于人、地点、地标和动物的信息,但你有一大堆扫描的历史文件,那么这些图像数据并没有任何的帮助不需要使用。
第三十八章 如何决定是否使用不一致的数据(inconsistent data)
举一个反例:假如你要预测纽约城的房价,那么你不该用密歇根的房价。
(与我们上面的例子不同,除了计算成本以外,使用网上的图片做训练好处多多)
第三十九章 给数据加权
通常我们的学习算法需要优化(最小化)如下公式:

那么当我们加入的数据(网上图片)和我们的验证/测试集数据分布很不一样,或者这些加入的数据要比来自同分布的验证/测试集(手机app用户上传图片)要大得多。那么我们可以最优化如下公式进行相应的调整:

这里的权重可以定为1/40(这里是200,00比5,000),但你也可以设置为其他的值。
第四十章 从训练集中泛化出训练测试集
总结一下,有三种出错的可能性:
- 高偏差(在训练集上表现不佳)
- 高方差(在训练集上表现好,而在与训练集分布一样的数据上训练表现不佳)
- 数据不匹配data mismatch(在训练集上表现好1% error,并且在与训练集分布一样的数据中表现也好1.5% error,但是在验证/测试集中表现不好10% error)
因此为了分辨这三种错误情况,我们需要再加入训练验证集training dev set(与训练集分布一样的数据)。
第四十一章 识别偏差,方差和数据不匹配
由下表很清晰的展现出三种错误情况,因而根据这些错误类型去对症下药:

第四十二章 解决数据不匹配问题
两个方法解决问题:
- 弄清楚你的训练集和验证集分布上属性的不同
- 找更多与你的验证集相似的训练集数据
举个例子:你做的一个语音识别的app中,训练集数据大部分的背景声音很干净,而测试集的录音都是在车里面录的。这时候出现了数据不匹配的问题,如果你的训练集和训练验证集中都包含一些在车里录的音频,这时我们可以做一个双重检验(double-check)。如果在训练集中这些在车中的录音表现不错,但在训练验证集中车中录音表现得并不好那么进一步验证我们需要更多的车里的录音数据(做为训练集数据)??
如果你没办法得到更多的车中的录音数据,那么你可能就没办法去改善算法的表现了。
第四十三章 人工合成数据
接着上例,我们需要人工合成更多的在车中录的音频。比如,将安静背景下的声音加到吵闹的车的噪声中去。
再例如,我们之前的图像识别猫的例子来说,验证集中的图像会有一些模糊的情况(因为手机拍照可能手抖了一下,哈哈哈)。那么我们可以故意将训练集中的网上图像数据模拟运动,让它们也变模糊。
当然,也要注意这个方法的弊端(对电脑来说,这些人工合成数据更敏感),举以下几个例子加以说明:
- 假如你的训练集数据是1,000小时的录音,但只有其中一个小时有车的噪声。你把这一小时的声音数据加到这一千小时的录音中,那么你的学习算法就会“过拟合”这一小时的车的噪声。那么对于其他的车的噪声(即使人听起来差不多),但还是没办法很好的识别出来(这也是车的噪声)。
- 进一步说,如果你有1,000个不同小时的车的噪声,但只是从10辆不同的车中发出的。那么这样容易“过拟合”这十辆车的噪声。
- 另一个例子,如果你做一个识别的的系统,但你用的是20辆特定车的人工合成图片,那么当你的验证/测试集中包含了其他的车的设计时,将无法识别。因为你的系统会过拟合这20辆车。
因此,你需要人工制造一个具有代表性的样本数据,而不是像上面这些反例一样。因此如何把握好细节,使人工合成数据更加像真实分布的数据。这并不容易,但一旦把握好这些细节,你可以一下子获得比以前要大得多的训练集数据。