【问题标题】:Why does different batch-sizes give different accuracy in Keras?为什么不同的批量大小在 Keras 中给出不同的精度?
【发布时间】:2019-04-03 01:42:04
【问题描述】:

我使用 Keras 的 CNN 对 MNIST 数据集进行分类。我发现使用不同的批量大小会产生不同的准确性。为什么会这样?

Using Batch-size 1000 (Acc = 0.97600)

Using Batch-size 10 (Acc = 0.97599)

虽然差别很小,但为什么会有差别呢? 编辑 - 我发现差异只是因为精度问题,它们实际上是相等的。

【问题讨论】:

  • @pouyan 的答案通常是正确的,但在您的具体情况下,我认为这只是随机梯度下降如何工作的随机波动。
  • 在整个模型构建过程(随机权重初始化、改组、将样本分配到批次等)中确实存在 几十个 的固有随机性来源;在您的情况下,真正令人惊讶的是这两个值实际上是相等的,而不是它们不是。只需尝试对两个批量大小重复该过程,看看您是否会得出与上述相同的结果(提示:很可能您不会)...

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


【解决方案1】:

那是因为训练过程中的 Mini-batch 梯度下降效应。您可以在 Here 找到很好的解释,我在此处提到了该链接中的一些注释:

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

  1. 小值提供了一个快速收敛的学习过程 训练过程中的噪音成本。
  2. 较大的值提供学习 缓慢收敛并准确估计误差的过程 渐变。

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

呈现的结果证实,使用小批量可实现最佳训练稳定性和泛化性能,对于 给定计算成本,在广泛的实验中。在所有 在批量大小 m = 32 或 更小

这是this paper的结果。

编辑

这里我还要提两点:

  1. 由于机器学习算法中固有的随机性概念,通常您不应期望机器学习算法(如深度学习算法)在不同的运行中具有相同的结果。您可以找到更多详情Here
  2. 另一方面,您的两个结果都太接近了,而且不知何故它们是相等的。因此,在您的情况下,根据报告的结果,我们可以说批量大小对您的网络结果没有影响。

【讨论】:

    【解决方案2】:

    这与 Keras 无关。批量大小和学习率是使用小批量随机梯度下降 (SGD) 训练神经网络的关键超参数,它们完全影响学习动态,进而影响准确性、学习速度等。

    简而言之,SGD 通过向损失梯度的(负)方向迭代更新神经网络的权重来优化它们。在小批量 SGD 中,梯度在每次迭代时对训练数据的子集进行估计。这是一个嘈杂的估计,有助于规范化模型,因此批次的大小很重要。此外,学习率决定了每次迭代更新权重的多少。最后,虽然这可能不明显,但学习率和批量大小是相互关联的。 [paper]

    【讨论】:

      【解决方案3】:

      我要补充两点:

      1) 使用特殊处理时,可以在非常大的批大小下实现类似的性能,同时极大地加快训练过程。例如, Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour

      2) 关于您的 MNIST 示例,我真的不建议您过度阅读这些数字。因为差异是如此微妙,以至于它可能是由噪音引起的。我敢打赌,如果你尝试保存在不同时期的模型,你会看到不同的结果。

      【讨论】:

        猜你喜欢
        • 2019-02-09
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多