为什么“损失”会根据选择的时期数而变化?

人工智能 神经网络 训练 优化 喀拉斯
2021-10-21 02:26:02

我正在使用 Keras 训练不同的神经网络。我想知道为什么如果我将纪元增加 1,直到新纪元的结果是不一样的。我正在使用 shuffle=False 和 np.random.seed(2017),并且我已经检查如果我重复相同数量的 epoch,结果是相同的,所以不是随机初始化工作。

在这里,我附上了带有 2 个 epoch 的训练结果的图片:

在这里,我附上了 3 个 epoch 的训练结果:

在此处输入图像描述

另外,我想知道为什么训练时间不是(3/2),以及它们中的一些怎么可能在多一个 epoch 时精度降低。

非常感谢!

1个回答

您在这里使用了两个优化器:随机梯度下降 (SGD) 和 Adam(它是 SGD 的更复杂的变体)。

所以“随机”部分意味着它是随机的。

随机梯度下降的工作原理是采用较小的随机部分训练数据,称为“小批量”,并在此上反向传播(训练)。这样做直到整个数据集被处理一次通常称为一个时期*。

简而言之,这就是梯度下降的工作原理:想象你正在走下一个 U 形的小山。您在 U 形中的位置非常低,并且您想通过跳跃进一步向下。你弄清楚什么方向对你来说是“向下”:然后你跳。但是该死的:你跳得太远了,你最终在 U 的另一边更远了!

这只是一个简单的例子。您可能正在以更大的维度工作,这使这个类比有点复杂。

无论如何,这会导致当你训练另一个 epoch 时损失可能会不时增加。如果你训练了很多 epoch 并且损失不断上升,你应该检查学习率(它基本上决定了“跳跃”有多大)。

希望能帮助到你 :)


*:还有其他定义 epoch 的方法,但它们都是这个的变体。