验证集loss低于训练集loss原因分析

我在模型训练的过程中出现了验证集loss低于训练集loss的情况,通过搜集资料,总结归纳如下原因:

原因1:在训练中应用正则化,但在验证/测试中未应用正则化

如果在验证/测试期间添加正则化损失,则损失值和曲线将看起来更加相似。

原因2:训练loss是在每个epoch测量的,而验证loss是在每个epoch后测量的

平均而言,训练损失的测量时间是前一个时期的1/2。如果将训练损失曲线向左移动半个epoch,则损失会更好。

原因3:验证集可能比训练集更容易(否则可能会泄漏(leaks))

验证loss低于训练loss的最终最常见原因是由于数据本身分布的问题。

考虑如何获取验证集:

您可 以保证验证集是从与训练集相同的分布中采样的吗?
您确定验证示例与您的训练图像一样具有挑战性吗?
您是否可以确保没有“数据泄漏”(即训练样本与验证/测试样本意外混入)?
您是否确信自己的代码正确创建了训练集,验证集和测试集?

原因4:没有足够努力地训练

在训练深度神经网络时,我们最大的担心几乎总是过拟合——为了避免过拟合,我们引入了正则化技术(在上面的原因1中进行了讨论)。我们用以下形式应用正则化:

Dropout
L2权重衰减
减少模型容量(即更浅的模型)
我们的学习率也趋于保守一些,以确保我们的模型不会在亏损形势下超越亏损较低的领域。

一切都很好,但是有时候我们最终会过度规范我们的模型 (over-regularizing our models)。

如果您经历了验证loss低于上述详细说明的训练loss的所有三个原因,则可能是您的模型over-regularized了。通过以下方法开始放宽正则化约束:

降低L2权重衰减强度。
减少申请的dropout数量。
增加模型容量(即,使其更深)。
您还应该尝试以更高的学习率进行训练,因为您可能对此过于保守。

下面是一张我模型训练过程中的loss表现图,绿色表示test_loss ,蓝色表示train_loss,通过分析上面4个原因,我主要存在的问题是2和4,但是2不是最主要的原因,即使testloss向左平移一点,也改变不了这么大的差距。
训练loss表现

我的上一步实验 learning_rate: 0.0005,weight_decay: 0.02
本次实验 learning_rate: 0.000125,weight_decay: 0.02
导致了上面截图中的情况,验证集loss小于训练集的loss,因此可以定位到原因是我的learning_rate太小。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值