Datawhale X 李宏毅苹果书AI夏令营 | 深度学习基础——批量和动量

93 阅读5分钟

更新历史:

  • 2024-08-27 初稿

1 定义和术语

批量 Batch

批量是在计算梯度时,将整个数据集分成的小部分。它用于一次性计算损失函数的梯度,以更新模型参数。

回合(Epoch)  

是指在训练神经网络或其他机器学习模型时,模型完整遍历一次整个训练数据集的过程。

批量梯度下降法(Batch Gradient Descent,BGD)

批量梯度下降是一种在每次参数更新之前使用整个训练数据集来计算梯度的方法。这意味着如果训练数据集包含 20 笔数据,模型需要处理这 20 笔数据才能计算损失函数的梯度并更新参数。

随机梯度下降法(Stochastic Gradient Descent,SGD)

随机梯度下降是一种在每次参数更新时仅使用单个数据样本来计算梯度的方法。在这种情况下,模型参数会在每个 epoch 中根据每一笔数据进行更新,这样参数更新的频率就是数据集的大小。

动量法(Momentum)

是一种改进的梯度下降优化算法,它通过结合历史梯度信息来加速模型参数的更新,从而加速训练过程并有助于避免陷入局部最小值或鞍点。

2 批量和动量基础

2.1 批量

批量是一种可以对抗鞍点或局部最小值的方法。

批量大小对梯度下降法的影响主要体现在训练效率、模型收敛性质、内存消耗以及并行处理能力等方面。

  • 训练效率:批量大小越小,每次参数更新的计算量越小,但可能需要更多的迭代次数才能完成一个回合。批量大小越大,每次更新的计算量越大,但可以更快地完成一个回合。并行计算资源可以减少大批量带来的计算时间增加。
  • 模型收敛性质:小批量或随机梯度下降(SGD)可能导致损失函数的波动较大,但有助于模型逃离局部最小值,可能会更快地达到全局最小值。大批量通常会带来更稳定的梯度估计,但可能会导致模型陷入鞍点或局部最小值。
  • 内存消耗:大批量需要更多的内存来存储中间计算结果,这可能会受到硬件资源的限制。
  • 并行处理能力:现代计算硬件(如 GPU)能够利用并行处理能力来加速大批量的计算。但是,硬件的并行处理能力是有限的,当批量大小超过某个阈值时,计算时间会随着批量大小的增加而增长。

总的来说,在没有并行计算资源的情况下,批量大小的增加通常会导致计算时间的线性增加,因为需要对更多的数据样本计算梯度。使用并行计算资源(如 GPU)时,批量大小与计算时间之间的关系不再是简单的线性关系。对于较小的批量大小,GPU 可以高效地进行并行计算,因此计算时间随批量大小的增加而增长不大。当批量大小超过硬件的并行处理能力时,计算时间会开始显著增加,因为硬件资源的利用率达到了瓶颈。

那实际训练时,超参数批量是设置的大些好还是设置的小些更好?

image.png

2.2 动量法

动量法是另一种可以对抗鞍点或局部最小值的方法。- 动量法借鉴了物理中的动量概念,类比于一个球从高处滚下来时的行为。球在下坡时会因为重力而加速,即使遇到鞍点或局部最小值,球因惯性而可能继续前进,甚至翻越小坡。

image.png

一般的梯度下降

image.png

而动量法

image.png

下图所示的例子展示了动量法在优化过程中如何帮助模型参数跨越局部最小值或鞍点,通过结合历史梯度信息来维持更新的连续性和增加前进的动力。

image.png

  1. 初始阶段:在优化的初始阶段,由于没有历史更新方向,参数更新完全基于当前的梯度方向,即向右移动。
  2. 动量积累:随着优化过程的进行,前一次的更新方向(蓝色虚线)开始对当前的更新方向产生影响。新的更新方向(蓝色实线)是当前负梯度方向(红色箭头)与历史方向的综合结果。
  3. 跨越障碍:在遇到局部最小值或鞍点时,标准梯度下降可能会停止,因为梯度接近于零。但在动量法中,由于考虑了历史更新方向的积累效应,参数更新仍然能够继续进行,甚至可能翻越小丘。
  4. 超越局部最优:动量法使得参数更新不仅仅依赖于当前的梯度信息,而是结合了过去的梯度信息,这样即使在局部最小值附近,参数更新也可以持续进行,有可能找到更好的局部最小值或全局最小值。

在实际的机器学习任务中,动量法通常能够提供更快的收敛速度,并且有助于找到更好的模型参数。