【发布时间】:2019-10-07 12:21:39
【问题描述】:
我正在学习 fast-ai 课程,在第 2 课 SGD 中显示。
小批量:'用于更新权重的随机点'
它还说梯度下降使用 Mini-batch ...
什么是小批量,小批量与批量有什么区别?
感谢您的帮助
【问题讨论】:
标签: deep-learning pytorch computer-science cross-validation fast-ai
我正在学习 fast-ai 课程,在第 2 课 SGD 中显示。
小批量:'用于更新权重的随机点'
它还说梯度下降使用 Mini-batch ...
什么是小批量,小批量与批量有什么区别?
感谢您的帮助
【问题讨论】:
标签: deep-learning pytorch computer-science cross-validation fast-ai
两者都是梯度下降的方法。但是在批量梯度下降中,您在一次迭代中处理整个训练集。而在小批量梯度下降中,您会在每次迭代中处理一小部分训练集。
还比较随机梯度下降法,您在每次迭代中处理来自训练集的单个示例。
另一种看待它的方式:它们都是梯度下降的相同方法的示例,批量大小为 m,训练集大小为 n。对于随机梯度下降,m=1。对于批量梯度下降,m = n。对于 mini-batch,m=b 且 b
小批量增加了确定 b 的正确大小的问题,但找到正确的 b 可能会大大改善您的结果。
【讨论】:
@majid ghafouri 的出色解释,但我只想添加更多细节以确保您明白这一点以及我们使用它的原因或使用它可以获得哪些优势:
随机梯度下降根据以下迭代过程执行更新。 这种每次只更新一个示例的学习称为在线 学习。
它的算法如下所示:
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
相比之下,我们也可以考虑批量学习算法,它将整个数据集视为一个单元,计算该单元的梯度,然后仅在对数据进行全通后才进行更新。这两种更新策略各有取舍。
• 在线训练算法通常会更快地找到相对较好的解决方案,因为它们不需要在执行更新之前对数据进行完整的传递。
• 但是,在训练结束时,批量学习算法可能更稳定,因为它们 不会受到最近看到的训练示例的过度影响。
批处理算法如下所示:
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,,如果你有时间可以进一步阅读:
【讨论】: