随机梯度下降 (SGD) 是一种优化算法,通常用于训练机器学习模型,特别是在涉及大型数据集的场景中。与使用整个数据集计算损失函数梯度的标准梯度下降不同,SGD 使用每次迭代中随机选择的单个数据点(或一小组数据)来更新模型参数。这种方法减少了计算开销,使其能够处理太大而无法在一个批次中处理的数据集。核心思想是使用来自子集的噪声估计来近似损失函数的真实梯度——这将需要所有数据——从而使模型能够逐步朝着最小化损失的方向发展。
该过程如下:在每个训练步骤中,SGD 随机选择一个数据点(或小批量),计算该样本的损失梯度,并以与梯度相反的方向更新模型的参数,并按学习率缩放。例如,在线性回归中,损失可能是预测值和实际值之间的平方误差。SGD 不是计算所有训练样本的平均梯度,而是仅计算一个样本的梯度并立即调整权重。这种频繁的更新会引入噪声,但它也能实现更快的迭代并能够逃脱浅局部最小值。学习率是一个关键的超参数——太高,更新会超出最佳值;太低,训练变得迟缓。
SGD 的主要优点是效率,尤其是在大型数据集方面。一次处理一个样本避免了批量方法的内存和计算瓶颈。然而,梯度估计中的噪声会导致不稳定的收敛,需要仔细调整学习率或使用学习率计划等技术(例如,随着时间的推移逐渐降低速率)。开发人员通常使用小批量 SGD 等变体,通过处理小样本组来平衡噪声和效率,或者使用基于动量的 SGD,从而平滑参数更新。在实践中,SGD 广泛用于训练神经网络,其中数据集非常庞大,并且其噪声更新甚至可以帮助防止过度拟合。虽然与批量方法相比,它可能需要更多迭代才能收敛,但每次迭代的速度使其成为许多实际应用中的实用选择。