自适应矩估计优化器(Adaptive Moment Estimation, Adam)的原理与梯度更新过程
字数 2701 2025-12-09 21:35:24

自适应矩估计优化器(Adaptive Moment Estimation, Adam)的原理与梯度更新过程

题目描述

Adam(Adaptive Moment Estimation)是一种广泛使用的随机梯度下降优化算法的扩展。它通过计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)的自适应估计,为不同的参数设计独立的自适应学习率。请详细解释Adam优化算法的核心原理,并逐步说明其参数更新过程,包括偏差修正的作用。

解题过程

Adam算法的核心思想是融合了动量(Momentum)RMSProp两种优化算法的优点。动量通过累积过去的梯度来加速在稳定方向的收敛,而RMSProp通过累积过去梯度平方来调整每个参数的学习率,以应对稀疏或噪声较大的梯度。Adam将两者结合,并引入了偏差修正机制。

我们假设需要优化的目标函数为 \(J(\theta)\),其中 \(\theta\) 是模型的参数。在每次迭代 \(t\) 中,算法计算当前参数 \(\theta_t\) 下目标函数关于参数的梯度 \(g_t = \nabla_{\theta} J(\theta_t)\)

Adam的更新过程可以分为以下几个核心步骤:

第一步:初始化参数

算法需要维护两个状态变量,它们与参数 \(\theta\) 的维度相同:

  • 一阶矩估计(梯度均值) \(m_0\):初始化为零向量。
  • 二阶矩估计(梯度方差) \(v_0\):初始化为零向量。

此外,需要设置以下超参数:

  • \(\alpha\):学习率(或步长),通常设为0.001。
  • \(\beta_1\):一阶矩估计的指数衰减率,通常接近1,如0.9。
  • \(\beta_2\):二阶矩估计的指数衰减率,通常更接近1,如0.999。
  • \(\epsilon\):一个极小的常数(如 \(10^{-8}\)),用于防止除零错误。

第二步:迭代更新

在每次迭代 \(t = 1, 2, ...\) 时,执行以下计算:

  1. 计算当前梯度

\[ g_t = \nabla_{\theta} J(\theta_{t-1}) \]

这是基于当前批次(mini-batch)数据计算出的损失函数梯度。

  1. 更新有偏一阶矩估计(动量项)

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

这一步是动量计算。\(m_t\) 是梯度 \(g_t\) 的指数移动平均值(EMA)。\(\beta_1\) 控制了保留多少历史动量,\((1-\beta_1)\) 是当前梯度的权重。在迭代初期,由于 \(m_0 = 0\),这个估计是偏向于0的(即有偏估计)。

  1. 更新有偏二阶矩估计

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

这一步是RMSProp的核心。\(v_t\) 是梯度平方 \(g_t^2\) (按元素平方)的指数移动平均值。它用于估计每个参数维度的梯度方差(或二阶矩)。同理,由于 \(v_0 = 0\),这个初始估计也是有偏的。

注意:这里的平方运算、加法、乘法都是按元素进行的。

第三步:偏差修正

由于 \(m_0\)\(v_0\) 初始化为0,并且在 \(\beta_1, \beta_2\) 接近1的情况下,在最初的迭代步骤中,\(m_t\)\(v_t\) 会非常偏向于0。为了在训练初期获得更准确的估计,Adam引入了偏差修正

  1. 计算一阶矩的偏差修正估计

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

其中 \(\beta_1^t\)\(\beta_1\)\(t\) 次方。当 \(t\) 很小时,分母 \(1 - \beta_1^t\) 也很小,从而将 \(m_t\) 放大,抵消了初始偏差。随着 \(t\) 增大, \(\beta_1^t \to 0\),修正因子 \(\to 1\),修正的影响逐渐消失。

  1. 计算二阶矩的偏差修正估计

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

原理同上。这确保了在训练早期,对梯度方差的估计不会过小。

第四步:更新参数

使用修正后的矩估计来更新模型参数:

\[\theta_t = \theta_{t-1} - \alpha \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \]

  • 分子 \(\hat{m}_t\): 是经过修正的梯度动量估计,提供了带有历史信息的更新方向。
  • 分母 \(\sqrt{\hat{v}_t}\): 是经过修正的梯度平方的均值的平方根。它可以被看作是每个参数维度上梯度大小的一个自适应估计。
    • 对于梯度历史值较大的参数(通常对应频繁更新的特征), \(\sqrt{\hat{v}_t}\) 较大,从而减小其学习率,使得更新更稳定。
    • 对于梯度历史值较小的参数(对应稀疏或不常更新的特征), \(\sqrt{\hat{v}_t}\) 较小,从而增大其有效学习率,使其能更快地更新。
  • \(\epsilon\): 数值稳定项,防止分母为零。
  • 最终,参数沿着 \(\hat{m}_t\) 的方向,以 \(\alpha / (\sqrt{\hat{v}_t} + \epsilon)\) 为自适应的步长进行更新。

算法总结与特点

  1. 自适应学习率:每个参数都有自己根据历史梯度信息调整的学习率。
  2. 动量和自适应尺度结合:结合了动量法加速收敛的优点和RMSProp处理非平稳目标(如噪声梯度、稀疏梯度)的优点。
  3. 偏差修正:修正了迭代初期矩估计的偏差,使得训练初期更新幅度更合理。
  4. 高效实现:通常只需要一阶梯度,内存需求适中,计算效率高。

Adam因其鲁棒性和良好的性能,已成为深度学习训练中默认或首选的优化器之一。理解其每一步的计算,有助于在实际应用中合理调整超参数(如 \(\alpha, \beta_1, \beta_2\))以及诊断优化过程中可能出现的问题。

自适应矩估计优化器(Adaptive Moment Estimation, Adam)的原理与梯度更新过程 题目描述 Adam(Adaptive Moment Estimation)是一种广泛使用的随机梯度下降优化算法的扩展。它通过计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)的自适应估计,为不同的参数设计独立的自适应学习率。请详细解释Adam优化算法的核心原理,并逐步说明其参数更新过程,包括偏差修正的作用。 解题过程 Adam算法的核心思想是融合了 动量(Momentum) 和 RMSProp 两种优化算法的优点。动量通过累积过去的梯度来加速在稳定方向的收敛,而RMSProp通过累积过去梯度平方来调整每个参数的学习率,以应对稀疏或噪声较大的梯度。Adam将两者结合,并引入了偏差修正机制。 我们假设需要优化的目标函数为 \( J(\theta) \),其中 \( \theta \) 是模型的参数。在每次迭代 \( t \) 中,算法计算当前参数 \( \theta_ t \) 下目标函数关于参数的梯度 \( g_ t = \nabla_ {\theta} J(\theta_ t) \)。 Adam的更新过程可以分为以下几个核心步骤: 第一步:初始化参数 算法需要维护两个状态变量,它们与参数 \( \theta \) 的维度相同: 一阶矩估计(梯度均值) \( m_ 0 \):初始化为零向量。 二阶矩估计(梯度方差) \( v_ 0 \):初始化为零向量。 此外,需要设置以下超参数: \( \alpha \):学习率(或步长),通常设为0.001。 \( \beta_ 1 \):一阶矩估计的指数衰减率,通常接近1,如0.9。 \( \beta_ 2 \):二阶矩估计的指数衰减率,通常更接近1,如0.999。 \( \epsilon \):一个极小的常数(如 \( 10^{-8} \)),用于防止除零错误。 第二步:迭代更新 在每次迭代 \( t = 1, 2, ... \) 时,执行以下计算: 计算当前梯度 : \[ g_ t = \nabla_ {\theta} J(\theta_ {t-1}) \] 这是基于当前批次(mini-batch)数据计算出的损失函数梯度。 更新有偏一阶矩估计(动量项) : \[ m_ t = \beta_ 1 \cdot m_ {t-1} + (1 - \beta_ 1) \cdot g_ t \] 这一步是 动量 计算。\( m_ t \) 是梯度 \( g_ t \) 的指数移动平均值(EMA)。\( \beta_ 1 \) 控制了保留多少历史动量,\( (1-\beta_ 1) \) 是当前梯度的权重。在迭代初期,由于 \( m_ 0 = 0 \),这个估计是偏向于0的(即有偏估计)。 更新有偏二阶矩估计 : \[ v_ t = \beta_ 2 \cdot v_ {t-1} + (1 - \beta_ 2) \cdot g_ t^2 \] 这一步是 RMSProp 的核心。\( v_ t \) 是梯度平方 \( g_ t^2 \) (按元素平方)的指数移动平均值。它用于估计每个参数维度的梯度方差(或二阶矩)。同理,由于 \( v_ 0 = 0 \),这个初始估计也是有偏的。 注意:这里的平方运算、加法、乘法都是按元素进行的。 第三步:偏差修正 由于 \( m_ 0 \) 和 \( v_ 0 \) 初始化为0,并且在 \( \beta_ 1, \beta_ 2 \) 接近1的情况下,在最初的迭代步骤中,\( m_ t \) 和 \( v_ t \) 会非常偏向于0。为了在训练初期获得更准确的估计,Adam引入了 偏差修正 。 计算一阶矩的偏差修正估计 : \[ \hat{m}_ t = \frac{m_ t}{1 - \beta_ 1^t} \] 其中 \( \beta_ 1^t \) 是 \( \beta_ 1 \) 的 \( t \) 次方。当 \( t \) 很小时,分母 \( 1 - \beta_ 1^t \) 也很小,从而将 \( m_ t \) 放大,抵消了初始偏差。随着 \( t \) 增大, \( \beta_ 1^t \to 0 \),修正因子 \( \to 1 \),修正的影响逐渐消失。 计算二阶矩的偏差修正估计 : \[ \hat{v}_ t = \frac{v_ t}{1 - \beta_ 2^t} \] 原理同上。这确保了在训练早期,对梯度方差的估计不会过小。 第四步:更新参数 使用修正后的矩估计来更新模型参数: \[ \theta_ t = \theta_ {t-1} - \alpha \cdot \frac{\hat{m}_ t}{\sqrt{\hat{v}_ t} + \epsilon} \] 分子 \( \hat{m}_ t \) : 是经过修正的梯度动量估计,提供了带有历史信息的更新方向。 分母 \( \sqrt{\hat{v}_ t} \) : 是经过修正的梯度平方的均值的平方根。它可以被看作是每个参数维度上梯度大小的一个自适应估计。 对于梯度历史值较大的参数(通常对应频繁更新的特征), \( \sqrt{\hat{v}_ t} \) 较大,从而 减小 其学习率,使得更新更稳定。 对于梯度历史值较小的参数(对应稀疏或不常更新的特征), \( \sqrt{\hat{v}_ t} \) 较小,从而 增大 其有效学习率,使其能更快地更新。 \( \epsilon \): 数值稳定项,防止分母为零。 最终,参数沿着 \( \hat{m}_ t \) 的方向,以 \( \alpha / (\sqrt{\hat{v}_ t} + \epsilon) \) 为自适应的步长进行更新。 算法总结与特点 自适应学习率 :每个参数都有自己根据历史梯度信息调整的学习率。 动量和自适应尺度结合 :结合了动量法加速收敛的优点和RMSProp处理非平稳目标(如噪声梯度、稀疏梯度)的优点。 偏差修正 :修正了迭代初期矩估计的偏差,使得训练初期更新幅度更合理。 高效实现 :通常只需要一阶梯度,内存需求适中,计算效率高。 Adam因其鲁棒性和良好的性能,已成为深度学习训练中默认或首选的优化器之一。理解其每一步的计算,有助于在实际应用中合理调整超参数(如 \( \alpha, \beta_ 1, \beta_ 2 \))以及诊断优化过程中可能出现的问题。