深度学习模型训练中有用的可视化图

模型训练过程如何通过图判断有无问题。】

判断模型过拟合和欠拟合

loss 曲线

首先训练集每个 epoch 的 loss 是已知的(epoch 损失 = 该epoch 所有mini-batch的损失之和 / 迭代次数),因此很多时候 loss 曲线只有训练集的结果。

但是这是不完整的,最好是在每个 epoch 跑完后对验证集推理一遍,得到验证集的损失,然后在一张图中同时画出训练集和验证集的 loss 曲线,如下图(这里写的 test ,正常应该是 validation;而且这里是准确性,不是 loss ,差不多意思,简单看看)。

要是对验证集推理一遍时间很长,也可以改成每5个或10个 epoch 统计一次。

通过同时绘制训练集和验证集结果,我们可以判断过拟合和欠拟合:

  • 过拟合:Train Loss 持续下降,但 Val Loss 在某个拐点后开始上升。说明模型死记硬背了训练集,导致测试集泛化差。此时需要增加数据增强或 Dropout。
  • 欠拟合:Train Loss 和 Val Loss 都居高不下且下降极为缓慢。
  • 理想状态:两者都平稳下降,最终趋于水平并靠得很近。

一般来说,我们主要是判断过拟合。简单地说,你就可以看训练集和验证集两条曲线之间的距离来判断过拟合。

  • 同一张图:看两条曲线之间的距离之间的变化,如果存在下面的情况,说明过拟合。
    • 二者差距非常大
    • 开始距离小,后期距离越来越大
    • 验证集Loss开始由降反升
  • 不同的图:就像这里使用了不同的方法,就看距离大小,越小的说明过拟合程度越小,如上图。
  • 最理想的状态:两条曲线基本重合,并且都在稳步下降

评价指标曲线

同上,只是从 loss 改为了评价指标,比如准确性。

这里就得在这个 epoch 训练完后,单独再对全部训练数据推理一遍计算评价指标。

这里对训练集算一下评价指标可能很耗时,拖慢训练速度,这个也可以不做,只看验证集的评价指标曲线,只要验证集的评价指标在上升就说明模型在进行学习。

按照图中的例子,左图训练集很快达到 100% 准确性,而验证集后期几乎不动,说明存在过拟合;通过使用 Dropout ,右图显示训练数据和测试数据的识别精度的差距变小了。并且,训练数据 也没有到达100%的识别精度,说明抑制了过拟合。

为什么最好同时看 loss 和评价指标?

  1. Loss 和指标可能“打架”:交叉熵损失(CrossEntropy)对背景非常敏感。如果你的 CT 图中背景占 90%,即使模型把肿瘤全预测成背景,只要背景预测对了,总 Loss 依然可能下降。反过来说,指标平滑性差,对微小变化不敏感。在训练初期,当预测几乎全错时,评价指标可能长期为 0,这会导致梯度消失(因为 Dice Loss 在极端值处梯度很小),但如果你只看指标,会误以为模型“没动”,但其实 Loss 正在努力调整。

    说人话,就是训练初期可能存在 Loss 下降但是评级指标没动的情况,此时看 Loss 更好。

  2. Loss 的可解释性差:Loss 的绝对值(比如 0.5)没有直观的临床意义,你不知道它对应多好的分割效果。

  3. 评价指标无法指导超参数调整:如果只看评价指标,你不知道是学习率太大导致震荡,还是学习率太小导致收敛太慢——这些都必须通过 Loss 的曲线形态来判断。

超参数评估

将不同超参数的 Loss 曲线放在同一张图中,从而评估不同超参数的差异。

比如下图是4种优化器的 Loss 曲线图。这里可以明显看出,与SGD相比,其他3种方法学习得更快,而且速度基本相同,仔细看的话,AdaGrad 的学习进行得稍微快一点。

再比如下面的例子,观察不同的权重初始值的赋值方法会在多大程度上影响神经网络的学习。这里,我们基于std=0.01, Xavier初始值、He初始值进行实验,可以看出这里 He 优于 Xavier ,而 std = 0.01 几乎无法训练。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2026 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信