之前看李沐老师的《动手学深度学习》的时候,有讲到过验证数据集和测试数据集的区别,但是某一次给导师汇报工作的时候,居然还是记得不是很清楚,然后理直气壮的说反了,所以还是来整理一下这个概念
我觉得维基百科上,Training, validation, and test data sets词条中这段描述是直接描述出了在深度学习中三个数据集所代表的作用:
例如,在寻找最适合问题的分类器时,首先使用训练数据集(Training data set)来训练不同的候选分类器,然后利用验证数据集(Validation data set)来比较它们的性能,并决定选用哪一个分类器。最后,使用测试数据集(Test data set)来获取诸如准确率、灵敏度、特异度、F1值等性能指标。
所以对于这三个数据集的使用过程是先用训练数据集和验证数据集,最后的最后再用测试数据集获得模型的具体指标,测试数据集只在最后使用一次。
具体来讲创建验证数据集的原因是(沐神书里讲的还是蛮清晰的):
原则上,在我们确定所有的超参数之前,我们不希望用到测试集。 如果我们在模型选择过程中使用测试数据,可能会有过拟合测试数据的风险,如果我们过拟合了训练数据,还可以在测试数据上的评估来判断过拟合。 但是如果我们过拟合了测试数据,就很麻烦,而且也没有办法可以知道。
因此,我们决不能依靠测试数据进行模型选择。 然而,我们也不能仅仅依靠训练数据来选择模型,因为我们无法估计训练数据的泛化误差。
解决此问题的常见做法是将我们的数据分成三份, 除了训练和测试数据集之外,还增加一个验证数据集(validation dataset), 也叫验证集(validation set)。
然而也是说到:
但现实是验证数据和测试数据之间的边界模糊得令人担忧。 除非另有明确说明,否则在这本书的实验中, 我们实际上是在使用应该被正确地称为训练数据和验证数据的数据集, 并没有真正的测试数据集。 因此,书中每次实验报告的准确度都是验证集准确度,而不是测试集准确度。
沐神的PPT: