深度学习优化器详解

深度学习优化器详解

第一阶段:基础优化器

1.1 动量优化器

动量优化器 - Momentum Optimizer - 无标准缩写 - /moʊˈmɛntəm ˈɒptɪmaɪzər/

直观理解:下坡的保龄球

想象一个保龄球从山坡滚下:

  • 普通梯度下降:像一个人小心翼翼下山
  • 动量法:像保龄球,有惯性,越滚越快
数学本质

核心思想:累积历史梯度信息

vt=γvt−1+η∇J(θt)θt+1=θt−vt \begin{aligned} v_t &= \gamma v_{t-1} + \eta \nabla J(\theta_t) \\ \theta_{t+1} &= \theta_t - v_t \end{aligned} vtθt+1=γvt−1+η∇J(θt)=θt−vt

其中:

  • vtv_tvt:当前速度(动量项)
  • γ\gammaγ:动量系数,通常 γ=0.9\gamma = 0.9γ=0.9
  • η\etaη:学习率
  • ∇J(θt)\nabla J(\theta_t)∇J(θt):当前梯度
优劣对比

优点

  • 加速收敛
  • 减少震荡
  • 有助于跳出局部最优

缺点

  • 可能越过全局最优
  • 需要调节动量系数

1.2 Nesterov加速梯度

Nesterov加速梯度 - Nesterov Accelerated Gradient - NAG - /ˈnɛstərɒv ækˈsɛləreɪtɪd ˈɡreɪdiənt/

直观理解:有预见的保龄球

球在滚动时会"向前看",根据前方地形调整方向

数学本质

前瞻性更新

vt=γvt−1+η∇J(θt−γvt−1)θt+1=θt−vt \begin{aligned} v_t &= \gamma v_{t-1} + \eta \nabla J(\theta_t - \gamma v_{t-1}) \\ \theta_{t+1} &= \theta_t - v_t \end{aligned} vtθt+1=γvt−1+η∇J(θt−γvt−1)=θt−vt

关键区别:梯度计算在 θt−γvt−1\theta_t - \gamma v_{t-1}θt−γvt−1(向前看的位置)

优劣对比

优点

  • 比标准动量收敛更快
  • 对凸函数有更好的理论保证
  • 减少震荡

缺点

  • 实现稍复杂
  • 计算成本略高

第二阶段:自适应学习率优化器

2.1 Adagrad

Adagrad - Adaptive Gradient Algorithm - 无缩写 - /ˈædəɡræd/

直观理解:个性化学习

为每个参数定制学习率:

  • 频繁更新的参数:小学习率(精细调整)
  • 不频繁更新的参数:大学习率(快速跟进)
数学本质

累积梯度平方

Gt=Gt−1+(∇J(θt))2θt+1=θt−ηGt+ϵ⋅∇J(θt) \begin{aligned} G_t &= G_{t-1} + (\nabla J(\theta_t))^2 \\ \theta_{t+1} &= \theta_t - \frac{\eta}{\sqrt{G_t} + \epsilon} \cdot \nabla J(\theta_t) \end{aligned} Gtθt+1=Gt−1+(∇J(θt))2=θt−Gt +ϵη⋅∇J(θt)

其中:

  • GtG_tGt:梯度平方累积
  • ϵ\epsilonϵ:小常数(通常 10−810^{-8}10−8)防止除零
优劣对比

优点

  • 适合稀疏数据
  • 自动调整学习率
  • 对特征频率敏感

缺点

  • 学习率单调递减 → 最终停止学习
  • 对深度网络效果不佳

2.2 Adadelta

Adadelta - Adaptive Delta - 无缩写 - /ə'dædeltə/

直观理解:自我调节的Adagrad

解决Adagrad学习率消失问题,不需要手动设置学习率

数学本质

滑动平均 + 自适应步长

E[g2]t=ρE[g2]t−1+(1−ρ)(∇J(θt))2Δθt=−E[Δθ2]t−1+ϵE[g2]t+ϵ∇J(θt)θt+1=θt+ΔθtE[Δθ2]t=ρE[Δθ2]t−1+(1−ρ)(Δθt)2 \begin{aligned} E[g^2]t &= \rho E[g^2]{t-1} + (1-\rho) (\nabla J(\theta_t))^2 \\ \Delta\theta_t &= - \frac{\sqrt{E[\Delta\theta^2]_{t-1} + \epsilon}}{\sqrt{E[g^2]t + \epsilon}} \nabla J(\theta_t) \\ \theta{t+1} &= \theta_t + \Delta\theta_t \\ E[\Delta\theta^2]t &= \rho E[\Delta\theta^2]{t-1} + (1-\rho) (\Delta\theta_t)^2 \end{aligned} E[g2]tΔθtθt+1E[Δθ2]t=ρE[g2]t−1+(1−ρ)(∇J(θt))2=−E[g2]t+ϵ E[Δθ2]t−1+ϵ ∇J(θt)=θt+Δθt=ρE[Δθ2]t−1+(1−ρ)(Δθt)2

优劣对比

优点

  • 无需设置学习率
  • 解决Adagrad学习率消失问题
  • 对初始学习率不敏感

缺点

  • 早期训练可能不稳定
  • 超参数 ρ\rhoρ 需要调节

2.3 RMSProp

RMSProp - Root Mean Square Propagation - 无缩写 - /ɑːr em es prɒp/

直观理解:Adagrad的改进版

使用指数移动平均代替累积求和。通过引入一个衰减系数,让每回合都衰减一定的比例。

数学本质

梯度平方的指数平均

E[g2]t=γE[g2]t−1+(1−γ)(∇J(θt))2θt+1=θt−ηE[g2]t+ϵ∇J(θt) \begin{aligned} E[g^2]t &= \gamma E[g^2]{t-1} + (1-\gamma) (\nabla J(\theta_t))^2 \\ \theta_{t+1} &= \theta_t - \frac{\eta}{\sqrt{E[g^2]_t} + \epsilon} \nabla J(\theta_t) \end{aligned} E[g2]tθt+1=γE[g2]t−1+(1−γ)(∇J(θt))2=θt−E[g2]t +ϵη∇J(θt)

优劣对比

优点

  • 解决Adagrad学习率衰减问题
  • 在非平稳目标上表现良好
  • 适合RNN训练

缺点

  • 仍然需要设置学习率
  • 学习率可能仍然衰减过快

第三阶段:组合优化器

3.1 Adam

Adam - Adaptive Moment Estimation - 无缩写 - /ˈædəm/

直观理解:动量 + RMSProp

结合了一阶矩估计(动量)和二阶矩估计(自适应学习率)

数学本质

动量 + 自适应学习率

mt=β1mt−1+(1−β1)∇J(θt)vt=β2vt−1+(1−β2)(∇J(θt))2m^t=mt1−β1tv^t=vt1−β2tθt+1=θt−ηv^t+ϵm^t \begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) \nabla J(\theta_t) \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2) (\nabla J(\theta_t))^2 \\ \hat{m}_t &= \frac{m_t}{1-\beta_1^t} \\ \hat{v}t &= \frac{v_t}{1-\beta_2^t} \\ \theta{t+1} &= \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t \end{aligned} mtvtm^tv^tθt+1=β1mt−1+(1−β1)∇J(θt)=β2vt−1+(1−β2)(∇J(θt))2=1−β1tmt=1−β2tvt=θt−v^t +ϵηm^t

默认参数:β1=0.9\beta_1=0.9β1=0.9, β2=0.999\beta_2=0.999β2=0.999, ϵ=10−8\epsilon=10^{-8}ϵ=10−8

优劣对比

优点

  • 收敛快速稳定
  • 对超参数相对鲁棒
  • 适合大多数深度学习任务

缺点

  • 可能在某些任务上泛化不如SGD
  • 内存占用较大

3.2 AdaMax

AdaMax - Adaptive Moment Estimation with Infinity Norm - 无缩写 - /ˈeɪdəmæks/

直观理解:Adam的无穷范数版本

使用 L∞L_\inftyL∞ 范数代替 L2L_2L2 范数

数学本质

基于无穷范数的自适应

mt=β1mt−1+(1−β1)∇J(θt)ut=max⁡(β2ut−1,∣∇J(θt)∣)m^t=mt1−β1tθt+1=θt−ηutm^t \begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) \nabla J(\theta_t) \\ u_t &= \max(\beta_2 u_{t-1}, |\nabla J(\theta_t)|) \\ \hat{m}t &= \frac{m_t}{1-\beta_1^t} \\ \theta{t+1} &= \theta_t - \frac{\eta}{u_t} \hat{m}_t \end{aligned} mtutm^tθt+1=β1mt−1+(1−β1)∇J(θt)=max(β2ut−1,∣∇J(θt)∣)=1−β1tmt=θt−utηm^t

优劣对比

优点

  • 数值稳定性更好
  • 在某些任务上比Adam更稳定
  • 理论性质更优雅

缺点

  • 实践中不一定优于Adam
  • 较少被采用

3.3 Nadam

Nadam - Nesterov-accelerated Adaptive Moment Estimation - 无缩写 - /ˈnædəm/

直观理解:Adam + Nesterov动量

结合了Adam的自适应学习率和Nesterov的前瞻性

数学本质

Nesterov动量的Adam

mt=β1mt−1+(1−β1)∇J(θt)vt=β2vt−1+(1−β2)(∇J(θt))2m^t=mt1−β1t+(1−β1)∇J(θt)1−β1tv^t=vt1−β2tθt+1=θt−ηv^t+ϵm^t \begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) \nabla J(\theta_t) \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2) (\nabla J(\theta_t))^2 \\ \hat{m}_t &= \frac{m_t}{1-\beta_1^t} + \frac{(1-\beta_1) \nabla J(\theta_t)}{1-\beta_1^t} \\ \hat{v}t &= \frac{v_t}{1-\beta_2^t} \\ \theta{t+1} &= \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t \end{aligned} mtvtm^tv^tθt+1=β1mt−1+(1−β1)∇J(θt)=β2vt−1+(1−β2)(∇J(θt))2=1−β1tmt+1−β1t(1−β1)∇J(θt)=1−β2tvt=θt−v^t +ϵηm^t

优劣对比

优点

  • 结合Nesterov和Adam的优点
  • 通常比Adam收敛更快
  • 对某些问题有更好的理论保证

缺点

  • 实现更复杂
  • 超参数调节更敏感

第四阶段:总结对比与实战应用

4.1 优化器对比总结

优化器 中文名 核心思想 优点 缺点 适用场景
Momentum 动量优化器 惯性加速 减少震荡,加速收敛 可能越过最优 一般优化问题
NAG Nesterov加速梯度 前瞻性动量 收敛更快,更稳定 实现复杂 理论要求高的问题
Adagrad 自适应梯度 个性化学习率 适合稀疏数据 学习率消失 稀疏特征学习
Adadelta Adadelta 自适应步长 无需学习率 早期不稳定 自动调节需求
RMSProp RMSProp 指数平均梯度 解决学习率消失 仍需学习率 RNN,非平稳目标
Adam Adam 动量+自适应 快速稳定,鲁棒 泛化可能稍差 深度学习默认
AdaMax AdaMax 无穷范数Adam 数值稳定 不常用 特定理论需求
Nadam Nadam Nesterov+Adam 收敛最快 超参数敏感 追求极致性能

4.2 实战应用指南

超参数默认值
python 复制代码
# 常用优化器配置
optimizers = {
    'SGD': {'lr': 0.01, 'momentum': 0.9},
    'Adam': {'lr': 0.001, 'betas': (0.9, 0.999)},
    'RMSprop': {'lr': 0.001, 'alpha': 0.9},
    'Adagrad': {'lr': 0.01},
    'Adadelta': {'rho': 0.95}
}
选择策略
  1. 默认选择:Adam(大多数深度学习任务)
  2. 计算机视觉:SGD + Momentum(可能获得更好泛化)
  3. 自然语言处理:Adam或AdamW(带权重衰减)
  4. 强化学习:RMSProp或Adam
  5. 稀疏数据:Adagrad或FTRL
学习率调度配合
python 复制代码
# 结合学习率调度器
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)

4.3 现代最佳实践

  1. AdamW:Adam + 正确的权重衰减
  2. Lookahead:包装任何优化器提升稳定性
  3. RAdam:Rectified Adam,解决早期方差问题
  4. LAMB:Layer-wise Adaptive Moments,适合大batch训练

总结

通过从直观理解到数学本质的递进讲解,我们掌握了:

  • 基础优化器:Momentum、NAG - 解决梯度下降的震荡问题
  • 自适应优化器:Adagrad、Adadelta、RMSProp - 自动调整学习率
  • 组合优化器:Adam、AdaMax、Nadam - 结合动量和自适应学习率

实践建议

  • 从Adam开始,它适合大多数深度学习任务
  • 如果需要更好泛化,尝试SGD + Momentum
  • 始终配合适当的学习率调度
  • 监控训练过程,根据任务特性调整优化器

理解这些优化器的原理和特性,能够帮助我们在实际项目中做出更明智的选择和调优。

相关推荐
CoovallyAIHub3 小时前
智能“下沉”:边缘AI,更低功耗、更快响应、更强隐私,YOLO26只是开始
深度学习·算法·计算机视觉
草明3 小时前
HBM = High Bandwidth Memory(高带宽显存)
人工智能
whaosoft-1433 小时前
51c大模型~合集33
人工智能
johnny2333 小时前
ASR+TTS
人工智能
CoovallyAIHub3 小时前
2025目标检测模型全景图:从RF-DETR到YOLOv12,谁主沉浮?
深度学习·算法·计算机视觉
sight-ai3 小时前
OpenRouter vs. SightAI:统一入口,还是统一“智能体验”?
人工智能·开源·大模型·api
道可云4 小时前
政务AI大模型落地:聚焦四大场景,提升服务效率
人工智能·政务
机器之心4 小时前
刚刚,Thinking Machines Lab博客提出在策略蒸馏,Qwen被cue 38次
人工智能·openai
lzptouch4 小时前
蚁群(Ant Colony Optimization, ACO)算法
人工智能·算法·机器学习