Neural network 在某些时期,火车的准确率会下降

Neural network 在某些时期,火车的准确率会下降,neural-network,deep-learning,resnet,Neural Network,Deep Learning,Resnet,我正在训练一个ResNet(CIFAR-10数据集),训练的准确度大部分(在95%的时间段内)都在增加,但有时会下降5-10%,然后又开始增加 以下是一个例子: Epoch 45/100 40000/40000 [==============================] - 50s 1ms/step - loss: 0.0323 - acc: 0.9948 - val_loss: 1.6562 - val_acc: 0.7404 Epoch 46/100 40000/40000 [====

我正在训练一个ResNet(CIFAR-10数据集),训练的准确度大部分(在95%的时间段内)都在增加,但有时会下降5-10%,然后又开始增加

以下是一个例子:

Epoch 45/100
40000/40000 [==============================] - 50s 1ms/step - loss: 0.0323 - acc: 0.9948 - val_loss: 1.6562 - val_acc: 0.7404
Epoch 46/100
40000/40000 [==============================] - 52s 1ms/step - loss: 0.0371 - acc: 0.9932 - val_loss: 1.6526 - val_acc: 0.7448
Epoch 47/100
40000/40000 [==============================] - 50s 1ms/step - loss: 0.0266 - acc: 0.9955 - val_loss: 1.6925 - val_acc: 0.7426
Epoch 48/100
40000/40000 [==============================] - 50s 1ms/step - loss: 0.0353 - acc: 0.9940 - val_loss: 2.2682 - val_acc: 0.6496
Epoch 49/100
40000/40000 [==============================] - 50s 1ms/step - loss: 1.6391 - acc: 0.4862 - val_loss: 1.2524 - val_acc: 0.5659
Epoch 50/100
40000/40000 [==============================] - 52s 1ms/step - loss: 0.9220 - acc: 0.6830 - val_loss: 0.9726 - val_acc: 0.6738
Epoch 51/100
40000/40000 [==============================] - 51s 1ms/step - loss: 0.5453 - acc: 0.8165 - val_loss: 1.0232 - val_acc: 0.6963
在这之后我退出了执行,但这是我的第二次运行,在第一次运行中,同样的事情发生了,一段时间后它又恢复到99%

批次是128,所以我想这不是问题。我没有改变学习率或任何其他Adam参数,但我想这也不是问题,因为大多数时候准确率都在提高


那么,为什么会出现这些突然的下降呢?

由于训练和验证的损失和准确性都在增加,看起来您的优化算法暂时超出了它试图遵循的损失函数的下降部分

记住梯度下降法和相关方法计算某一点的梯度,然后使用该点(有时还有一些附加数据)来猜测移动的方向和距离。这并不总是十全十美的,有时它会走得太远,最终又会走得更远


如果你的学习速度很快,你会时不时地看到这一点,但你可能会比学习速度较小的人更快地收敛。你可以尝试不同的学习率,但我不会担心,除非你的损失开始出现分歧。

我没有足够的知识来回答为什么,但根据我培训NNs的经验和我所读到的,这似乎是一个标准和预期的事情。事实上,如果你在更多的时间里继续训练,准确度可能会逐渐降低,这是关于在预期噪音和下降趋势之间找到“最佳点”。我相信年代和准确度之间没有明确的线性关系,但我也不知道技术原因。是的,这是我也读过的东西,但据我所知,这是没有剩余块的非常深的网络的问题,准确度下降是恒定的——一旦准确度开始下降,它就不会增加。另外,由于这是一个ResNet(也是一个浅显的ResNet50),我认为这不应该是一个问题,因为你已经证实了我的想法,所以我已经将你的答案标记为正确。我想,比拥有相同的学习率更聪明的方法可以提高性能,因为当网络达到高精度时,就会出现下降,此时它应该开始以较小的步幅探索周围环境。此外,我不确定梯度下降的简单情况是否完全适用于这里,因为深度神经网络正在优化的函数具有更像萨德尔的形状,但是,正如我上面所说的,学习率衰减应该在训练的后期阶段有所帮助