优化器(Optimizer)是深度学习模型训练的核心组件之一,它决定了如何根据损失函数对模型参数进行更新。本文将总结目前常见的优化器,包括 SGD、Momentum、Adagrad、RMSprop、Adam 等,并介绍其核心思想、数学公式及优缺点。
1. SGD(随机梯度下降)
核心思想:
每次迭代只使用一小批数据(mini-batch)来更新参数,计算速度快。
更新公式:
θ
t
+
1
=
θ
t
−
η
⋅
∇
θ
J
(
θ
)
\theta_{t+1} = \theta_t - \eta \cdot \nabla_{\theta}J(\theta)
θt+1=θt−η⋅∇θJ(θ)
优点:
- 简单高效
- 占用内存少
缺点:
- 容易陷入局部最优
- 收敛慢,对学习率敏感
2. SGD + Momentum(动量法)
核心思想:
在 SGD 基础上引入“动量”思想,模拟惯性加速收敛,减少震荡。
更新公式:
v
t
+
1
=
γ
v
t
+
η
∇
θ
J
(
θ
)
θ
t
+
1
=
θ
t
−
v
t
+
1
v_{t+1} = \gamma v_t + \eta \nabla_{\theta}J(\theta) \\ \theta_{t+1} = \theta_t - v_{t+1}
vt+1=γvt+η∇θJ(θ)θt+1=θt−vt+1
其中 γ \gamma γ 是动量因子,常取 0.9。
优点:
- 加快收敛速度
- 降低震荡
缺点:
- 参数调节(如 γ \gamma γ)较复杂
3. Adagrad
核心思想:
对每个参数采用自适应学习率,训练初期快、后期慢。
更新公式:
G
t
=
G
t
−
1
+
∇
θ
J
(
θ
)
2
θ
t
+
1
=
θ
t
−
η
G
t
+
ϵ
∇
θ
J
(
θ
)
G_t = G_{t-1} + \nabla_{\theta}J(\theta)^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \nabla_{\theta}J(\theta)
Gt=Gt−1+∇θJ(θ)2θt+1=θt−Gt+ϵη∇θJ(θ)
优点:
- 自适应学习率
- 适合稀疏数据(如 NLP)
缺点:
- 学习率不断减小,容易提前停止学习
4. RMSprop
核心思想:
改进 Adagrad,对历史梯度平方进行指数加权平均,避免学习率过快减小。
更新公式:
E
[
g
2
]
t
=
γ
E
[
g
2
]
t
−
1
+
(
1
−
γ
)
∇
θ
J
(
θ
)
2
θ
t
+
1
=
θ
t
−
η
E
[
g
2
]
t
+
ϵ
∇
θ
J
(
θ
)
E[g^2]_t = \gamma E[g^2]_{t-1} + (1 - \gamma) \nabla_{\theta}J(\theta)^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \nabla_{\theta}J(\theta)
E[g2]t=γE[g2]t−1+(1−γ)∇θJ(θ)2θt+1=θt−E[g2]t+ϵη∇θJ(θ)
优点:
- 收敛快
- 能应对非平稳目标
缺点:
- 需要调节超参数(如 γ \gamma γ)
5. Adam(Adaptive Moment Estimation,自适应矩估计)
核心思想:
结合 Momentum 和 RMSprop,分别估计一阶与二阶矩。
更新公式:
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
∇
θ
J
(
θ
)
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
(
∇
θ
J
(
θ
)
)
2
m
^
t
=
m
t
1
−
β
1
t
,
v
^
t
=
v
t
1
−
β
2
t
θ
t
+
1
=
θ
t
−
η
v
^
t
+
ϵ
m
^
t
m_t = \beta_1 m_{t-1} + (1 - \beta_1)\nabla_{\theta}J(\theta) \\ v_t = \beta_2 v_{t-1} + (1 - \beta_2)(\nabla_{\theta}J(\theta))^2 \\ \hat{m}_t = \frac{m_t}{1 - \beta_1^t},\quad \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
mt=β1mt−1+(1−β1)∇θJ(θ)vt=β2vt−1+(1−β2)(∇θJ(θ))2m^t=1−β1tmt,v^t=1−β2tvtθt+1=θt−v^t+ϵηm^t
优点:
- 学习率自适应
- 收敛快,鲁棒性好
- 参数调节较少
缺点:
- 在某些任务中可能不如 SGD 泛化好
🧪 6. AdamW(带权重衰减的 Adam)
核心思想:
改进 Adam 正则化方式,直接对权重衰减,效果更稳定。
更新公式:
θ
t
+
1
=
θ
t
−
η
(
m
^
t
v
^
t
+
ϵ
+
λ
θ
t
)
\theta_{t+1} = \theta_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_t \right)
θt+1=θt−η(v^t+ϵm^t+λθt)
优点:
- 提升 Adam 在 Transformer、BERT 中的性能
- 更合理的权重衰减方式
缺点:
- 训练速度略慢于 Adam
📈 对比总结表
优化器 | 学习率自适应 | 动量机制 | 收敛速度 | 参数调节 | 适用场景 |
---|---|---|---|---|---|
SGD | ✘ | ✘ | 慢 | 简单 | 通用基础 |
SGD+Momentum | ✘ | ✔ | 中 | 中 | 收敛困难时可用 |
Adagrad | ✔ | ✘ | 前快后慢 | 简单 | 稀疏数据(NLP) |
RMSprop | ✔ | ✘ | 快 | 需调 γ \gamma γ | 非平稳目标 |
Adam | ✔ | ✔ | 快 | 稳定 | 大多数深度模型 |
AdamW | ✔ | ✔ | 快 | 稳定 | Transformer/BERT |
📌 小结建议
- 小模型 / 简单任务:SGD + Momentum
- 稀疏特征 / NLP:Adagrad / Adam
- 图像 / Transformer 系列模型:AdamW
- 对训练速度敏感:Adam / RMSprop
💬 如果你觉得本文对你有帮助,欢迎点赞、收藏、转发支持!