概述

Adam算法结合了动量法(Momentum)RMSProp的思想,能够自适应调整每个参数的学习率。通过动态调整每个参数的学习率,在非平稳目标(如深度神经网络的损失函数)中表现优异

目录

  1. 基本原理和公式
  2. 笼统说明:为什么Adam算法可以帮助模型找到更好的参数

基本概念

  • 动量(Momentum):跟踪梯度的指数衰减平均(一阶矩),加速收敛并减少震荡。
  • 自适应学习率:跟踪梯度平方的指数衰减平均(二阶矩),调整不同参数的学习率。
    设模型参数为 θ\thetaθ,损失函数为 J(θ)J(\theta)J(θ),梯度为 gt=∇θJ(θt)g_t = \nabla_\theta J(\theta_t)gt=θJ(θt)。Adam 的更新步骤如下:

步骤 1:计算一阶矩(动量)

mt=β1⋅mt−1+(1−β1)⋅gt m_t = \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t mt=β1mt1+(1β1)gt

  • 含义:对梯度做指数移动平均(EMA),保留历史梯度方向的信息。
  • 作用:缓解梯度震荡,加速收敛(类似物理中的动量)。
  • 超参数β1\beta_1β1(通常设为 0.9),控制历史梯度的衰减速度。

步骤 2:计算二阶矩(自适应学习率)

vt=β2⋅vt−1+(1−β2)⋅gt2 v_t = \beta_2 \cdot v_{t-1} + (1 - \beta_2) \cdot g_t^2 vt=β2vt1+(1β2)gt2

  • 含义:对梯度平方做指数移动平均,反映梯度的变化幅度。
  • 作用:对频繁更新的参数减小学习率,对稀疏参数增大学习率。
  • 超参数β2\beta_2β2(通常设为 0.999),控制梯度平方的衰减速度。

步骤 3:偏差修正(Bias Correction)

由于初始时刻 m0=0,v0=0m_0 = 0, v_0 = 0m0=0,v0=0,早期估计会偏向于零。Adam 通过以下修正消除偏差:
m^t=mt1−β1t,v^t=vt1−β2t \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} m^t=1β1tmt,v^t=1β2tvt

  • 含义:随着时间步 (t) 增大,分母 1−βt1 - \beta^t1βt逐渐趋近于 1,修正早期估计的偏差。
  • 作用:确保训练初期(ttt 较小时)的更新量不会过小。

步骤 4:参数更新

θt+1=θt−α⋅m^tv^t+ϵ \theta_{t+1} = \theta_t - \alpha \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θt+1=θtαv^t +ϵm^t

  • 含义:用修正后的动量 m^t\hat{m}_tm^t除以修正后的梯度平方根v^t\sqrt{\hat{v}_t}v^t ,再乘以学习率 α\alphaα
  • 作用
    • m^t\hat{m}_tm^t:提供稳定的更新方向(类似动量)。
    • 1v^t+ϵ\frac{1}{\sqrt{\hat{v}_t} + \epsilon}v^t +ϵ1:自适应调整学习率,抑制梯度变化大的参数的学习率。
  • 超参数
    • α\alphaα:基础学习率(通常需手动调节)。
    • ϵ\epsilonϵ:极小值(如 10−810^{-8}108),防止除以零。

为什么 Adam 能帮助模型找到更好的参数?

Adam 的有效性源于以下设计:

1. 自适应学习率
  • 对每个参数独立调整学习率:梯度大的参数学习率小,梯度小的参数学习率大。
  • 优势:处理稀疏梯度(如 NLP 任务)时效果显著,避免手动调节学习率的麻烦。
2. 动量机制
  • 通过一阶矩 mtm_tmt 保留历史梯度方向,加速收敛并减少震荡。
  • 优势:在梯度方向变化剧烈时(如鞍点附近),动量帮助参数快速通过平缓区域。
3. 偏差修正
  • 修正早期估计的偏差,避免训练初期更新量过小。
  • 优势:提升训练稳定性,尤其在前几个 epoch 中。
4. 鲁棒性
  • 对超参数选择相对鲁棒(如 β1,β2\beta_1, \beta_2β1,β2通常固定为 0.9 和 0.999)。
  • 优势:广泛适用于不同任务(CV、NLP 等),减少调参成本。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐