随机梯度下降#
术语解释#
随机梯度下降(Stochastic Gradient Descent, SGD) 是梯度下降算法的一种变体,在深度学习中它是一种高效求解网络参数梯度的利器。
随机梯度下降在每次更新参数时,只随机选择一个训练样本来计算目标函数关于参数的梯度。 相比于梯度下降算法在所有样本上计算梯度后再取平均,SGD 每次迭代仅依赖单个样本的预测结果与真实值之间的误差。
由于随机梯度下降波动太大而梯度下降计算太慢,实际应用中通常采用小批量梯度下降(Mini-batch Gradient Descent)。它每次选择一小批量样本(Batch Size)来计算梯度,既保证了梯度的相对稳定性(比 SGD 稳),又兼顾了计算效率(比 GD 快),是目前深度学习模型训练的标准配置。
更多相关内容讲解,可参见 「3.6 Softmax分类实战:PyTorch DataLoader与MNIST手写体分类」。
出现动机#
-
解决数据规模挑战:在深度学习中,训练集的数量通常极其巨大,内存和算力难以支持一次性计算所有样本在所有权重参数上的梯度。
-
提升训练效率:为了在计算资源有限的情况下仍能有效地更新模型参数,研究人员引入了这种每次只处理部分(或单个)数据的策略。
直观示例#
如图所示,环形曲线表示目标函数对应的等高线,左右两边分别为随机梯度下降算法和梯度下降算法求解参数$w_1$和$w_2$的模拟过程,其中箭头方向表示负梯度方向,中间的原点表示目标函数对应的最优解。
从左侧的优化过程可以看出,尽管随机梯度下降算法最终也能近似求解得到最优解,但是在整个迭代优化过程中梯度却不稳定,极有可能导致陷入局部最优解当中。但是对于梯度下降算法来说,由于其梯度是取在多个样本上的均值,因此在每次迭代过程中计算得到的梯度会相对更稳定,从而有更大的几率求解得到全局最优解。
优点缺点#
-
优点:
-
计算开销极低:由于每次迭代只需处理一个样本,单步参数更新的速度非常快。
-
适用于在线学习:它能够处理不断流入的新数据,而无需重新加载整个数据集。
-
有助于逃离局部最优(理论推导):虽然由于梯度的不稳定性可能带来波动,但在某些非凸优化问题中,这种随机性有时能帮助模型跳出浅层的局部极小值。
-
-
缺点:
-
梯度值抖动剧烈:由于是基于单样本计算梯度,优化过程中的梯度方向极不稳定,导致损失函数曲线波动很大。
-
难以收敛到全局最优:这种不稳定性使得模型极有可能陷入局部最优解,或者在最优解附近震荡而难以精确收敛。
-
无法利用并行计算:每次只处理一个样本,难以充分发挥 GPU 强大的并行计算能力。
-