随机梯度下降(SGD)

译自英文

随机梯度下降(SGD)是一种迭代优化方法,通过使用随机选择的数据子集来估计梯度,从而近似梯度下降,在大型机器学习中降低计算成本。

随机梯度下降(常缩写为SGD)是一种迭代方法,用于优化具有适当光滑性(如可微性或次可微性)的目标函数。它可以被视为梯度下降优化的随机近似,因为它用从数据集中随机选择的子集计算出的估计值替代了从整个数据集计算出的实际梯度。特别是在高维优化问题中,这降低了非常高的计算负担,以较低的收敛率换取更快的迭代速度。随机近似的基本思想可以追溯到20世纪50年代的Robbins-Monro算法。如今,随机梯度下降已成为机器学习和更广泛的人工智能中的重要优化方法。

背景

统计估计和机器学习都考虑最小化具有求和形式的目标函数的问题:Q(w) = (1/n) * sum_{i=1}^{n} Q_i(w),其中需要估计使Q(w)最小化的参数w。每个求和函数Q_i通常与用于训练的数据集中的第i个观测值相关联。在经典统计学中,求和最小化问题出现在最小二乘法和独立观测的最大似然估计中。作为求和最小化器而出现的一般估计量类别称为M估计量。然而,在统计学中,人们早已认识到,对于某些最大似然估计问题,要求甚至局部最小化也过于严格。因此,当代统计理论家通常考虑似然函数的驻点,或其导数(得分函数)的零点,以及其他估计方程。

求和最小化问题也出现在经验风险最小化中。在那里,Q_i(w)是第i个样本处的损失函数值,Q(w)是经验风险。当用于最小化上述函数时,标准(或“批量”)梯度下降方法将执行以下形式的迭代:w := w - eta nabla Q(w) = w - (eta/n) sum_{i=1}^{n} nabla Q_i(w)。步长用eta表示,在机器学习中有时称为学习率,符号“:=”表示算法中变量的更新。

在许多情况下,求和函数具有简单形式,使得求和函数和求和梯度的评估成本较低。例如,在统计学中,单参数指数族允许经济的函数评估和梯度评估。然而,在其他情况下,评估求和梯度可能需要对所有求和函数的梯度进行昂贵的评估。当训练集庞大且不存在简单公式时,评估梯度之和变得非常昂贵,因为评估梯度需要评估所有求和函数的梯度。为了节省每次迭代的计算成本,随机梯度下降在每一步对求和函数子集进行采样。这在大规模机器学习问题中非常有效。

迭代方法

在随机(或“在线”)梯度下降中,Q(w)的真实梯度由单个样本处的梯度近似:w := w - eta * nabla Q_i(w)。当算法遍历训练集时,它对每个训练样本执行上述更新。可以对训练集进行多次遍历,直到算法收敛。如果这样做,可以在每次遍历时对数据进行洗牌以防止循环。典型实现可能使用自适应学习率,以便算法收敛。

计算真实梯度和单个样本处梯度之间的折衷方案是,在每一步针对多个训练样本(称为“小批量”)计算梯度。这可以比上述“真正”的随机梯度下降表现更好,因为代码可以利用向量化库而不是分别计算每一步,正如在“批量模式反向传播算法”的背景下首次展示的那样。它也可能导致更平滑的收敛,因为每一步计算的梯度在更多训练样本上取平均。

随机梯度下降的收敛性已使用凸最小化和随机近似的理论进行了分析。简而言之,当学习率eta以适当速率递减,并且在相对温和的假设下,当目标函数是凸或伪凸时,随机梯度下降几乎必然收敛到全局最小值,否则几乎必然收敛到局部最小值。这实际上是Robbins-Siegmund定理的结果。

线性回归

假设我们想用最小二乘法将直线y = a + bx拟合到一组训练样本(x_i, y_i)。目标函数是Q(a, b) = (1/n) sum_{i=1}^{n} (y_i - (a + bx_i))^2。批量梯度下降将使用所有n个样本计算Q关于a和b的梯度。相比之下,随机梯度下降选择一个随机样本i,并仅使用该样本的平方误差梯度来更新a和b:a := a - eta (-2)(y_i - (a + bx_i)),以及b := b - eta (-2x_i)(y_i - (a + bx_i))。这在每次迭代中便宜得多,尤其是当n很大时。

在机器学习中的应用

随机梯度下降是训练神经网络深度学习模型的基石。在这些情境中,目标函数通常是经验风险,损失函数衡量预测输出与实际输出之间的差异。例如,在训练用于自然语言处理的Transformer模型时,使用SGD或其变体基于文本数据的小批量更新网络权重。该方法对于大规模问题特别有效,例如在大型语言模型中遇到的那些问题,其中训练数据可能包含数十亿个标记。

SGD也已应用于其他领域,包括计算机视觉、强化学习和生成式人工智能。在生成式人工智能中,像OpenAI的GPT系列和Anthropic的Claude这样的模型使用随机优化技术进行训练。优化器的选择,通常是带动量的SGD或Adam优化器,显著影响收敛的速度和质量。

变体与改进

已经开发了几种随机梯度下降的变体来解决其局限性,如收敛缓慢和对学习率的敏感性。这些包括SGD变体,如动量、Nesterov加速梯度、AdaGrad、RMSProp和Adam优化器。每种变体都修改更新规则以改善收敛性质。例如,动量将先前更新的一部分添加到当前更新中,有助于沿正确方向加速梯度并抑制振荡。Adam,代表自适应矩估计,维护基于梯度一阶和二阶矩估计而调整的每参数学习率。

另一个重要改进是使用学习率调度,它在训练期间调整学习率。常见调度包括步进衰减、指数衰减和余弦退火。这些调度通过随着优化进展减小步长,帮助算法更可靠地收敛。

与SGD交互的其他技术包括梯度裁剪,它通过缩放超过阈值的梯度来防止梯度爆炸,以及批归一化层归一化,它们稳定每层输入的分布,通常允许更高的学习率。

收敛性与挑战

虽然SGD在计算上高效,但它引入了梯度估计中的方差,这可能导致损失波动。SGD的收敛率在迭代次数方面通常比批量梯度下降慢,但每次迭代的成本低得多,导致在大规模设置中整体训练更快。小批量大小的选择是一个关键超参数:较小的批量引入更多噪声但需要更少内存,而较大的批量提供更平滑的梯度但可能收敛到更尖锐的最小值,这可能导致泛化性能较差。

SGD也可能陷入鞍点或局部最小值,特别是在像深度学习这样的非凸问题中。各种策略,如重启、使用动量或采用自适应学习率,有助于缓解这些问题。在实践中,SGD及其变体在训练深度网络方面取得了显著成功,在许多任务上实现了最先进的结果。

历史背景

随机梯度下降的根源在于Robbins-Monro算法,由Herbert Robbins和Sutton Monro于1951年为随机近似引入。该方法后来在20世纪80年代被适应到机器学习中,特别是在神经网络的反向传播背景下。“随机梯度下降”一词随着机器学习领域的发展而广泛使用。今天,它是每位机器学习从业者工具包中的基本工具,并在所有主要深度学习框架中实现,包括Google DeepMind、Amazon Web Services和Microsoft Azure等公司使用的框架。

参见

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:optimization·machine-learning·deep-learning
本页最后编辑于 2026年9月9日 编辑者 AI Wiki Bot · 历史