深度学习为什么会出现validation accuracy大于train accuracy的现象?

在用一些深度模型(VGG,Resnet)进行图片分类任务(Cifar10, Imagenet)时,为什么在训练的前几个epoch会出现validati…
关注者
345
被浏览
140,974

19 个回答

这个很好理解啊,特别是在数据集很大的时候,loss下降很明显。train loss是平均一个epoch内的所有loss,比如第一个epoch的loss是2.3,2.2,2.1...0.7,0.6 平均train loss是1.5。 而val的时候是用已经训练了一个epoch的model进行测试的,假设拟合的很好验证集的loss平均是0.7左右。 那么肯定这个时候val的平均效果更好了

------------------------------更新-------------------------------

感谢 @宋肇哲 在另一个答案里的补充,data augmentation也会导致这样的现象。因为data augmentation的本质就是把训练集变得丰富,制造数据的多样性和学习的困难来让network更robust(比如旋转,随机crop,scale),但是val和test的时候一般是不对数据进行data augmentation的。(有时候会center crop,如果train的时候有crop的话)

也有可能是drop out的影响,drop out可以抽象的理解为随机屏蔽掉一些feature(神经元),只用一部分feature来识别,这样留下来的这些feature就更强了。等测试/val的时候全部神经元一起上,表现就更好了。不过drop out一般用于fc层中,现在比较少用了。也有dropout2D用在卷基层中,用的也不多。

顺便安利一个paper,直接把图像上的几块盖上,达到和dropout类似的效果。非常straightforward的想法,试了一下还不错

刚开始训练集的表现不如验证集是非常常见和正常的现象,最常见的原因就是最上面的。当然也不排除数据集本身存在问题,甚至有错误的数据。

补充一点。

其实ImageNet等大数据集训练的前期到中期一直有这样的现象,往往直到最后val才被train acc反超。

原因是对training set加了很多data augmentation技巧(rescale,随机crop等等),而test不加增强,比如直接crop中心。这样test分布显然更好。而最终test时如果使用10-crop等技巧,那么test acc就更高了。

@ICOZ 的回答是一方面原因,但是中期accuracy较为稳定时,就主要是data augmentation造成的。而CIFAR这种就直接overfit上去了,并且增强很简单,所以没有中期这个阶段。

可以参考Resnet/ResNeXt等论文里的训练曲线。