随机梯度下降(通常缩写为SGD)是一种迭代方法,用于优化具有适当平滑性质(如可微性或次可微性)的目标函数。它可以被视为梯度下降优化的随机近似,因为它用从数据集中随机选择的子集计算出的估计值,替代了从整个数据集计算出的实际梯度。特别是在高维优化问题中,这减少了非常高的计算负担,以较低的收敛速度换取更快的迭代。随机近似的基本思想可以追溯到20世纪50年代的Robbins–Monro算法。如今,随机梯度下降已成为机器学习及相关领域中的重要优化方法。
统计估计和机器学习都考虑最小化具有求和形式的目标函数的问题:Q(w) = (1/n) Σ Q_i(w),其中需要估计使Q(w)最小化的参数w。每个求和函数Q_i通常与用于训练的数据集中的第i个观测值相关联。在经典统计学中,求和最小化问题出现在最小二乘法和独立观测的最大似然估计中。作为求和最小化器的一类一般估计量被称为M估计量。然而,在统计学中,长期以来人们认识到,对于某些最大似然估计问题,要求甚至局部最小化也过于严格。因此,当代统计理论家通常考虑似然函数的平稳点,或其导数(即得分函数)的零点,以及其他估计方程。求和最小化问题也出现在经验风险最小化中,其中Q_i(w)是第i个样本处的损失函数值,Q(w)是经验风险。
当用于最小化上述函数时,标准(或“批量”)梯度下降方法将执行以下迭代:w := w - η ∇Q(w) = w - (η/n) Σ ∇Q_i(w)。步长用η表示,在机器学习中有时称为学习率,而“:=”表示算法中变量的更新。在许多情况下,求和函数具有简单形式,使得求和函数和求和梯度的评估成本较低。例如,在统计学中,单参数指数族允许经济的函数评估和梯度评估。然而,在其他情况下,评估求和梯度可能需要对所有求和函数的梯度进行昂贵的评估。当训练集庞大且不存在简单公式时,评估梯度之和变得非常昂贵,因为评估梯度需要评估所有求和函数的梯度。为了节省每次迭代的计算成本,随机梯度下降在每一步对求和函数的子集进行采样。这在大型机器学习问题中非常有效。
迭代方法
在随机(或“在线”)梯度下降中,Q(w)的真实梯度由单个样本处的梯度近似:w := w - η ∇Q_i(w)。当算法遍历训练集时,它对每个训练样本执行上述更新。可以对训练集进行多次遍历,直到算法收敛。如果这样做,可以在每次遍历时对数据进行洗牌以防止循环。典型实现可能使用自适应学习率,以便算法收敛。在伪代码中,随机梯度下降可以表示如下:
- 选择初始参数向量w和学习率η。
- 重复直到收敛:
- 洗牌训练样本。
- 对于每个训练样本i:
- 计算梯度∇Q_i(w)。
- 更新参数:w := w - η ∇Q_i(w)。
在计算真实梯度和单个样本梯度之间的折衷方案是,在每一步对多个训练样本(称为“小批量”)计算梯度。这可以比上述“真正”的随机梯度下降表现更好,因为代码可以利用向量化库而不是分别计算每一步,正如1986年的一篇论文首次展示的那样,该论文将其称为“束模式反向传播算法”。它也可能导致更平滑的收敛,因为每一步计算的梯度在更多训练样本上取平均。
随机梯度下降的收敛性已使用凸最小化和随机近似的理论进行了分析。简而言之,当学习率η以适当速率递减,并且在相对温和的假设下,当目标函数是凸函数或伪凸函数时,随机梯度下降几乎必然收敛到全局最小值,否则几乎必然收敛到局部最小值。这实际上是Robbins–Siegmund定理的一个结果。
线性回归
假设我们想要将一条直线y = w^T x拟合到一组训练样本(x_i, y_i)。目标函数是均方误差:Q(w) = (1/n) Σ (y_i - w^T x_i)^2。单个样本的梯度为∇Q_i(w) = -2 (y_i - w^T x_i) x_i。在随机梯度下降中,更新规则变为w := w + 2η (y_i - w^T x_i) x_i。这等价于最小均方(LMS)算法,也称为Widrow–Hoff规则,由伯纳德·威德罗和Ted Hoff于1960年提出。LMS算法是随机近似的经典例子,已广泛用于自适应信号处理。
机器学习中的应用
随机梯度下降是训练神经网络(包括深度学习模型)的核心优化算法。在现代深度学习中,SGD及其变体用于最小化损失函数,如分类的交叉熵或回归的均方误差。该算法在处理大型数据集方面的效率使其对于在大型语料库(如大型语言模型中使用的语料库)上训练模型至关重要。例如,由雅各布·乌兹科雷特、卢卡斯·凯泽等人在2017年论文《注意力即你所需要》中引入的基于Transformer的模型的训练,依赖于SGD或其自适应变体,如Adam优化器。
SGD还用于人工智能的其他领域,包括计算机视觉、自然语言处理和强化学习。在强化学习中,SGD用于更新策略和值函数参数,如策略梯度方法。该算法的随机性质使其能够在非凸优化问题中逃离局部最小值,这对于训练具有复杂损失景观的深度网络尤为重要。
变体与改进
已经开发了几种随机梯度下降的变体,以改善收敛性和稳定性。一个常见的改进是使用动量,它累积速度向量以在一致方向上加速梯度并抑制振荡。另一种是Nesterov加速梯度,它在前瞻位置计算梯度。自适应学习率方法,如Adam优化器,基于梯度的一阶和二阶矩估计,为每个参数调整学习率。这些方法在实践中广泛使用,通常被视为训练神经网络的默认优化器。
其他相关技术包括学习率调度,它随时间调整学习率,以及梯度裁剪,它通过缩放大梯度来防止梯度爆炸。批量归一化和层归一化通常与SGD结合使用,以稳定训练并允许更高的学习率。此外,权重初始化策略,如Xavier或He初始化,对于有效的SGD训练至关重要。
挑战与考虑
随机梯度下降的主要挑战之一是学习率的选择。如果学习率过高,算法可能发散;如果过低,收敛可能缓慢。在实践中,使用学习率调度或自适应方法来缓解此问题。另一个挑战是使用数据子集引入的噪声,这可能导致损失波动。然而,这种噪声也可能是有益的,因为它可能帮助算法逃离尖锐的最小值,并找到泛化更好的平坦最小值。
SGD对特征的缩放敏感,因此通常建议进行特征归一化。小批量大小的选择也影响性能:较小的批量引入更多噪声但需要更少内存,而较大的批量提供更平滑的梯度但可能导致更差的泛化。在分布式训练中,SGD可以使用同步或异步更新等技术进行并行化,如TensorFlow和PyTorch等框架中实现的那样。
历史背景
随机梯度下降的根源可以追溯到Robbins–Monro算法,由Herbert Robbins和Sutton Monro于1951年开发,该算法引入了用于求根的随机近似思想。在20世纪60年代,伯纳德·威德罗和Ted Hoff的LMS算法将类似原理应用于自适应滤波。与神经网络训练的联系在20世纪80年代随着反向传播的普及而建立。1986年,David Rumelhart、Geoffrey Hinton和Ronald Williams发表了一篇论文,展示了带有SGD的反向传播在学习内部表示方面的有效性。此后,SGD已成为机器学习的基石,推动了图像识别、语音识别和自然语言处理等领域的突破。
在2010年代,深度学习的兴起以及大型数据集和强大硬件(如来自英伟达和AMD的GPU)的可用性加速了SGD的采用。斯坦福人工智能实验室、伯克利人工智能研究和多伦多大学等研究机构为理论和实践进展做出了贡献。如今,SGD仍然是一个活跃的研究领域,持续致力于理解其泛化性质并开发新变体。