简单理解训练集、测试集、验证集

测试集

测试集(test set) 的作用是衡量 最终 模型的性能。

也就是说,如果需要对比两个模型的性能,必须在同样的测试集上进行对比。就好比两个学生参加高考,A使用I卷考了580分,B使用II卷考了85分,这并不能保证A的成绩就比B好。

目前,许多公开数据集均已经划分好了训练集、验证集、测试集,这就方便我们可以对比不同模型在同一测试集下的性能,如MS COCO:
在这里插入图片描述
注意,不能通过测试集的结果来进行网络参数的调节,因为这相当于“泄题作弊”。

验证集

验证集(validation set)的作用是帮助调整中间模型

这就好比高三的多次模拟考试,不同的状态下考出来的成绩都有所不同;而我们都希望带着最好的状态去迎接高考,也就是通过验证集来找到最好的状态,从而以希望获得最好的成绩(测试集下的泛化误差)。

例如,在训练的过程中有个超参数叫训练轮数(epoch)。有的时候,训练100个epoch的效果可能还没有10个epoch好(比如出现了过拟合),这个时候通过观察验证集上的性能便可以帮助我们进行决策,提前中止训练(early stopping),从而获取一个性能相对最好的模型。这也算是一种机器学习中的正则化(Regularization)方式。

经常要注意的一点是验证集并不是必须的,这只是帮助我们调参,寻找最优参数的一个手段。也许我们拿到一个模型,把手头上所有的数据都拿去训练至收敛,同样可能获得优秀的性能。怎么将已有的各种数据划分成训练集和验证集同样考虑设计者的技巧(有的公开数据集只提供训练集和测试集的划分,如果需要构建验证集还需要自己手动划分,如Yelp)。
在这里插入图片描述

训练集

顾名思义,训练集(training set) 的作用就是帮助网络学习其各层的可学习参数。
这就好比无论是准备模拟考试还是高考,我们在平时都需要寻找习题进行练习,这就涉及到了如下一些问题:

  • 高质量的训练集对模型的性能十分重要。 例如,如果平时做题第一题的答案都是选A,那么在实际考试中遇到第一题也会不管内容直接选A,而这大多数情况下是不科学的。从这个角度也可以发现训练时的误差并不是越低越好(因为许多时候数据集多多少少会有些问题)。
    一个经典的例子是俄罗斯坦克问题。美国军方曾训练一个模型来区分自己的坦克与俄军坦克,在实验环境中效果很好而在真实场景下失效。原因是在训练集中,美军的坦克大多是清晰的,而俄军的坦克大多是模糊的,这就导致模型学习到的其实更多是照片的清晰度信息而不是坦克的形状等信息。
  • 训练集、验证集、测试集绝大多数情况下不应该交叉。 如果出现的交叉,那么此时验证集和测试集往往便失去了意义。
    验证集、测试集从某种角度讲都是用来衡量模型性能的,也就是"考卷"。而如果其中出现了训练集内容,就相当于考试"泄题",在这样的试卷下当然能考出更好的成绩,然而这就失去了考试的意义,不能用来客观的评价一个模型的好坏。也许在新的生产环境下,测试集变化,模型的性能就可能急剧下降。
    这也解释了之前为什么说验证集下表现最好的模型不一定在实际测试集上最优秀,因为验证集与测试集也是不相关的。如果同样优秀,那么的确有一种可能是因为验证集与测试集具有关联性(例如模拟卷压中了高考考点)。
  • 不同模型的对比应该基于同一训练集进行训练。 一个直观的原因便是之前讲的训练集会直接决定模型的性能。对于深度学习而言,如果训练数据丰富,便能有效地避免过拟合(Overfitting)的发生。在新的数据集下,哪怕你的性能比现有模型的结果更优,然而实际上现有模型使用新数据集完全可能取得更加出色的性能。一个复读两年的学生比应届生的成绩高10分,并不能表明复读生的学习能力要明显强于另一名应届生。
一些想法

有的时候,我们拿到的数据就只分好了训练集和测试集(或者压根没分),这种情况下我们其实很容易进行一个很直觉的行为:
将数据分成两部分,用一部分数据进行训练,然后另一部分观察效果,再反复调整参数和网络结构,最后拿到一个loss比较小的模型。
这本质上是将测试集用作验证集。这个时候实际上用来客观衡量模型性能的测试集已经没有了,因此可能就会导致在实验环境下结果很好,但生产环境就不行。

Q: 两份完全一样的数据,一份作为模型A的验证集,一份作为模型B的测试集。模型A在验证集下的loss比B在测试集下的loss低,能否说明A的性能比B好?
A: 不能,因为验证集会被用来帮助进行超参数的修改,从而试图使得性能更优,而验证集只是一次性的最终结果。

参考

https://sspai.com/post/55478
https://zhuanlan.zhihu.com/p/48976706
https://blog.csdn.net/kieven2008/article/details/81582591

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值