不同优化器的区别和作用
优化器是深度学习中用于调整网络参数(如权重和偏置)以最小化损失函数的算法。不同的优化器具有不同的特点,适用于不同的任务和数据集。
1. 常见优化器
(1) 随机梯度下降(SGD)
-
公式:
W n e w = W o l d − η ∇ J ( W o l d ) W_{new} = W_{old} - \eta \nabla J(W_{old}) Wnew=Wold−η∇J(Wold)
其中 η \eta η是学习率。 -
特点:
- 每次使用一个小批量数据计算梯度。
- 简单高效,但收敛速度慢,容易陷入局部最优。
-
优点:
- 适合大规模数据训练。
- 计算开销小。
-
缺点:
- 收敛不稳定,容易振荡。
(2) 动量梯度下降(Momentum SGD)
-
公式:
v t = β v t − 1 + η ∇ J ( W t − 1 ) v_t = \beta v_{t-1} + \eta \nabla J(W_{t-1}) vt=βvt−1+η∇J(Wt−1)
W n e w = W o l d − v t W_{new} = W_{old} - v_t Wnew=Wold−vt -
特点:
- 引入动量( v t v_t vt)累积过去的梯度。
- 可以加速收敛,减少振荡。
-
优点:
- 在谷底附近更快收敛。
- 减少高频振荡。
-
缺点:
- 需要手动调整动量参数 β \beta β。
(3) RMSprop
-
公式:
S t = β S t − 1 + ( 1 − β ) ( ∇ J ( W t ) ) 2 S_t = \beta S_{t-1} + (1 - \beta) (\nabla J(W_t))^2 St=βSt−1+(1−β)(∇J(Wt))2
W n e w = W o l d − η S t + ϵ ∇ J ( W t ) W_{new} = W_{old} - \frac{\eta}{\sqrt{S_t + \epsilon}} \nabla J(W_t) Wnew=Wold−St+ϵη∇J(Wt) -
特点:
- 自适应学习率,根据每个参数的梯度平方值调整学习率。
- 避免梯度爆炸和梯度消失问题。
-
优点:
- 适合处理稀疏梯度问题。
- 在RNN中表现优越。
-
缺点:
- 需要调节超参数 β \beta β。
(4) AdaGrad
-
公式:
S t = S t − 1 + ( ∇ J ( W t ) ) 2 S_t = S_{t-1} + (\nabla J(W_t))^2 St=St−1+(∇J(Wt))2
W n e w = W o l d − η S t + ϵ ∇ J ( W t ) W_{new} = W_{old} - \frac{\eta}{\sqrt{S_t + \epsilon}} \nabla J(W_t) Wnew=Wold−St+ϵη∇J(Wt) -
特点:
- 学习率会随着时间逐渐减小。
- 对于稀疏数据和高维数据效果较好。
-
优点:
- 无需手动调整学习率。
- 对特征少的数据表现较好。
-
缺点:
- 学习率衰减过快,导致后期训练停滞。
(5) Adam(Adaptive Moment Estimation)
-
公式:
- 动量部分:
m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ J ( W t ) m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla J(W_t) mt=β1mt−1+(1−β1)∇J(Wt)
v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ J ( W t ) ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla J(W_t))^2 vt=β2vt−1+(1−β2)(∇J(Wt))2 - 参数更新:
W n e w = W o l d − η v ^ t + ϵ m ^ t W_{new} = W_{old} - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t Wnew=Wold−v^t+ϵηm^t
其中, m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1−β1tmt, v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1−β2tvt。
- 动量部分:
-
特点:
- 综合了Momentum和RMSprop的优点。
- 动态调整每个参数的学习率。
-
优点:
- 快速收敛,适合非平稳目标。
- 超参数相对稳定。
-
缺点:
- 可能导致局部最优或震荡问题。
- 对于某些问题泛化能力较弱。
(6) AdaDelta
-
公式:
S t = β S t − 1 + ( 1 − β ) ( ∇ J ( W t ) ) 2 S_t = \beta S_{t-1} + (1 - \beta) (\nabla J(W_t))^2 St=βSt−1+(1−β)(∇J(Wt))2
Δ W = − Δ W t − 1 + ϵ S t + ϵ ∇ J ( W t ) \Delta W = -\frac{\sqrt{\Delta W_{t-1} + \epsilon}}{\sqrt{S_t + \epsilon}} \nabla J(W_t) ΔW=−St+ϵΔWt−1+ϵ∇J(Wt)
W n e w = W o l d + Δ W W_{new} = W_{old} + \Delta W Wnew=Wold+ΔW -
特点:
- 改进了AdaGrad,避免学习率过早衰减问题。
- 使用窗口存储历史梯度,动态调整更新步长。
-
优点:
- 无需手动调整学习率。
- 适合深度网络训练。
-
缺点:
- 对稀疏数据表现一般。
2. 优化器的对比总结
优化器 | 特点 | 适用场景 |
---|---|---|
SGD | 简单高效,收敛慢,容易陷入局部最优 | 小型模型,初学者 |
Momentum SGD | 加速收敛,减少振荡 | 深层神经网络训练 |
RMSprop | 自适应学习率,处理稀疏梯度优秀 | RNN、稀疏数据 |
AdaGrad | 学习率自动调整,训练后期衰减较快 | 稀疏数据,文本分类 |
Adam | 快速收敛,自适应性强,综合多种优化器优点 | 通用场景,深度网络,推荐最优先使用 |
AdaDelta | 动态学习率,无需手动调整 | 深层网络训练 |
选择优化器的建议
- 初始训练阶段:可以先用Adam快速找到合适的参数区域。
- 后期微调阶段:可以切换到SGD或Momentum SGD以提高模型的泛化性能。
- 特殊场景:
- 稀疏数据:优先选择RMSprop、AdaGrad。
- 序列任务:RMSprop、Adam在RNN中效果更佳。