1. 数据集定义
- 训练集: 训练集用来训练你的模型,来确定模型的参数而非超参数,这些参数往往称为学习参数, 如权重参数W, 偏置参数b。
- 验证集:交叉验证集用于验证模型的performance,从而对模型进行超参数调整以及确定最终模型,这些超参数包括:学习率,网络结构等 。有时也称为交叉验证集。
- 测试集:测试集用于对算法进行评估,不会改变学习算法和参数。
2. 数据集划分
划分原则
- 验证集的规模应该尽可能大,至少能够区分出你所尝试的不同算法之间的性能差异。一般来说,验证集的规模应该在 1000 - 10000 之间。
- 测试集的规模应该大到使你能够对模型的性能进行一个高度可信的评估即可。当数据规模一般时(100-10000)时,采用数据的10%-30%来作为测试集;在数据规模很大时(10w级别),采用1%作为1%甚至更小。总的来说,只要能够很好的评估模型性能即可。
- 验证集与测试集的规模并不是越大越好,但如果数据丰富,可以适当选择较大的验证集与测试集。
划分建议
- 在样本量有限的情况下,有时候会把验证集和测试集合并。实际中,若划分为三类,那么训练集:验证集:测试集=6:2:2;若是两类,则训练集:验证集=7:3。
- 在海量样本的情况下,这种情况在目前深度学习中会比较常见。此时由于数据量巨大,我们不需要将过多的数据用于验证和测试集。例如拥有1百万样本时,我们按训练集:验证集:测试集=98:1:1的比例划分,1%的验证和1%的测试集都已经拥有了1万个样本,这已足够验证模型性能了。
数据时分布
训练集的分布不需要与实际数据分布一致,而应该更多的考虑如何均衡样本分布。
验证集与测试集应该服从同一分布,且该分布能够很好的反应实际数据的分布。二者分布相同有助于定位问题:
如果模型在验证集上表现良好,却在测试集上表现不佳,那么问题可以定位为:算法在验证集上过拟合了
如果二者分布不同时,发生此情况,问题就有很多了如:
- 算法在验证集上过拟合了。
- 测试集比验证集更难进行预测,尽管算法做得足够好了,却很难有进一步的提升空间。
- 测试集不一定更难预测,但它与开发集性质并不相同(分布不同)。
训练集分布于验证集,测试集分布没必要一致。训练集更多的考虑模型的performance,而测试集与验证集是与真实数据相关的,更多考虑的是泛化能力。
3. 数据不匹配问题
1 如何定位数据不匹配?
数据不匹配问题是个不容易定位和解决的问题。这个问题出现总会和模型过拟合表现很相似,即在训练集上能体现非常不错的性能,但在测试集上表现总是差强人意但区别在于如果遇到是数据不匹配的问题,通常在用一批和训
练集有看相同或者相似分布的数据上仍然能取得不错的结果。但很多时候,当测试集上结果表现很差时,很多初学
者可能会直接将问题定位在模型过拟合上,最后对模型尝试各种方法后,性能却始终不能得到有效提升。当遇到这
种情况时,建议先定位出是否存在数据不匹配的问题。最简单的验证方式就是可以从训练集中挑选出一部分数据作
为验证集,重新划分后训练和验证模型表现。
2 举例常见几个数据不匹配的场景?
例如设计款识别物体的app时,实际场景的图片均来自于手机拍摄,而训练集确是来自于网上各类抓取下来的图
片。例如在图像去噪、去模糊、去雾、超分辨率等图像处理场景时,由于大量数据的难以获取,因此都会采用人为
假设合成的图像进行训练,这时候应用到实际场景中也容易出现不匹配的问题
3 如何解决数据不匹配问题?
数据不匹配是个很难有固定方法来解决的问题。这里提供几条供参考的途径:
1、收集更多符合实际场最需要的数据。这似乎是最简单但也最难方式
2、对结果做错误分析。找出数据集中出错的数据和正确数据之间的特点和区别,这对你无论是进行后续模型的分析或者是数据的处理提供非常有效的思路。注意,这里的数据集包括训练集和测试集
3、数据集增强。数据集增强并不意味看数据集越大越好,其目的是丰富数据的分布以适应更多的变化当遇到数
据不匹配时,对数据处理般可以有两种方式。其一,合成或处理更多接近需要的数据特点。其二,对所有数据包
括实际场景数据都进行处理,将所有数据都统一到另一个分布上,统一出一种新的特点。
4 如何提高深度学习系统的性能
当我们要试图提高深度学习系统的性能时,目前我们大致可以从三方面考虑:
1、提高模型的结构,比如增加神经网络的层数,或者将简单的神经元单位换成复杂的 LSTM 神经元,比如在自然语言处理领域内,利用 LSTM 模型挖掘语法分析的优势。
2、改进模型的初始化方式,保证早期梯度具有某些有益的性质,或者具备大量的稀疏性,或者利用线性代数原理的优势。
3、选择更强大的学习算法,比如对度梯度更新的方式,也可以是采用除以先前梯度 L2 范数来更新所有参数,甚至还可以选用计算代价较大的二阶算法。
QA
1. 数据为何要 shuffle ?
shuffle 的意思是洗牌或弄乱,即打乱数据集中样本的排列顺序。这样带来一个直接的好处就是样本的分布变得均匀了。
在优化中有一个原则是:网络从意料之外的样本中学习最快,所以说,如果为了加速学习,我们要求每次喂入的数据和前一份数据相关性较低。
总的来说,shuffle的意义在于加速模型学习。