我正在训练一个基于注意力机制的编码器-解码器模型,批次大小为8。我不认为数据集中有太多的噪声,但是示例来自几个不同的分布。
我能在训练损失曲线中看到很多噪声。在进行平均(0.99)后,趋势看起来不错。模型的准确性也不错。
我想了解导致这种损失曲线形状的原因是什么
回答:
我自己找到了答案。
我认为其他答案是不正确的,因为它们基于对更简单模型/架构的经验。让我困扰的主要问题是,损失中的噪声通常更对称(你可以绘制平均值,噪声随机地高于或低于平均值)。在这里,我们看到的更多是低趋势路径和突然的峰值。
正如我所写的,我使用的架构是带有注意力的编码器-解码器。可以很容易地得出结论,输入和输出可以有不同的长度。损失是在所有时间步上求和的,并且不需要除以时间步的数量。
https://www.tensorflow.org/tutorials/seq2seq
重要说明:值得指出的是,我们将损失除以批次大小,因此我们的超参数对批次大小“无关紧要”。有些人将损失除以(批次大小 * 时间步数),这会淡化对短句子犯的错误。更微妙的是,我们的超参数(适用于前一种方式)不能用于后一种方式。例如,如果两种方法都使用学习率为1.0的SGD,后一种方法实际上使用了更小的学习率,即1 / 时间步数。
我没有对损失进行平均,这就是为什么噪声是可见的。
P.S. 同样,例如批次大小为8可以有几百个输入和目标,所以实际上在不知道示例的平均长度的情况下,你不能说它是小还是大。