首页 文章

嘈杂的训练损失

提问于
浏览
5

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

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

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

noisy train loss

averaged train loss

3 回答

  • 1

    我自己找到了答案 .

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

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

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

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

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

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

  • 2

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

    当地最小值:

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

    curve

  • 1

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

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

    enter image description here

    Image Source

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

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

相关问题