验证损失低于训练损失的总结
项目ing,在利用卷积神经网络压缩1080p图像时,使用DIV2K数据集,遇到验证集损失低于训练集损失的情况,故记录如下。
原因1:在训练中应用正则化,但在验证/测试中未应用正则化
在训练深度神经网络时,经常使用正则化来帮助我们的模型:
- 获得更高多大验证/测试精度;
- 理想情况下,为了更好地泛化验证和测试集之外的数据。
正则化方法通常会牺牲训练准确性来提高验证/测试准确性,在某些情况下,可能会导致验证loss低于训练loss。
其次,在验证/测试时不应该使用诸如dropout之类的正则化方法。
原因2:训练loss是在每个epoch中测量的,而验证loss是在每个epoch后测量的
在整个epoch中,训练loss将不断的输出,但是仅在当前epoch完成后,才根据验证集计算验证指标。
这意味着,平均而言,训练loss要提前半个epoch来衡量。
原因3:验证集可能比训练集更容易
验证loss低于训练loss的最终最常见原因是由于数据本身分布的问题。
考虑如何获取验证集:
- 可以保证验证集是从与训练集相同的分布中采样的吗?
- 确定验证示例与训练图像一样具有挑战性吗?
- 是否可以确保没有“数据泄漏”(即训练样本与验证/测试样本意外混入)?
- 是否确信代码正确创建了训练集,验证集和测试集?
在训练深度神经网络时,我们最大的担心几乎总是过拟合——为了避免过拟合,我们引入了正则化技术。我们用以下形式应用正则化:
- Dropout
- L2权重衰减
- 减少模型容量(即更浅的模型)
我们的学习率也趋于保守一些,以确保模型不会在亏损形势下超越亏损较低的领域。一切都很好,但是有时候我们最终会过度规范我们的模型 (over-regularizing our models)。如果经历了验证loss低于上述详细说明的训练loss的所有三个原因,则可能是模型over-regularized了。通过以下方法开始放宽正则化约束:
- 降低L2权重衰减强度。
- 减少申请的dropout数量。
- 增加模型容量(即,使其更深)。
还应该尝试以更高的学习率进行训练,因为您可能对此过于保守。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JrunDing!
评论