项目ing,在利用卷积神经网络压缩1080p图像时,使用DIV2K数据集,遇到验证集损失低于训练集损失的情况,故记录如下。

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

​ 在训练深度神经网络时,经常使用正则化来帮助我们的模型:

  1. 获得更高多大验证/测试精度;
  2. 理想情况下,为了更好地泛化验证和测试集之外的数据。

​ 正则化方法通常会牺牲训练准确性来提高验证/测试准确性,在某些情况下,可能会导致验证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数量。
  • 增加模型容量(即,使其更深)。

​ 还应该尝试以更高的学习率进行训练,因为您可能对此过于保守。