深度学习中的'mini-batch'是什么意思?

What is the meaning of a 'mini-batch' in deep learning?

我正在学习快速人工智能课程,在“第 2 课 - SGD”中它说:

Mini-batch: a random bunch of points that you use to update your weights

而且它还说梯度下降使用小批量。

什么是小批量?小批量和普通批量有什么区别?

两者都是梯度下降的方法。但是在 批量梯度下降 中,您可以在一次迭代中处理整个训练集。然而,在 小批量梯度下降 中,您在每次迭代中处理训练集的一小部分。

还要比较随机梯度下降,在这种情况下,您在每次迭代中处理训练集中的单个示例。

另一种看待它的方式:它们都是相同的梯度下降方法的例子,批量大小为 m,训练集大小为 n。对于随机梯度下降,m=1。对于批量梯度下降,m = n。对于小批量,m=b 且 b < n,通常 b 比 n 小。

Mini-batch增加了确定b的正确大小的问题,但是找到正确的b可能会大大改善你的结果。

@majid ghafouri 的出色解释,但我只想添加更多详细信息以确保您了解它以及我们使用它的原因或我们可以使用它获得哪些优势:

随机梯度下降根据以下迭代过程执行更新。 这种一次执行更新一个示例的学习类型称为 online 学习中。

它的算法如下所示:

procedure Online
  for several epochs of training do
     for each training example in the data do
         Calculate gradients of the loss
         Update the parameters according to this gradient
     end for
  end for
end procedure

相对的,我们也可以想到batch learning算法,把整个数据集看成一个单元,计算这个单元的梯度,全遍历数据后才进行update。这两种更新策略各有优缺点。

• 在线训练算法通常可以更快地找到相对较好的解决方案,因为它们不需要在执行更新之前完全遍历数据。

• 然而,在训练结束时,批量学习算法可以更稳定,因为它们 没有受到最近看到的训练示例的过度影响。

批处理算法如下所示:

procedure Batch
  for several epochs of training do
    for each training example in the data do
        Calculate and accumulate gradients of the loss
    end for
    Update the parameters according to the accumulated gradient
  end for
end procedure

• 批量训练算法也更容易陷入局部最优;在线训练算法中的随机性通常允许它们跳出局部最优并且 找到更好的全局解决方案。

Minibatching 是这两种策略之间的折中方案。基本上,小批量 培训类似于在线培训,但不是一次处理单个培训示例 一次,我们一次计算 n 个训练样例的梯度。在 n = 1 的极端情况下, 这相当于标准的在线训练,在 n 等于数据大小的另一个极端情况下,这相当于完​​全分批训练。

随着我们增加训练样例的数量,每次参数更新都变成 信息量更大且更稳定,但执行一次更新的时间会增加,因此它 选择一个可以在两者之间取得良好平衡的 n 是很常见的。 minibatching 的另一个主要优点是,通过使用一些技巧,它实际上是 可以使同时处理 n 个训练示例的速度明显快于 分别处理 n 个不同的例子。具体来说,通过采用多个训练示例 并将相似的操作组合在一起同时处理,我们可以实现大 由于现代硬件(特别是 GPU, 还有 CPU)有非常有效的向量处理指令,可以利用 适当结构化的输入。

解释来自这个优秀的paper,如果你有时间可以进一步阅读: