1.为什么需要验证集

在机器学习中,训练模型时需要调节模型的参数来提高模型的性能,比如网络层数,网络节点数,迭代次数,学习率,权重,这些调节都需要在训练的模型上通过验证集输出一个调整信号,来通知我们需要去修改参数。这就是验证集的作用,但随着验证集输出调整信号越多,模型也就对验证集学习的更清楚,最后可能导致模型学习的过细,数据拟合度过高,在验证集上呈现过拟合。这就需要一个未知数据集(测试集)来评估模型的好坏。

验证集的关键在于选择超参数,我们手动调参是为了让模型在验证集上的表现越来越好,如果把测试集作为验证集,调参去拟合测试集,那么准确度一定是100%,就如你考试作弊一样。因此测试集既不参与参数的学习过程,也不参与参数的选择过程,仅仅用于模型评价。

2.验证集与测试集的区别

请添加图片描述

3.如何使用验证集

验证集可以看做参与了 “人工调参” 的训练过程。一般训练几个 epoch 就运行一次验证集看看效果(大部分网络自带这个功能)。
这样做的目的是:
(1)可以及时发现模型或者参数的问题,比如模型在验证集上发散、出现非正常的结果、mAP评价指标不增长或者增长很慢等情况,这时可以及时终止训练,重新调参或者调整模型,而不需要等到训练结束。
(2)验证模型的泛化能力,如果在验证集上的效果比训练集上差很多,就该考虑模型是否过拟合了。同时,还可以通过验证集对比不同的模型。

4.为什么验证集和测试集都需要?

因为验证数据集(Validation Set)用来调整模型参数从而选择最优模型,模型本身已经同时知道了输入和输出,所以从验证数据集上得出的误差(Error)会有偏差(Bias)。

但是我们只用测试数据集(Test Set) 去评估模型的表现,并不会去调整优化模型。

在传统的机器学习中,这三者一般的比例为training/validation/test = 50/25/25, 但是有些时候如果模型不需要很多调整只要拟合就可时,或者training本身就是training+validation (比如cross validation)时,也可以training/test =7/3.

但是在深度学习中,由于数据量本身很大,而且训练神经网络需要的数据很多,可以把更多的数据分给training,而相应减少validation和test。

参考链接

1.【机器学习】验证集和测试集有什么区别
2.深度学习: 验证集 & 测试集 区别
3.机器学习中为啥要有验证集?只要训练集和测试集不就可以了吗?

更多推荐