我正在训练一个语言模型,每次训练时都会绘制损失与历元的关系。我附上了其中的两个样本。
显然,第二个表现出了更好的性能。但是,从这些图表来看,我们什么时候决定停止训练(提前停止)?
我们可以从这些图表中了解过度拟合和欠拟合还是我需要绘制额外的学习曲线?
从这些图中可以得出哪些额外的推论?
最佳答案
第一个结论显然是第一个模型的性能比第二个模型差,而且这通常是正确的,只要您使用相同的数据进行验证。如果您训练具有不同分割的模型,情况可能不一定如此。
此外,回答您有关过拟合/欠拟合的问题:
过度拟合的典型图表如下所示:
因此,就您的情况而言,您显然只是达到了收敛,但实际上并没有过度拟合! (这是个好消息!) 另一方面,你可以问问自己是否可以取得更好的结果。我假设你正在降低你的学习率,这让你在某种形式的平台期取得成功。如果是这种情况,请首先尝试减少学习率,看看是否可以进一步减少损失。
此外,如果你仍然看到一个很长的平台期,你也可以考虑提前停止,因为你实际上没有获得更多的改进。根据您的框架,有一些实现(例如 Keras has callbacks for early stopping ,它通常与验证/测试错误相关)。如果您的验证误差增加,与图像类似,您应该考虑使用最低的验证误差作为提前停止的点。我喜欢这样做的一种方法是时不时地对模型进行检查点,但前提是验证错误有所改善。
您可以做出的另一个推论是一般的学习率:如果它太大,您的图表可能会非常“跳跃/锯齿状”,而非常低的学习率只会使误差小幅下降,而不是呈指数下降那么多腐烂的行为。
通过比较两个示例中前几个时期的下降陡度,您可以看到这种弱形式,其中第一个示例(学习率较低)需要更长的时间才能收敛。
最后,如果您的训练和测试误差相差很大(如第一种情况),您可能会问自己是否实际上准确地描述或建模了问题;在某些情况下,您可能会意识到(数据)分布中存在一些您可能忽略的问题。不过,由于第二张图要好得多,我怀疑您的问题就是这种情况。
关于machine-learning - 我们如何分析损失与历元图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52145992/