深度学习——常见优化器

常见优化器

内容

一、基础梯度下降法

优化器 核心公式 特点 适用场景
SGD θ = θ - η·∇θ J(θ) 简单,但学习率固定,易陷入局部最优 小数据集、简单模型
Batch GD 同SGD,但使用全量数据计算梯度 梯度稳定,但计算开销大 小型数据集
Mini-Batch GD 同SGD,但基于小批量数据计算梯度 平衡计算效率与梯度稳定性 绝大多数场景( 默认选择 )

二、自适应学习率优化器

优化器 核心思想 关键改进点 优点 缺点
Adagrad 根据参数历史梯度调整学习率 η/(√(G_t) + ε) 适合稀疏数据 学习率过早衰减
RMSprop 引入梯度平方的指数衰减平均 E[g²]_t = ρE[g²]_{t-1} + (1-ρ)g_t² 缓解Adagrad学习率衰减问题 超参数敏感
Adadelta 取消全局学习率,使用参数变化量的均方根进行更新 自适应单位调整 无需手动设置学习率 初期收敛慢

三、动量类优化器

优化器 核心公式 核心思想 优势 典型场景
Momentum v_t = γ·v_{t-1} + η·∇θ J(θ)
θ = θ - v_t
引入动量加速收敛 逃离局部最优/鞍点 高曲率、小噪声梯度
NAG (Nesterov) v_t = γ·v_{t-1} + η·∇θ J(θ - γ·v_{t-1}) 前瞻性梯度计算 更精准的动量修正 复杂优化地形

四、综合型优化器

优化器 核心公式 核心创新点 优点 注意事项
Adam 结合动量+自适应学习率
m_t = β1·m_{t-1} + (1-β1)·g_t
v_t = β2·v_{t-1} + (1-β2)·g_t²
θ = θ - η·m̂_t/(√v̂_t + ε)
动量的一阶矩估计 + 梯度平方的二阶矩估计 收敛快、适合大规模数据 需要偏差校正
AdamW 在Adam基础上解耦权重衰减项 区分梯度更新与正则化项 更稳定的超参数 推荐替代标准Adam
Nadam Adam + Nesterov动量 前瞻性动量估计 加速初期收敛 复杂模型训练

五、新型优化器

优化器 核心思想 优势 论文参考
LAMB 适用于大batch训练的Adam变体 加速大规模分布式训练 LAMB Optimizer
RAdam 动态衰减动量项的Adam 解决训练初期方差问题 RAdam

六、选择策略

  1. 默认选择:优先尝试 AdamWAdam( 80%场景适用 )
  2. 理论分析需求:使用 SGD + Momentum( 可解释性更强 )
  3. 稀疏数据:使用 AdagradFTRL
  4. 资源受限:使用 RMSprop( RNN类模型表现稳定 )
  5. 超大规模训练:使用 LAMBAdafactor

七、代码示例( PyTorch )

# Adam 优化器
import torch.optim as optim
optimizer = optim.Adam(model.parameters(), lr=3e-4, weight_decay=1e-5)

# SGD with Momentum
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)

# 带热重启的Adam (SGDR策略)
scheduler = optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=10)

关键参考资料

  1. Adam: A Method for Stochastic Optimization
  2. 为什么Adam常被吐槽?
  3. 优化器可视化比较

实际应用中需结合具体任务进行调参,通常学习率和权重衰减是最需要调整的超参数。

posted @ 2025-04-14 01:38  Gold_stein  阅读(135)  评论(0)    收藏  举报