网络训练过程中为什么要划分batch

在计算梯度的时候,并不是对所有数据的损失 L 计算梯度,而是把所有的数据分
成一个一个的批量(batch),如下图所示。每个批量的大小是 B ,即带有 B 笔数据。每次在更新参数的时候,会去取出 B 笔数据用来计算出损失和梯度更新参数。遍历所有批量的过程称为一个回合(epoch)。事实上,在把数据分为批量的时候,我们还会进行随机打乱(shuffle)。随机打乱有很多不同的做法,一个常见的做法是在每一个回合开始之前重新划分批量,也就是说,每个回合的批量的数据都不一样。
在这里插入图片描述

为什么要划分batch?

1. 内存效率

处理整个数据集一次(称为全量梯度下降,Batch Gradient Descent)对于内存的需求非常高,尤其是当数据集非常大时。划分批次允许将数据集分成更小的部分进行处理,从而降低了每次计算所需的内存量。

2. 计算效率

在现代硬件(如GPU和TPU)上,处理一个批次的数据比一次只处理一个样本更高效。批次处理能够更好地利用硬件的并行计算能力,从而提高计算效率。例如,矩阵操作在硬件上可以进行并行计算,这样处理一个批次中的所有样本比逐个样本进行处理要快得多。

3. 梯度估计

在使用批次(mini-batch)时,每个批次内的样本用来估计整个数据集的梯度。相比于全量梯度下降,mini-batch梯度下降能更快地更新模型参数,因为它在计算每个批次梯度后就能更新一次参数,而不是等到遍历整个数据集后再更新。尽管这种方法在每次更新时只使用了一部分数据,但它可以通过多次迭代逐渐逼近全数据集的梯度,从而实现有效训练。
假设现在我们有 20 笔训练数据,先看下两个最极端的情况,如下图 所示
• 图 (a)的情况是没有用批量,批量大小为训练数据的大小,这种使用全批量(full
batch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD)。
此时模型必须把 20 笔训练数据都看完,才能够计算损失和梯度,参数才能够更新一次。
• 图 (b)中,批量大小等于 1,此时使用的方法即随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法。批量大小等于 1 意味着只要取出一
笔数据即可计算损失、更新一次参数。如果总共有 20 笔数据,那么在每一个回合里面,
参数会更新 20 次。用一笔数据算出来的损失相对带有更多噪声,因此其更新的方向如
下图 所示,是曲曲折折的 。
在这里插入图片描述
实际上,批量梯度下降并没有“划分批量”:要把所有的数据都看过一遍,才能够更新一次
参数,因此其每次迭代的计算量大。但相比随机梯度下降,批量梯度下降每次更新更稳定、更准确。

4. 稳定性与收敛速度

使用批次可以在计算效率和训练稳定性之间找到平衡。相比于随机梯度下降(SGD),mini-batch梯度下降在每次参数更新时使用多个样本的数据,这有助于减小梯度更新的方差,从而使训练更加稳定和收敛更快。太小的批次可能会导致噪声较大,而太大的批次会导致更新较慢,因此适中的批次大小能提供一个稳定且高效的训练过程

5. 正则化效果

mini-batch梯度下降还具有一定的正则化效果,因为每次使用的只是数据集的一个子集,这在一定程度上可以防止模型过拟合。由于每个批次的数据不同,参数更新会有一定的随机性,这种随机性有助于跳出局部最优解,提高模型的泛化能力。

6. 适应性和可调性

使用批次训练可以灵活调整批次大小以适应不同的硬件和应用场景。比如在内存较大的服务器上可以使用较大的批次,而在资源有限的设备上则可以使用较小的批次。此外,不同的批次大小对训练速度和模型性能也有影响,允许实验者根据实际需求调整和优化模型训练。
参考:《深度学习-李宏毅

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值