过拟合:解读损失曲线

如果您在首次训练模型时,所有损失曲线都如下所示,机器学习会变得简单得多:

图 20. 一张图,显示了训练机器学习模型时的理想损失曲线。损失曲线会在 y 轴上绘制损失,并在 x 轴上绘制训练步骤数。随着训练步骤数的增加,损失开始较高,然后呈指数级下降,最终趋于平稳,达到最小损失。
图 20. 理想的损失曲线。

遗憾的是,损失曲线通常很难解读。利用您对损失曲线的直觉来解答本页中的练习。

练习 1:振荡的损失曲线

图 21. 损失曲线(y 轴为损失;x 轴为训练步数),其中损失不会趋于平缓。
            而是会不稳定地振荡。
图 21. 振荡损失曲线。
您可以通过以下 三种方法尝试改进图 21 中显示的损失曲线。
将您的数据与数据架构进行对比,以检测不良示例,然后从训练集中移除不良示例。
是的,这是适用于所有模型的良好做法。
降低学习速率。
是的,在调试训练问题时,通常最好降低学习率。
将训练集缩减为少量可信的示例。
虽然这种做法听起来很不自然,但实际上是一个好主意。假设模型在小部分可信示例上收敛,那么您可以逐步添加更多示例,或许可以发现是哪些示例导致损失曲线出现波动。
增加训练集中的示例数量。
这是一个诱人的想法,但极不可能解决问题。
提高学习速率。
通常,如果模型的学习曲线显示存在问题,请避免提高学习速率。

练习 2. 损失曲线出现急剧跳跃

图 22。损失曲线图,显示损失在达到一定数量的训练步骤后会下降,然后随着进一步的训练步骤突然增加。
图 22. 损失急剧增加。
以下哪两个陈述指出了导致图 22 中损失值爆炸的可能原因。
输入数据包含一个或多个 NaN,例如因除零而导致的值。
这种情况比您想象的要常见。
输入数据包含大量离群值。
有时,由于批处理的随机排序不当,一个批处理可能包含大量离群值。
学习速率过低。
学习率非常低可能会增加训练时间,但不是导致损失曲线异常的原因。
正则化率过高。
没错,过高的正则化可能会阻止模型收敛;但不会导致图 22 中显示的奇怪损失曲线。

练习 3. 测试损失与训练损失不一致

图 23. 训练损失曲线似乎会收敛,但在经过一定数量的训练步骤后,验证损失开始上升。
图 23. 验证损失大幅增加。
以下哪一项陈述最能说明训练集和测试集的损失曲线之间存在这种差异的原因?
模型过度拟合了训练集。
是的,可能确实是。可能的解决方案:
  • 简化模型,可能需要减少特征数量。
  • 提高正则化率。
  • 确保训练集和测试集在统计上是等效的。
学习速率过高。
如果学习率过高,训练集的损失曲线可能不会像这样。

练习 4. 损失曲线卡住

图 24. 损失曲线图,显示损失开始随着训练而收敛,但随后显示看起来像矩形波的重复模式。
图 24. 在特定步数后出现混乱的损失。
以下哪个说法最有可能解释图 24 中显示的异常损失曲线?
训练集包含重复的示例序列。
这是一种可能性。确保充分打乱示例。
正则化率过高。
这不太可能是原因。
训练集包含的特征过多。
这不太可能是原因。