深度学习中,常将可得的数据集划分为训练集(training set),验证集(development set/validation set)和测试集(test set).下⽂主要回答以下⼏个问题:⼀是为什么要将数据集划分为如上三个集合,三个集合之间有什么区别;⼆是我们划分的原则是什么.1. 训练集、验证集和测试集的概念
训练集:顾名思义指的是⽤于训练的样本集合,主要⽤来训练神经⽹络中的参数.
验证集:从字⾯意思理解即为⽤于验证模型性能的样本集合.不同神经⽹络在训练集上训练结束后,通过验证集来⽐较判断各个模型的性能.这⾥的不同模型主要是指对应不同超参数的神经⽹络,也可以指完全不同结构的神经⽹络.测试集:对于训练完成的神经⽹络,测试集⽤于客观的评价神经⽹络的性能.
那么,训练集、验证集和测试集之间⼜有什么区别呢?⼀般⽽⾔,训练集与后两者之间较易分辨,验证集和测试集之间的概念较易混淆.个⼈是从下⾯的⾓度来理解的:
神经⽹络在⽹络结构确定的情况下,有两部分影响模型最终的性能,⼀是普通参数(⽐如权重w和偏置b),另⼀个是超参数(例如学习率,⽹络层数).普通参数我们在训练集上进⾏训练,超参数我们⼀般⼈⼯指定(⽐较不同超参数的模型在验证集上的性能).那为什么我们不像普通参数⼀样在训练集上训练超参数呢?(花书给出了解答)⼀是超参数⼀般难以优化(⽆法像普通参数⼀样通过梯度下降的⽅式进⾏优化).⼆是超参数很多时候不适合在训练集上进⾏训练,例如,如果在训练集上训练能控制模型容量的超参数,这些超参数总会被训练成使得模型容量最⼤的参数(因为模型容量越⼤,训练误差越⼩),所以训练集上训练超参数的结果就是模型绝对过拟合.
正因为超参数⽆法在训练集上进⾏训练,因此我们单独设⽴了⼀个验证集,⽤于选择(⼈⼯训练)最优的超参数.因为验证集是⽤于选择超参数的,因此验证集和训练集是独⽴不重叠的.
测试集是⽤于在完成神经⽹络训练过程后,为了客观评价模型在其未见过(未曾影响普通参数和超参数选择)的数据上的性能,因此测试与验证集和训练集之间也是独⽴不重叠的,⽽且测试集不能提出对参数或者超参数的修改意见,只能作为评价⽹络性能的⼀个指标.⾄此,我们可以将神经⽹络完整的训练过程归结为⼀下两个步骤:
1. 训练普通参数.在训练集(给定超参数)上利⽤学习算法,训练普通参数,使得模型在训练集上的误差降低到可接受的程度(⼀般接近⼈类的⽔平).2. '训练'超参数.在验证集上验证⽹络的generalization error(泛化能⼒),并根据模型性能对超参数进⾏调整.
重复1和2两个步骤,直⾄⽹络在验证集上取得较低的generalization error.此时完整的训练过程结束.在完成参数和超参数的训练后,在测试集上测试⽹络的性能.
2. 训练集、验证集和测试集的划分原则
本部分内容主要总结⾃Andrew Ng课程,课程中给出的原则是:
对于⼩规模样本集,常⽤的⾮配⽐例是trianing set/dev set/test set 6:2:2.例如共有10000个样本,则训练集分为6000个样本,验证集为2000样本,测试集为2000样本.
对于⼤规模样本集,则dev/test set的⽐例会减⼩很多,因为验证(⽐较)模型性能和测试模型性能⼀定的样本规模就⾜够了.例如共有1000000个样本,则训练集分为9980000个样本,验证集分为10000个样本,测试集分为10000个样本.
当我们不能获得⾜够的感兴趣的训练样本时,利⽤其他⼀些类似数据来训练⽹络时,该如何划分training, dev and test set?
例如我们在做⼀个识别猫的程序,我们的⽬标是识别⽤户拍照上传的猫的图⽚,但是我们能获得的APP上传的数据⼗分有限(例如10000张),所以准备通过利⽤⽹络爬⾍下载的猫的图⽚(200000张)来协助训练⽹络.⽽因为⽹络爬取的图⽚与⽤户上传的图⽚有较⼤区别,这时候应该如何划分training/dev/test set?
⼀种⽅案是将app与web图⽚进⾏混合,然后按照⼤数据划分原则进⾏划分,即205000张training set,2500张dev set,2500张测试集.另⼀种⽅案是,将app图⽚中2500张分给dyev set,2500张分给test set,5000张app图⽚和200000张web图⽚混合作为训练集.
Andrew Ng指出第⼆种⽅案更好,因为第⼆种⽅案dev set的数据全部来⾃app,与我们真正关⼼的数据具有相同的分布.⽽第⼀种⽅案,dev set中⼤概只有120张图⽚来⾃app,⽽剩下的⼤部分来⾃web,必然导致模型的评价准则偏移靶⼼.
当然,第⼆种⽅案会导致dev/test set与training set不同分布的问题,这会给误差分析带来⿇烦.Andrew Ng给出的解决⽅案是在training set中划分出⼀部分作为train-dev set,该部分不⽤于训练,作为评价模型generalization error,⽽train-dev set与dev set之间的误差作为data mismatcherror,表⽰数据分布不同引起的误差.
因篇幅问题不能全部显示,请点此查看更多更全内容