我正在使用Keras的CNN对MNIST数据集进行分类。我发现使用不同的批次大小会产生不同的精度。为什么会这样呢?
Using Batch-size 1000(Acc = 0.97600)
Using Batch-size 10(Acc = 0.97599)
尽管差异很小,为什么还存在差异? 编辑-我发现差异只是由于精度问题,实际上它们是相等的。
答案 0 :(得分:2)
那是因为在训练过程中出现了小批量梯度下降效应。您可以在Here中找到很好的解释,我在此处从该链接中提到了一些注意事项:
批量大小是学习过程中的滑块。
- 小的价值观赋予了学习过程,使学习过程迅速收敛。 训练过程中的噪音成本。
- 大价值给我们学习 准确估计误差的过程缓慢收敛 渐变。
以及该链接中的一个重要说明是:
提出的结果证实,使用小批量可以达到最佳训练稳定性和泛化性能, 给定的计算成本,可以进行广泛的实验。在所有 批量大小为m = 32或 较小
这是this paper的结果。
编辑
我还要在这里再说两点:
答案 1 :(得分:1)
对于更大的批次大小(1000):
数据被分为几块,每块有1000个样本。
如果假设您有3000个样本的数据集,那么将形成3个批次。
然后,优化器将为每个批次而不是每个样本优化NN。因此,优化将进行3次。
对于较小的批量大小(10):
考虑到上述示例,将形成300个批次。因此,将进行300次优化。较小的批次大小可以进行更多优化,因此模型可以更好地泛化并提高准确性。
答案 2 :(得分:0)
这未连接到Keras。批次大小以及学习率是使用小批量随机梯度下降(SGD)训练神经网络的关键超参数,它完全影响学习动态,进而影响准确性,学习速度等。
简而言之,SGD通过朝损失梯度的(负)方向迭代更新神经网络的权重来优化神经网络的权重。在小批量SGD中,梯度是在每次迭代时根据训练数据的子集估算的。这是一个嘈杂的估计,有助于规范化模型,因此批次的大小非常重要。此外,学习率决定每次迭代中更新多少权重。最后,尽管这可能并不明显,但是学习速度和批量大小却彼此相关。 [paper]答案 3 :(得分:0)
我想补充两点:
1)使用特殊处理时,可以在非常大的批处理量的情况下达到类似的性能,同时极大地加快了培训过程。例如, Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour
2)关于您的MNIST示例,我真的不建议您过度阅读这些数字。因为差异是如此微小,以至于可能是由噪声引起的。我敢打赌,如果您尝试将模型保存在不同的纪元上,将会看到不同的结果。