为什么每个epoch之后loss都会突然下降?

问题描述 投票:0回答:3

我在小批量中使用自定义损失函数(三元组损失),在纪元期间,损失逐渐减少,但在每个纪元之后,损失会突然下降(约下降的 10%),然后在该纪元期间逐渐减少(忽略准确性)。正常吗?

对此问题的每一个答案和参考都将受到赞赏。

纪元1/5 198/198 [================================] - 3299s 17s/步 - 损失:0.2500 - 加速:0.0014 纪元 2/5 99/198 [==============>.........................] - 预计到达时间:26:16 - 损失:0.1220 - 累计:0.0016

machine-learning keras deep-learning loss-function
3个回答
16
投票

注意:此答案假设您正在使用 Keras - 您可能希望将此信息添加到您的帖子中或至少添加相关标签。

是的,这是因为显示的值是历元内的平均值。考虑epoch 1。在训练开始时,损失通常会很大。然后它会减小,但第 1 纪元的显示值仍将包含平均值中从一开始就较大的值。例如,假设开始时的损失为 0.75,并线性下降到 0.25,直到第一个 epoch 结束;这意味着平均值为 0.5,这将是 epoch 1 显示的值。

一旦 epoch 2 开始,平均值就会重置,并将针对该 epoch 再次计算。让我们继续这个例子,因此在 epoch 2 开始时损失为 0.25,并线性减少到 0。这意味着 epoch 2 显示的损失将为 0.125!然而更重要的是,它将在 0.25 开始,因此在纪元开始时,您将看到与纪元 1 所示的 0.5 值相比大幅下降。


0
投票
只要一个时期内的平均损失在接下来的时期内持续减少,时期内损失的波动(即运行损失)就可以了。至于为什么会突然跳跃,可能是收敛得很快。


0
投票
我注意到使用 Pytorch 训练具有三重态损失的模型的模式相同。由于评估损失没有以同样的方式下降,我将其归因于这样一个事实:模型已经看到并根据这些样本的损失调整了其参数。该模型已经从这些三元组中学习过一次,因此它将在 Anchor-Positive 距离和 Anchor-Negative 距离之间的差异上做得更好。当然,这仅适用于您在每个时期使用相同的三元组的情况。如果您正在进行在线三元组挖掘,并且每个时期都可能出现完全不同的三元组,那么就会发生其他事情。

© www.soinside.com 2019 - 2024. All rights reserved.