一、起点:随机梯度下降(SGD)

  • 核心逻辑:每次迭代随机抽取小批量数据计算梯度,沿负梯度方向更新参数。
  • 参数更新:θt+1=θt−η⋅∇θJ(θt)\theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta J(\theta_t)θt+1​=θt​−η⋅∇θ​J(θt​)
  • 缺点:
    • 步长“一刀切”:所有参数共用一个学习率η\etaη。
    • 震荡与停滞:在损失函数“山谷”区域(梯度过大)容易来回震荡;在平坦区域(梯度极小)更新极慢。
    • 易陷局部最优:缺乏惯性,容易被卡住。

二、解决方向问题:动量法(Momentum)

  • 核心思想:模拟物理惯性。利用历史梯度的加权平均(动量)来加速收敛,抑制震荡。
  • 速度更新:vt=γvt−1+η⋅∇θJ(θt)v_t = \gamma v_{t-1} + \eta \cdot \nabla_\theta J(\theta_t)vt​=γvt−1​+η⋅∇θ​J(θt​)
  • 参数更新:θt+1=θt−vt\theta_{t+1} = \theta_t - v_tθt+1​=θt​−vt​
  • 作用:
    • 加速:在平坦但持续向下的方向上,速度不断叠加。
    • 去噪:在左右震荡的方向上,正负梯度互相抵消,路径变平滑。

三、解决步长问题:自适应学习率(AdaGrad & RMSProp)

AdaGrad(初代自适应)

  • 机制:累积所有历史梯度的平方。梯度大的参数学习率衰减快,梯度小的参数学习率衰减慢。
  • 速度更新:vt=vt−1+(∇θJ(θt))2v_t = v_{t-1} + (\nabla_\theta J(\theta_t))^2vt​=vt−1​+(∇θ​J(θt​))2
  • 参数更新:θt+1=θt−ηvt+ϵ⋅∇θJ(θt)\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{v_t} + \epsilon} \cdot \nabla_\theta J(\theta_t)θt+1​=θt​−vt​​+ϵη​⋅∇θ​J(θt​)
  • 缺点:累积项单调递增,导致学习率最终衰减为0,训练过早停止。

RMSProp(改进版)

  • 核心思想:只保留最近一段时间的梯度平方信息(指数加权移动平均),解决AdaGrad学习率衰减过快的问题。
  • 速度更新:vt=β⋅vt−1+(1−β)⋅(∇θJ(θt))2v_t = \beta \cdot v_{t-1} + (1 - \beta) \cdot (\nabla_\theta J(\theta_t))^2vt​=β⋅vt−1​+(1−β)⋅(∇θ​J(θt​))2
  • 参数更新:θt+1=θt−ηvt+ϵ⋅∇θJ(θt)\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{v_t} + \epsilon} \cdot \nabla_\theta J(\theta_t)θt+1​=θt​−vt​​+ϵη​⋅∇θ​J(θt​)
  • 效果:根据梯度的波动自动调节步长(波动大则步长小,波动小则步长大)。

四、集大成者:Adam(自适应矩估计)

Adam = Momentum(一阶矩) + RMSProp(二阶矩) + 偏差修正。

完整算法流程

  1. 计算梯度:gt=∇θJ(θt)g_t = \nabla_\theta J(\theta_t)gt​=∇θ​J(θt​)
  2. 更新一阶矩(动量/方向):mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1 - \beta_1) g_tmt​=β1​mt−1​+(1−β1​)gt​
  3. 更新二阶矩(自适应/步长):vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2vt​=β2​vt−1​+(1−β2​)gt2​
  4. 偏差修正(关键步骤):
    • 解决初始化m0=0,v0=0m_0=0, v_0=0m0​=0,v0​=0导致的初期估计偏向0的问题。
    • 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−β1t​mt​​,v^t​=1−β2t​vt​​
  5. 参数更新:θt+1=θt−η⋅m^tv^t+ϵ\theta_{t+1} = \theta_t - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}θt+1​=θt​−η⋅v^t​​+ϵm^t​​

五、细节澄清

Adam每步更新的量纲

  • 在Adam的更新项m^tv^t\frac{\hat{m}_t}{\sqrt{\hat{v}_t}}v^t​​m^t​​中:
    • 分子m^t\hat{m}_tm^t​量纲为ggg(梯度)。
    • 分母v^t\sqrt{\hat{v}_t}v^t​​量纲为g2=g\sqrt{g^2}=gg2​=g。
  • 结论:两者相除,量纲抵消,变为无量纲数值。这意味着Adam的更新步长不再受梯度绝对数值大小的束缚,而是取决于梯度的“信噪比”和一致性。

方向的“去噪”

  • mtm_tmt​不仅仅是保留方向,更是一个低通滤波器。
  • 震荡方向:正负梯度交替,在累加中相互抵消(平均化)。
  • 一致方向:持续同向,在累加中不断增强。

Adam前期训练偏差修正的“热车”作用

  • 现象:训练初期ttt较小时,mtm_tmt​和vtv_tvt​严重偏向0(冷启动)。
  • 后果:若不修正,初期更新步长极小,导致训练停滞。
  • 修正:除以(1−βt)(1-\beta^t)(1−βt)相当于在初期强行放大数值,还原梯度的真实统计特性,确保第一步就能有效更新。
六、总结与选择建议
优化器核心特点适用场景
SGD基础,无自适应,易震荡简单任务,或需精细调参追求极致泛化能力时
SGD+Momentum增加惯性,减少震荡图像分类等常规任务,比纯SGD收敛更快
Adam动量+自适应,收敛快,鲁棒性强绝大多数深度学习任务(NLP, CV),默认首选

一句话总结:SGD负责“走”,Momentum负责“冲”,RMSProp负责“稳”,而Adam则是“又快又稳”的智能导航。

更多推荐