1. 随机梯度下降(SGD)
- 学习率调整:固定全局学习率,无自适应机制。
- 公式:θt=θt−1−η⋅gt
- η:全局学习率(需手动设置)。
- gt=∇θJ(θt−1):当前梯度。
2. 带动量的SGD(SGD with Momentum)
- 学习率调整:引入动量项加速收敛,但学习率仍固定。
- 公式:vt=β⋅vt−1+gtθt=θt−1−η⋅vt
- β:动量衰减率(通常0.9)。
- vt:动量累积量。
3. Adagrad
- 学习率调整:自适应降低高频参数的学习率。
- 公式:Gt=Gt−1+gt2θt=θt−1−Gt+ϵη⋅gt
- Gt:历史梯度平方的累积。
- 问题:学习率单调下降,后期可能过小。
4. Adadelta
- 学习率调整:无需手动设置 η,自适应调整。
- 公式:E[g2]t=ρ⋅E[g2]t−1+(1−ρ)⋅gt2Δθt=−E[g2]t+ϵE[Δθ2]t−1+ϵ⋅gtE[Δθ2]t=ρ⋅E[Δθ2]t−1+(1−ρ)⋅(Δθt)2θt=θt−1+Δθt
- ρ:衰减率(通常0.95)。
5. Adam(Adaptive Moment Estimation)
- 学习率调整:结合动量与自适应学习率。
- 公式:mt=β1⋅mt−1+(1−β1)⋅gtvt=β2⋅vt−1+(1−β2)⋅gt2m^t=1−β1tmt,v^t=1−β2tvtθt=θt−1−v^t+ϵη⋅m^t
- β1,β2:一阶和二阶矩衰减率(通常0.9和0.999)。
6. Nadam(Nesterov-accelerated Adam)
- 学习率调整:Adam + Nesterov动量。
- 公式:mt=β1⋅mt−1+(1−β1)⋅gtm^t=1−β1tβ1⋅mt+1−β1t(1−β1)⋅gtvt=β2⋅vt−1+(1−β2)⋅gt2v^t=1−β2tvtθt=θt−1−v^t+ϵη⋅m^t
7. AdamW
- 学习率调整:解耦权重衰减(更稳定的正则化)。
- 公式:θt=θt−1−η(v^t+ϵm^t+λθt−1)
- λ:权重衰减系数,独立于自适应学习率。
8. AMSGrad
- 学习率调整:修正Adam的二阶矩估计,保证非递增。
- 公式:vt=β2⋅vt−1+(1−β2)⋅gt2v^t=max(v^t−1,vt)θt=θt−1−v^t+ϵη⋅m^t
9. RMSprop(Root Mean Square Propagation)
- 学习率调整机制:基于梯度平方的指数移动平均(EMA),自适应调整每个参数的学习率,解决 Adagrad 学习率单调下降的问题。
- 公式:E[g2]t=ρ⋅E[g2]t−1+(1−ρ)⋅gt2θt=θt−1−E[g2]t+ϵη⋅gt
- ρ:衰减率(通常设为0.9),控制历史梯度平方的权重。
- η:全局学习率(需手动设置)。
- ϵ:极小常数(如 10−8),防止分母为零。
- 适用场景:
- 循环神经网络(RNN)训练(梯度随时间步剧烈变化)。
- 稀疏数据(如自然语言处理中的词嵌入)。
- 非平稳目标函数(如在线学习)。
主流优化算法总结对比
算法 | 学习率调整机制 | 适用场景 |
---|---|---|
SGD | 固定学习率 | 简单任务,需精细调参 |
Momentum | 固定学习率 + 动量加速 | 需要逃离局部极小值、加速收敛 |
Adagrad | 自适应降低高频参数学习率 | 稀疏数据(如NLP) |
Adadelta | 自适应,无需全局学习率 | 替代Adagrad,避免学习率过快下降 |
RMSprop | 指数移动平均梯度平方(EMA) | RNN、非平稳目标、一般稀疏数据 |
Adam | 自适应 + 动量 | 通用深度学习任务(CV/NLP) |
Nadam | Adam + Nesterov动量 | 需要更稳定收敛的任务 |
AdamW | 解耦权重衰减的Adam | 需要精确控制正则化的场景 |
AMSGrad | 修正Adam的二阶矩估计 | 理论收敛性要求高的任务 |