随机梯度下降(常缩写为SGD)是一种迭代方法,用于优化具有适当光滑性(如可微性或次可微性)的目标函数。它可以被视为梯度下降优化的随机近似,因为它用从随机选择的数据子集计算出的估计值替代了从整个数据集计算出的实际梯度。特别是在高维优化问题中,这降低了非常高的计算负担,以较低的收敛速度为代价实现更快的迭代。
随机近似的基本思想可以追溯到20世纪50年代的Robbins–Monro算法。如今,随机梯度下降已成为机器学习中的重要优化方法,特别是用于训练神经网络和其他深度学习模型。
背景
统计估计和机器学习都考虑最小化具有求和形式的目标函数的问题:Q(w) = (1/n) Σᵢ Qᵢ(w),其中需要估计使Q(w)最小化的参数w。每个求和函数Qᵢ通常与训练数据集中的第i个观测值相关联。
在经典统计学中,求和最小化问题出现在最小二乘法和独立观测的最大似然估计中。作为求和最小化器而出现的一般估计量类别称为M估计量。然而,长期以来人们认识到,对于某些最大似然问题,要求甚至局部最小化也过于严格,因此当代统计理论家通常考虑似然函数的驻点或其导数(即得分函数)的零点。
求和最小化问题也出现在经验风险最小化中。在那里,Qᵢ(w)是第i个样本处的损失函数值,而Q(w)是经验风险。
当用于最小化上述函数时,标准(或“批量”)梯度下降方法将执行以下形式的迭代:w := w - η ∇Q(w) = w - (η/n) Σᵢ ∇Qᵢ(w)。步长η在机器学习中有时称为学习率。在许多情况下,求和函数具有简单形式,使得求和函数和求和梯度的评估成本低廉,例如在单参数指数族中。然而,当训练集庞大且不存在简单公式时,评估梯度求和变得非常昂贵,因为它需要评估所有求和函数的梯度。为了节省计算成本,随机梯度下降在每一步对求和函数的子集进行采样,这在大规模机器学习问题中非常有效。
迭代方法
在随机(或“在线”)梯度下降中,Q(w)的真实梯度由单个样本处的梯度近似:w := w - η ∇Qᵢ(w)。当算法遍历训练集时,它对每个训练样本执行上述更新。可以对训练集进行多次遍历,直到算法收敛。如果这样做,可以在每次遍历时对数据进行洗牌以防止循环。典型实现可能使用自适应学习率以使算法收敛。
在伪代码中,随机梯度下降可以表示为:
- 初始化参数w和学习率η。
- 重复直到收敛:
- 洗牌训练数据。
- 对于每个训练样本i:
- 计算梯度∇Qᵢ(w)。
- 更新w := w - η ∇Qᵢ(w)。
计算真实梯度和单个样本梯度之间的折衷方案是,在每一步针对多个训练样本(称为“小批量”)计算梯度。这可以比真正的随机梯度下降表现更好,因为代码可以利用向量化库而不是分别计算每一步,正如在反向传播背景下首次展示的那样。它也可能导致更平滑的收敛,因为每一步计算的梯度是对更多训练样本的平均。
随机梯度下降的收敛性已使用凸最小化和随机近似理论进行了分析。简而言之,当学习率以适当速率递减并满足相对温和的假设时,随机梯度下降在目标函数为凸或伪凸时几乎必然收敛到全局最小值,否则几乎必然收敛到局部最小值。这是Robbins–Siegmund定理的结果。
线性回归
假设我们想要将一条直线ŷ = w·x拟合到一组训练样本(xᵢ, yᵢ)。一个常见的目标是最小化均方误差:Q(w) = (1/n) Σᵢ (ŷᵢ - yᵢ)²。单个样本的梯度为∇Qᵢ(w) = 2(ŷᵢ - yᵢ)xᵢ。在随机梯度下降中,更新变为w := w - η(ŷᵢ - yᵢ)xᵢ。这个简单示例说明了SGD如何一次使用一个样本,使其在大型数据集上计算高效。
在机器学习中的应用
随机梯度下降是训练许多机器学习模型的核心优化算法,包括深度学习模型,如Transformer和大型语言模型。它用于训练神经网络,用于图像识别、自然语言处理和生成式AI等任务。诸如Adam和其他SGD变体已被开发出来以改善收敛性和稳定性。学习率调度的选择对于有效训练至关重要。
挑战与扩展
SGD面临诸如选择合适的学习率、处理噪声梯度以及避免不良局部最小值等挑战。扩展包括动量、自适应学习率(例如Adam),以及诸如梯度裁剪等技术以防止梯度爆炸。在深度学习中,诸如批量归一化和丢弃等方法通常与SGD结合使用以改善训练。
历史背景
20世纪50年代的Robbins–Monro算法为随机近似奠定了基础。在20世纪80年代和90年代,SGD在神经网络训练中变得流行,特别是在反向传播中。如今,它仍然是人工智能研究和行业中的基本工具,被主要AI实验室和公司使用。