嘈杂的训练损失

时间:2018-02-02 09:14:34

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

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

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

我想了解这种损失曲线形成的原因

noisy train loss averaged train loss

3 个答案:

答案 0 :(得分:2)

我自己找到了答案。

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

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

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

  

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

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

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

答案 1 :(得分:1)

嘈杂的训练损失,但准确度很高可能是由于这个原因:

本地最低标准:

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

curve

答案 2 :(得分:1)

您正在使用小批量梯度下降,它仅针对小批量中的示例计算损失函数的梯度。但是,您所测量的损失超过了所有培训示例。整体损失应该有一个下降的趋势,但它往往会走错方向,因为你的小批量梯度不足以估算总损失。

此外,您将渐变乘以每一步的学习率,以尝试降低损失函数。这是一个局部近似值,通常可以超过目标最小值并最终落在损耗表面的较高点,特别是如果您的学习率很高。

enter image description here

Image Source

将此图像视为仅具有一个参数的模型的损失函数。我们采用渐变点,乘以学习速率,在梯度方向投影线段(未图示)。然后,我们将此线段末尾的x值作为更新参数,最后我们计算此新参数设置的损耗。

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