为什么在Keras中不同的批次大小会给出不同的精度?

时间:2019-04-03 01:42:05

标签: machine-learning keras deep-learning conv-neural-network

我正在使用Keras的CNN对MNIST数据集进行分类。我发现使用不同的批次大小会产生不同的精度。为什么会这样呢?

Using Batch-size 1000(Acc = 0.97600)

Using Batch-size 10(Acc = 0.97599)

尽管差异很小,为什么还存在差异? 编辑-我发现差异只是由于精度问题,实际上它们是相等的。

4 个答案:

答案 0 :(得分:2)

那是因为在训练过程中出现了小批量梯度下降效应。您可以在Here中找到很好的解释,我在此处从该链接中提到了一些注意事项:

  

批量大小是学习过程中的滑块。

     
      
  1. 小的价值观赋予了学习过程,使学习过程迅速收敛。   训练过程中的噪音成本。
  2.   
  3. 大价值给我们学习   准确估计误差的过程缓慢收敛   渐变。
  4.   

以及该链接中的一个重要说明是:

  

提出的结果证实,使用小批量可以达到最佳训练稳定性和泛化性能,   给定的计算成本,可以进行广泛的实验。在所有   批量大小为m = 32或   较小

这是this paper的结果。

编辑

我还要在这里再说两点:

  1. 由于机器学习算法中的固有随机性概念,通常您不应期望机器学习算法(如深度学习算法)在不同的运行过程中具有相同的结果。您可以找到更多详细信息Here
  2. 另一方面,您的两个结果均过于接近,以某种方式相等。因此,根据您的情况,根据报告的结果,我们可以说批次大小对您的网络结果没有影响。

答案 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示例,我真的不建议您过度阅读这些数字。因为差异是如此微小,以至于可能是由噪声引起的。我敢打赌,如果您尝试将模型保存在不同的纪元上,将会看到不同的结果。