随机梯度下降法
字数 1890 2025-10-30 17:43:44

随机梯度下降法

我们先从最基础的优化问题背景开始。考虑无约束优化问题 min f(x),其中目标函数 f(x) 往往是大量函数之和的形式,例如在机器学习中常见的经验风险最小化问题:f(x) = (1/m) Σ_{i=1}^m L_i(x)。这里 m 是训练样本的总数,L_i(x) 是模型参数为 x 时在第 i 个样本上的损失函数。

第一步:经典梯度下降法
为了求解该问题,最直接的方法是批量梯度下降法。其迭代格式为:
x_{k+1} = x_k - α_k ∇f(x_k) = x_k - α_k * (1/m) Σ_{i=1}^m ∇L_i(x_k)
其中 α_k 是学习率或步长。在每一步迭代中,算法都需要计算整个数据集(m 个样本)上损失函数的平均梯度。当样本总量 m 非常大时(例如数百万甚至上亿),计算一次完整的梯度 ∇f(x_k) 的计算成本(计算量和内存访问)会非常高,导致每次迭代的速度非常慢。

第二步:随机梯度下降法的核心思想
为了解决批量梯度下降法在大规模数据集上的计算瓶颈,随机梯度下降法 被提出。其核心思想是:用目标函数梯度的无偏随机估计来替代真实的、需要遍历全部数据才能计算出的梯度。
具体来说,在每一步迭代 k,我们不是计算所有样本的梯度,而是均匀随机地抽取一个样本索引 i_k(从1到m中随机等概率抽取),然后用这个单一样本的梯度作为真实梯度的估计:
x_{k+1} = x_k - α_k ∇L_{i_k}(x_k)
由于每个样本被抽中的概率是 1/m,我们有 E[∇L_{i_k}(x_k)] = (1/m) Σ_{i=1}^m ∇L_i(x_k) = ∇f(x_k)。这意味着,尽管单个样本的梯度 ∇L_{i_k}(x_k) 可能噪音很大,但它的期望值等于真实梯度,所以它是一个无偏估计。

第三步:方法的性质与优势

  1. 计算效率:SGD 每次迭代的计算成本从 O(m) 降到了 O(1),与数据集大小无关,这使得处理海量数据成为可能。
  2. 收敛行为:与批量梯度下降的平滑、确定性的收敛路径不同,SGD 的收敛路径由于随机噪声的存在而呈现出高度振荡的特点。然而,正是这种振荡特性使其有更大机会跳出局部极小点,在某些非凸优化问题中可能找到更好的解。
  3. 学习率调度:由于梯度估计含有噪声,SGD 通常需要一个递减的学习率序列 {α_k}(例如 α_k = 1/k),以满足随机近似理论中的收敛条件(如 Robbins-Monro 条件)。如果学习率固定不变,算法可能会在最优解附近持续振荡而无法完全收敛。

第四步:实用变种——小批量随机梯度下降法
纯粹的 SGD(每次只用一个样本)由于梯度估计的方差过大,收敛过程可能依然很不稳定。在实践中,最常用的变体是小批量随机梯度下降法
在每次迭代中,我们随机抽取一个小批量(Mini-batch)的样本,其索引集合记为 B_k,批量大小为 |B_k| = b (通常 b 在几十到几百之间)。迭代公式变为:
x_{k+1} = x_k - α_k * (1/b) Σ_{i ∈ B_k} ∇L_i(x_k)
小批量梯度是真实梯度的一个方差更小的无偏估计。它结合了批量梯度下降(稳定性好)和 SGD(计算效率高)的优点,是现代深度学习等领域应用最广泛的优化算法。

第五步:更先进的优化器
为了进一步改善 SGD 的收敛性能,特别是解决病态曲率问题和减缓振荡,研究者发展了许多增强型算法,它们可以看作是 SGD 的“加速”或“智能化”版本:

  1. 动量法:引入一个“速度”变量 v,使其在更新时不仅考虑当前梯度,还积累历史梯度的指数加权平均,这有助于在相关方向上加速并抑制振荡。公式类似于:v_{k+1} = γ v_k + α ∇L_{i_k}(x_k); x_{k+1} = x_k - v_{k+1}。
  2. 自适应学习率方法(如 AdaGrad, RMSprop, Adam):这些方法为每个参数自适应地调整学习率。对于频繁更新的参数,给予较小的学习率;对于不频繁更新的参数,给予较大的学习率。其中最著名的是 Adam,它结合了动量法和自适应学习率的思路,在实践中表现出色且鲁棒。

总结来说,随机梯度下降法通过引入随机性,用计算上廉价但嘈杂的梯度估计替代精确但昂贵的梯度计算,从根本上解决了大规模优化问题的可行性,并由此衍生出一个丰富而重要的随机优化算法家族。

随机梯度下降法 我们先从最基础的优化问题背景开始。考虑无约束优化问题 min f(x),其中目标函数 f(x) 往往是大量函数之和的形式,例如在机器学习中常见的经验风险最小化问题:f(x) = (1/m) Σ_ {i=1}^m L_ i(x)。这里 m 是训练样本的总数,L_ i(x) 是模型参数为 x 时在第 i 个样本上的损失函数。 第一步:经典梯度下降法 为了求解该问题,最直接的方法是 批量梯度下降法 。其迭代格式为: x_ {k+1} = x_ k - α_ k ∇f(x_ k) = x_ k - α_ k * (1/m) Σ_ {i=1}^m ∇L_ i(x_ k) 其中 α_ k 是学习率或步长。在每一步迭代中,算法都需要计算整个数据集(m 个样本)上损失函数的平均梯度。当样本总量 m 非常大时(例如数百万甚至上亿),计算一次完整的梯度 ∇f(x_ k) 的计算成本(计算量和内存访问)会非常高,导致每次迭代的速度非常慢。 第二步:随机梯度下降法的核心思想 为了解决批量梯度下降法在大规模数据集上的计算瓶颈, 随机梯度下降法 被提出。其核心思想是:用目标函数梯度的 无偏随机估计 来替代真实的、需要遍历全部数据才能计算出的梯度。 具体来说,在每一步迭代 k,我们不是计算所有样本的梯度,而是 均匀随机地抽取一个样本索引 i_ k (从1到m中随机等概率抽取),然后用这个单一样本的梯度作为真实梯度的估计: x_ {k+1} = x_ k - α_ k ∇L_ {i_ k}(x_ k) 由于每个样本被抽中的概率是 1/m,我们有 E[ ∇L_ {i_ k}(x_ k)] = (1/m) Σ_ {i=1}^m ∇L_ i(x_ k) = ∇f(x_ k)。这意味着,尽管单个样本的梯度 ∇L_ {i_ k}(x_ k) 可能噪音很大,但它的期望值等于真实梯度,所以它是一个无偏估计。 第三步:方法的性质与优势 计算效率 :SGD 每次迭代的计算成本从 O(m) 降到了 O(1),与数据集大小无关,这使得处理海量数据成为可能。 收敛行为 :与批量梯度下降的平滑、确定性的收敛路径不同,SGD 的收敛路径由于随机噪声的存在而呈现出 高度振荡 的特点。然而,正是这种振荡特性使其有更大机会 跳出局部极小点 ,在某些非凸优化问题中可能找到更好的解。 学习率调度 :由于梯度估计含有噪声,SGD 通常需要一个 递减的学习率序列 {α_ k}(例如 α_ k = 1/k),以满足随机近似理论中的收敛条件(如 Robbins-Monro 条件)。如果学习率固定不变,算法可能会在最优解附近持续振荡而无法完全收敛。 第四步:实用变种——小批量随机梯度下降法 纯粹的 SGD(每次只用一个样本)由于梯度估计的方差过大,收敛过程可能依然很不稳定。在实践中,最常用的变体是 小批量随机梯度下降法 。 在每次迭代中,我们随机抽取一个小批量(Mini-batch)的样本,其索引集合记为 B_ k,批量大小为 |B_ k| = b (通常 b 在几十到几百之间)。迭代公式变为: x_ {k+1} = x_ k - α_ k * (1/b) Σ_ {i ∈ B_ k} ∇L_ i(x_ k) 小批量梯度是真实梯度的一个方差更小的无偏估计。它结合了批量梯度下降(稳定性好)和 SGD(计算效率高)的优点,是现代深度学习等领域应用最广泛的优化算法。 第五步:更先进的优化器 为了进一步改善 SGD 的收敛性能,特别是解决病态曲率问题和减缓振荡,研究者发展了许多增强型算法,它们可以看作是 SGD 的“加速”或“智能化”版本: 动量法 :引入一个“速度”变量 v,使其在更新时不仅考虑当前梯度,还积累历史梯度的指数加权平均,这有助于在相关方向上加速并抑制振荡。公式类似于:v_ {k+1} = γ v_ k + α ∇L_ {i_ k}(x_ k); x_ {k+1} = x_ k - v_ {k+1}。 自适应学习率方法 (如 AdaGrad, RMSprop, Adam):这些方法为每个参数自适应地调整学习率。对于频繁更新的参数,给予较小的学习率;对于不频繁更新的参数,给予较大的学习率。其中最著名的是 Adam ,它结合了动量法和自适应学习率的思路,在实践中表现出色且鲁棒。 总结来说,随机梯度下降法通过引入随机性,用计算上廉价但嘈杂的梯度估计替代精确但昂贵的梯度计算,从根本上解决了大规模优化问题的可行性,并由此衍生出一个丰富而重要的随机优化算法家族。