【问题标题】:Noisy training loss嘈杂的训练损失
【发布时间】:2018-07-12 18:08:34
【问题描述】:

我正在训练基于编码器-解码器注意力的模型,批量大小为 8。我不怀疑数据集中有太多噪声,但是示例来自几个不同的分布。

我可以在火车损失曲线中看到很多噪音。平均后(0.99),趋势很好。模型的准确性也不错。

我想了解这种损失曲线形状的原因可能是什么

【问题讨论】:

  • 学习率太高?
  • batch size真的很小,试试32个样本。 batch size中的样本越少,越重视单个样本,异常值的影响越强。
  • 这是基于编码器-解码器注意力的模型,因此每个示例实际上都是非常复杂的示例,输入的序列很长,输出的种类和长度也不同。更大的批量不适合顶级 GPU,但谢谢

标签: machine-learning neural-network deep-learning tensorboard loss


【解决方案1】:

嘈杂的训练损失,但良好的准确性可能是由于这个原因:

局部最小值:

该函数可以具有局部最小值,因此每次梯度下降收敛到局部最小值时,损失/成本都会降低。但是在良好的学习率下,模型学会从这些点跳跃,梯度下降将收敛到全局最小值,这就是解决方案。这就是为什么训练损失非常嘈杂的原因。

【讨论】:

    【解决方案2】:

    您正在使用小批量梯度下降,它仅针对小批量中的示例计算损失函数的梯度。但是,您测量的损失是所有训练示例的损失。总体损失应该有下降的趋势,但它往往会走向错误的方向,因为您的小批量梯度对总损失的估计不够准确。

    此外,您在每一步都将梯度乘以学习率,以尝试降低损失函数。这是一种局部近似,通常会超出目标最小值并最终到达损失曲面上的较高点,尤其是在您的学习率很高的情况下。

    Image Source

    将此图像视为只有一个参数的模型的损失函数。我们取点处的梯度,乘以学习率,在梯度方向上投影一条线段(未图示)。然后我们将这条线段末端的 x 值作为我们更新的参数,最后我们计算这个新参数设置下的损失。

    如果我们的学习率太高,那么我们将超过梯度指向的最小值,并可能最终导致更高的损失,如图所示。

    【讨论】:

    • 请注意,损失不像随机噪声,它更像是一些批次呈下降趋势,具有很好的低水平,但有些批次会产生非常高的突然峰值。请告诉我,考虑到这一点,您仍然认为您的解释可行吗?
    • 我相信是的。一些 mini-batch 会表现良好,而有些则不会。像这样的图表很常见。不过,你的比大多数人更嘈杂,可能是因为你的小批量小,而且学习率可能有点高。
    【解决方案3】:

    我自己找到了答案。

    我认为其他答案不正确,因为它们是基于使用更简单模型/架构的经验。困扰我的主要一点是损失中的噪声通常更加对称(您可以绘制平均值,并且噪声随机高于和低于平均值)。在这里,我们看到的更像是低趋势路径和突然高峰。

    正如我所写,我使用的架构是带有注意力的编码器-解码器。很容易得出结论,输入和输出可以有不同的长度。损失是所有时间步长的总和,不需要除以时间步长的数量。

    https://www.tensorflow.org/tutorials/seq2seq

    重要提示:值得指出的是,我们将损失除以 batch_size,因此我们的超参数对于 batch_size 是“不变的”。有些人将损失除以 (batch_size * num_time_steps),这会降低短句上的错误。更微妙的是,我们的超参数(应用于前一种方式)不能用于后一种方式。例如,如果两种方法都使用学习率为 1.0 的 SGD,则后一种方法有效地使用 1 / num_time_steps 的小得多的学习率。

    我没有对损失进行平均,这就是可以观察到噪声的原因。

    附:类似地,例如 8 的批量大小可以有几百个输入和目标,所以实际上你不能说它是小或大而不知道示例的平均长度。

    【讨论】:

    • 想详细说明解决方案是什么?从你的回答中不是特别清楚。看来损失是意料之中的,因为你没有平均?这是正确的吗?
    • 我不明白你的问题,请再问。没有解决方案 - 损失不是在时间步长上平均的(示例长度,这是可变的),所以预计看起来像这样。更长的例子有更大的损失。如果您不想看到那种噪音,您可以使用 sum(length_of_each_example_in_batch) 对每个批次进行平均。
    • 好的,谢谢。这就是我从你的回答中了解到的。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多