据我所知,当采用随机梯度下降作为学习算法时,有人将“epoch”用于完整数据集,“batch”用于单个更新步骤中使用的数据,而另一个则分别使用“batch”和“minibatch”,以及其他人使用'epoch'和'minibatch'。这在讨论时会带来很多混乱。
那么正确的说法是什么?还是它们只是都可以接受的方言?
据我所知,当采用随机梯度下降作为学习算法时,有人将“epoch”用于完整数据集,“batch”用于单个更新步骤中使用的数据,而另一个则分别使用“batch”和“minibatch”,以及其他人使用'epoch'和'minibatch'。这在讨论时会带来很多混乱。
那么正确的说法是什么?还是它们只是都可以接受的方言?
一个时期通常意味着您的算法会看到每个训练实例一次。现在假设您有训练实例:
如果您运行批量更新,则每次参数更新都要求您的算法对训练实例中的每一个都只查看一次,即每个时期您的参数都更新一次。
如果您使用批量大小 =运行小批量更新,则每次参数更新都需要您的算法查看个,即每个时期您的参数都会更新大约次。
如果您运行 SGD 更新,则每次参数更新都需要您的算法查看训练实例中的 1 个,即,每个 epoch 您的参数都会更新大约次。
“Epoch”通常意味着将学习算法暴露给整个训练数据集。这并不总是有意义的,因为我们有时会生成数据。
“批处理”和“小批量”可能会造成混淆。
训练示例有时需要“批处理”,因为并非所有数据都必须一次暴露给算法(通常由于内存限制)。
在 SGD 的上下文中,“Minibatch”意味着在更新权重之前计算整个批次的梯度。如果您不使用“小批量”,则“批量”中的每个训练示例都会独立更新学习算法的参数。
一个时期通常是整个数据集的一个循环。
批量或小批量是指在其上计算梯度和更新权重的数据集的大小相等的子集。
即对于大小的数据集:
优化方法 | 每个梯度计算中的样本 | 每个时期的权重更新 |
---|---|---|
批量梯度下降 | 整个数据集 | |
小批量梯度下降 | 数据集的连续子集 | |
随机梯度下降* | 数据集的每个样本 |
然而,术语批本身是模棱两可的,可以指批梯度下降或小批量的大小。
* 相当于批量大小为 1 的minibatch。
为什么使用小批量?
计算整个数据集的梯度可能是不可行的(由于内存/计算限制),因此可以使用更小的minibatch(而不是单个batch)来代替。在极端情况下,可以重新计算数据集中每个单独样本的梯度。
如果您以迭代方式执行此操作(即多次重新计算整个数据集),则每次迭代称为epoch。