为什么要设置训练集、验证集和测试集
在训练一个神经网路的时候,通常我们最初并不知道怎么样的超参数配置才能让我得到一个高性能的网络,这些超参数包括神经网络的层数,每一层的神经元数量,每层的激活函数选择以及学习率等。所以一般的做法都是先构建一个具有特定结构的神经网络,然后编程实现,接下来根据程序的输出结果来更新自己方案以找到更好的神经网络。
也就是重复下面这样一个过程

因此更高效的循环能够让我们更快的得到一个满足要求的神经网络,而合理的训练集,验证集和测试集的配置则能帮助提高上图这个循环的效率。
三者的解释和区别
- 训练集(training set) :训练集顾名思义就是用来拟合数据得到一个初步模型的数据部分。
- 验证集(development set) :验证集是在训练过程中单独划分的少部分样本,目的是对模型进行初步评估,调整相应的超参数。
- 测试集(test set) :测试集用来评价所得到模型的泛化能力,为了达到这个目的,测试集的数据要保证从未在训练集和验证集中出现过。
具体的划分方式
在机器学习的小数据量时代(数据量在万这个数量级),常见的做法是将数据三七分,即70%训练集,30%测试集(没有训练集的情况比较常见);还有60%训练集,20%验证集,20%测试集的方式。
但是在大数据的情况下,假设我们有百万数量级的数据,这时候20%的比例就太高了。常见的比例有98%:1%:1%,或者更低的验证集和测试集的比例都是可行的。