小批量梯度下降#
术语解释#
小批量梯度下降(Mini-batch Gradient Descent) 是目前深度学习模型训练中最为标准和常用的参数优化配置方案。小批量梯度下降在每次参数更新时,只随机选择一小部分训练样本(即批大小,Batch Size) 来计算目标函数关于权重参数的梯度,并据此进行更新。它介于梯度下降(GD,使用全部样本)和随机梯度下降(SGD,使用单个样本)之间。在 PyTorch 等框架中,通常借助 DataLoader 模块来快速构建这种小批量数据的迭代器。
更多相关内容讲解,可参见 「3.6 Softmax分类实战:PyTorch DataLoader与MNIST手写体分类」。
出现动机#
-
应对海量数据压力:在现代深度学习中,训练集的数量通常极其巨大,硬件的内存和算力难以支持一次性计算所有样本在所有参数上的梯度。
-
寻求计算效率平衡:为了克服全量梯度下降计算过慢和单样本随机梯度下降(SGD)梯度波动太剧烈的问题,开发者需要一种既能保证梯度相对稳定,又能满足大规模并行计算需求的策略。
直观示例#
如图所示,环形曲线表示目标函数对应的等高线,左右两边分别为随机梯度下降算法和梯度下降算法求解参数$w_1$和$w_2$的模拟过程,其中箭头方向表示负梯度方向,中间的原点表示目标函数对应的最优解。
从左侧的优化过程可以看出,尽管随机梯度下降算法最终也能近似求解得到最优解,但是在整个迭代优化过程中梯度却不稳定,极有可能导致陷入局部最优解当中。但是对于梯度下降算法来说,由于其梯度是取在多个样本上的均值,因此在每次迭代过程中计算得到的梯度会相对更稳定,从而有更大的几率求解得到全局最优解。
优点缺点#
-
优点:
-
梯度更新更平稳:相比于每次只取一个样本的 SGD,小批量梯度下降计算得到的梯度震荡较小,方向相对稳定,因此有更大的几率求解得到全局最优解。
-
充分利用并行计算:每次处理多个样本能够发挥 GPU 强大的并行计算能力,提高训练效率。
-
内存优化:在处理变长序列(如文本)时,通过将长度相近的样本组合成一个 batch 并进行填充(Padding),可以最大化地利用显存并避免算力浪费。
-
-
缺点:
-
引入额外超参数:该算法引入了 Batch Size(批大小) 这一关键超参数。如果批大小设置不当,可能会影响模型的收敛性,需要开发者手动调节。
-
对显存有一定要求:虽然相比全量梯度下降节省了内存,但相比于每次只处理一个样本的 SGD,它对显存的占用依然更高。
-