神经网络优化器详解:从 SGD、Momentum 到 Adam 的优化算法演进

系统梳理神经网络中的优化算法,从 SGD、Momentum、AdaGrad 到 Adam,解析各优化器的参数更新公式、自适应学习率机制与适用场景。

1. SGD 1951

随机梯度下降(Stochastic Gradient Descent,SGD)是一种用于优化可微分目标函数的迭代方法,它是梯度下降优化的随机近似。SGD的提出可以追溯到1951年,由Herbert Robbins和Sutton Monro在他们的论文《A Stochastic Approximation Method》中首次描述了随机近似方法,这可以看作是SGD的前身。随后,J. Kiefer和J. Wolfowitz在1952年发表了论文《Stochastic Estimation of the Maximum of a Regression Function》,这篇论文更接近于机器学习领域中SGD的现代理解。

SGD算法的原理

随机梯度下降(SGD)的更新公式是梯度下降法的一种变体,它用于优化目标函数,特别是在处理大规模数据集时。SGD 在每次迭代中只使用一个或一小批样本来计算梯度,然后更新模型参数。这样做可以减少每次迭代的计算成本,并有助于算法逃离局部最小值。

SGD 的参数更新公式如下:

$$
\theta_{t+1} = \theta_t - \eta_t \nabla J(\theta_t; x^{(i)}, y^{(i)})
$$

其中:

  • $\theta_t$ 表示在时间步 $t$ 的模型参数(可以是权重和偏置);
  • $\eta_t$ 表示学习率,用于控制参数更新的步长;
  • $\nabla J(\theta_t; x^{(i)}, y^{(i)})$ 表示损失函数 $J$ 对参数 $\theta_t$ 在样本 ($x^{(i)}, y^{(i)})$ 处的梯度;
  • $\theta_{t+1}$ 是更新后的模型参数。

2. Momentum 1964

动量(Momentum)方法最初由B.T.Polyak在1964年提出。这一方法被用来加速梯度下降算法的收敛,特别是在处理具有较大条件数的优化问题时。B.T.Polyak在论文《Some methods of speeding up the convergence of iteration methods》中描述了这一方法,这篇论文发表在了《USSR Computational Mathematics and Mathematical Physics》上。动量方法通过在每一步的更新中加入一部分上一步的速度,帮助算法在相关方向上加速,并减少在目标函数的平坦区域中的震荡。这种方法后来被广泛应用于机器学习领域,尤其是在深度学习中,成为了优化算法中的一个重要组成部分。

3. ASGD 1992

平均随机梯度下降(Average Stochastic Gradient Descent,ASGD)是一种用于优化可微分目标函数的迭代方法,它是梯度下降优化的随机近似。ASGD的提出可以追溯到1992年,由B.T.Polyak在他的论文《Acceleration of Stochastic Approximation by Averaging》中首次描述了这一方法。ASGD通过对多个随机梯度的平均值进行更新,来减少随机梯度的方差,从而提高优化算法的收敛速度。这种方法在训练深度神经网络时,可以帮助算法更快地收敛到最优解。

4. Rprop 1993

Rprop(Resilient Backpropagation)算法是由Martin Riedmiller和Hermann Braun在1993年提出的。这一算法在论文《A Direct Adaptive Method for Faster Backpropagation Learning: The RPROP Algorithm》中被详细描述,该论文发表在1993年的IEEE国际会议上。Rprop算法通过仅使用梯度的符号来计算更新,而不是梯度的大小,从而动态地为每个权重独立地调整步长。这种方法克服了传统梯度下降算法的一些固有缺点,并且由于其对误差函数行为的局部适应性,使得学习过程更加高效和透明。

5. AdaGrad 2011

AdaGrad(Adaptive Gradient Algorithm)是由 John Duchi, Elad Hazan, 和 Yoram Singer 提出的。这个算法在2011年的论文《Adaptive Subgradient Methods for Online Learning and Stochastic Optimization》中被详细描述,并发表在了《Journal of Machine Learning Research》上。AdaGrad算法的主要特点是为每个参数独立地调整学习率,使得不频繁更新的参数可以获得更大的学习率,而频繁更新的参数则获得较小的学习率。这种自适应调整学习率的方法特别适合处理稀疏数据,因为它能够对稀疏特征给予更多的关注。然而,AdaGrad也有其缺点,主要是在学习过程中累积的平方梯度和会导致学习率变得过小,从而在训练后期几乎停止学习。为了解决这个问题,后续研究者提出了AdaGrad的变种,如AdaDelta和Adam等。

6. AdaDelta 2012

AdaDelta算法是由Matthew D. Zeiler在2012年提出的。这一算法的详细描述和原理可以在论文《ADADELTA: An Adaptive Learning Rate Method》中找到。AdaDelta算法旨在解决AdaGrad算法中学习率单调递减的问题,通过限制累积梯度的窗口大小来调整学习率,使得算法在训练过程中能够自适应地调整每个参数的学习率,而不需要手动设置。这种方法对噪声梯度信息、不同的模型结构、各种数据模式以及超参数选择都表现出了较强的鲁棒性。

7. RMSprop 2012

RMSProp(Root Mean Square Propagation)算法由 Geoffrey Hinton 在他的 Coursera 课程《Neural Networks for Machine Learning》中提出,该课程首次发布于2012年。RMSProp 算法是一种自适应学习率的优化方法,它通过使用梯度的平方的指数移动平均值来调整每个参数的学习率,从而加快学习速度并减少训练过程中的震荡。这种方法特别适合处理非凸优化问题,并且在深度学习中得到了广泛的应用。

8. Adam 2014

Adam(Adaptive Moment Estimation)算法是由Diederik P. Kingma和Jimmy Ba在2014年提出的。这一算法的详细描述和原理可以在论文《Adam: A Method for Stochastic Optimization》中找到,该论文最初是在2014年12月22日提交到arXiv的,并且后来在2015年的ICLR会议上发表。Adam算法结合了AdaGrad算法和RMSProp算法的优点,通过计算梯度的一阶矩估计和二阶矩估计来为不同的参数设计独立的自适应性学习率,从而实现更高效的网络训练。

Adam算法的原理

Adam(Adaptive Moment Estimation)优化器是一种用于深度学习中的自适应学习率优化算法。它结合了AdaGrad算法和RMSprop算法的优点,通过计算梯度的一阶矩估计(均值)和二阶矩估计(未中心化的方差)来调整每个参数的学习率,从而实现自适应学习率。

Adam算法的关键特性包括:

  1. 动量(Momentum):类似于物理中的动量概念,它帮助算法在优化过程中增加稳定性,并减少震荡。
  2. 自适应学习率:Adam为每个参数维护自己的学习率,这使得算法能够更加灵活地适应参数的更新需求。
  3. 偏差修正(Bias Correction):由于算法使用了指数加权移动平均来计算梯度的一阶和二阶矩估计,因此在初始阶段会有偏差。Adam通过偏差修正来调整这一点,使得估计更加准确。

Adam算法的更新规则如下:

  1. 初始化一阶矩估计(动量)$m_t$ 和二阶矩估计(梯度平方的移动平均)$v_t$ 为0,以及时间步长 $t=1$ ;

  2. 在每次迭代中,计算梯度 $g_t$ ;

  3. 更新一阶矩估计 $m_t$ 和二阶矩估计 $v_t$;

    $$
    m_t = \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t
    $$

    $$
    v_t = \beta_2 \cdot v_{t-1} + (1 - \beta_2) \cdot g_t^2
    $$

  4. 计算偏差修正的一阶矩估计 $m^t$ 和二阶矩估计 $v^t$:

    $$
    \hat{m}_t = \frac{m_t}{1 - \beta_1^t}
    $$

    $$
    \hat{v}_t = \frac{v_t}{1 - \beta_2^t}
    $$

  5. 更新参数 $\theta :\theta_t = \theta_{t-1} - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$,其中,$\eta$ 是学习率,$\epsilon$ 是为了数值稳定性而添加的小常数(例如 1e−8 ),$\beta_1$ 和 $\beta_2$ 是超参数,通常分别设为0.9和0.999。

9. Nadam 2016

Nadam(Nesterov-accelerated Adaptive Moment Estimation)算法是由Tim Salimans et al. 在2016年提出的。这一算法结合了Adam算法和Nesterov Accelerated Gradient(NAG)算法的优点,旨在提高优化算法的性能。Nadam算法的详细描述和原理可以在论文《Incorporating Nesterov Momentum into Adam》中找到,该论文最初在2016年提交到arXiv,并且后来在2017年的ICLR会议上发表。

10. AdamW 2017

AdamW算法是由Ilya Loshchilov和Frank Hutter提出的。这一算法的详细描述和原理可以在论文《Decoupled Weight Decay Regularization》中找到,该论文发表于2017年。在论文中,作者指出了传统Adam算法在权重衰减(weight decay)方面的一些问题,并提出了AdamW作为解决方案。AdamW通过将权重衰减从梯度更新中解耦,从而在每次迭代中更有效地应用权重衰减。这种方法在实践中被证明可以提高模型的收敛速度和泛化能力。

AdamW算法的原理

AdamW优化器是在Adam优化器的基础上进行了改进,主要解决了在Adam中使用权重衰减(Weight Decay)时的问题。在标准的Adam优化器中,权重衰减是直接加到梯度上的,但在AdamW中,权重衰减是以不同的方式应用的,它直接作用在参数更新上。

AdamW的更新公式如下:

  1. 初始化一阶矩估计(动量)$m_t$ 和二阶矩估计(梯度平方的移动平均)$v_t$ 为0,以及时间步长 $t=1$ ;

  2. 在每次迭代中,计算梯度 $g_t$ ;

  3. 更新一阶矩估计 $m_t$ 和二阶矩估计 $v_t$;

  4. 计算偏差修正的一阶矩估计 $m^t$ 和二阶矩估计 $v^t$:

    $$
    \hat{m}_t = \frac{m_t}{1 - \beta_1^t}
    $$

    $$
    \hat{v}_t = \frac{v_t}{1 - \beta_2^t}
    $$

  5. 更新参数 $\theta$,这里 $\lambda$ 是权重衰减系数

$$
\theta_t = \theta_{t-1} - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}t} + \epsilon} + \lambda \theta{t-1} \right)
$$

在AdamW中,权重衰减 $\lambda$ 是乘以学习率 $\eta$ 后从参数中减去的,而不是加到梯度上。这种方法被认为可以更好地控制模型的复杂度,防止过拟合,并且在许多情况下可以提高模型的性能。

AdamW算法的主要特点

AdamW(Adam with Weight Decay)是一种流行的优化算法,它在原始的Adam算法基础上进行了改进,特别是在处理权重衰减(Weight Decay)方面。以下是AdamW的优点和缺点:

优点:

  1. 改进的权重衰减处理:AdamW通过将权重衰减应用于参数更新步骤,而不是梯度计算步骤,解决了原始Adam算法在处理权重衰减时的问题。这种方法使得权重衰减的效果更加一致和有效;
  2. 减少过拟合:权重衰减是一种正则化技术,有助于减少模型的过拟合。AdamW通过合理地应用权重衰减,可以提高模型的泛化能力;
  3. 保持动量和自适应学习率的优点:AdamW保留了Adam算法的动量(Momentum)和自适应学习率(AdaGrad)的优点,这有助于加速收敛并适应不同的参数更新需求。

11. RAdam 2019

RAdam(Rectified Adam)是由Liyuan Liu et al. 提出的。这一算法的详细描述和原理可以在论文《On the Variance of the Adaptive Learning Rate and Beyond》中找到,该论文首次发表于2019年,并在2020年的ICLR会议上发表。论文中提出了RAdam算法,通过引入一个修正项来解决自适应学习率在模型训练早期阶段过大的方差问题,从而改善了优化过程的稳定性和鲁棒性。

本文结束 感谢您的阅读
0%