优化算法

优化算法是训练神经网络的核心,决定了如何更新参数以最小化损失函数。好的优化算法能加速收敛、提高稳定性。

共 3 篇文章·阅读时间:约35分钟

01SGD及其变体

随机梯度下降(SGD)及其变体是深度学习中最基础的优化算法,理解它们有助于理解更复杂的优化器。

基础SGD

基础SGD使用固定学习率更新参数,简单但收敛慢,且容易陷入局部最优。

θ = θ - η · ∇J(θ)

问题:
- 在平坦区域收敛慢
- 在陡峭区域容易越过最优
- 容易陷入局部最优

动量法

动量法模拟物理中的动量概念,加速收敛并减少震荡。

标准动量

v = βv + η∇J(θ)

θ = θ - v

Nesterov动量

v = βv + η∇J(θ - βv)

θ = θ - v

先看两步前的梯度,更具前瞻性

SGD with Momentum 的优点

  • 加速收敛,特别是在曲面山谷中
  • 减少震荡,更稳定的收敛路径
  • 有助于跳出局部最优
AdaGrad

θi = θi - η / (√Gii + ε) · ∇J(θ)i

自适应调整每个参数的学习率,适合稀疏数据。缺点是训练后期学习率可能过小。

RMSProp

E[g²]t = βE[g²]t-1 + (1-β)g²t

θi = θi - η / √(E[g²]t + ε) · gt,i

使用指数加权移动平均,解决AdaGrad学习率衰减过快的问题

02Adam优化器

Adam(Adaptive Moment Estimation)结合了动量法和RMSProp的优点,是目前最流行的优化器之一。

Adam原理

Adam维护两个估计:梯度的一阶矩(均值)和二阶矩(方差),分别对应动量和自适应学习率。

Adam算法

mt = β1mt-1 + (1-β1)gt # 一阶矩估计(动量)

vt = β2vt-1 + (1-β2)g²t # 二阶矩估计(自适应学习率)

t = mt / (1-βt1) # 偏差校正

t = vt / (1-βt2) # 偏差校正

θt = θt-1 - η · m̂t / (√v̂t + ε)

默认超参数

  • β1 = 0.9:一阶矩衰减
  • β2 = 0.999:二阶矩衰减
  • ε = 10⁻⁸:数值稳定项
  • η = 0.001:学习率

Adam变体与改进

AdamW

将权重衰减与L2正则化分离,提供更好的正则化效果。 广泛用于大模型训练(如BERT、GPT)。

Lion

更简化的优化器,只维护动量。更新量 = sign(动量),内存效率更高。 在某些任务上效果优于Adam。

LAMB

Layer-wise Adaptive Moments for Batch training。使用逐层学习率缩放, 适合大batch训练(如128K的batch size)。

03学习率调度

学习率调度动态调整学习率,帮助模型更好地收敛。合理的学习率调度往往能显著提升训练效果。

学习率概念

学习率是最重要的超参数之一。固定学习率难以适应训练的不同阶段:

训练不同阶段的学习率需求

  • 初期:较大的学习率可以快速探索参数空间
  • 中期:适当降低,避免震荡
  • 后期:较小学习率精细调优,找到最优解

调度策略

Step Decay

每N个epoch,学习率乘以固定因子γ

ηt = η0 · γ⌊t/N⌋

Cosine Annealing

余弦函数曲线,从η0降到ηmin

ηt = ηmin + (η0 - ηmin) · (1 + cos(πt/T)) / 2

Cosine Annealing with Warm Restarts (SGDR)

余弦退火+周期性重启,帮助跳出局部最优。

Linear Warmup

训练初期从0线性增长到目标学习率

ηt = ηtarget · t / Twarmup, t < Twarmup

ReduceLROnPlateau

当验证损失不再下降时,自动降低学习率。

现代训练推荐

  • 大模型训练:Linear Warmup + Cosine Decay
  • BERT类模型:预热1000步 + 常数学习率 或 Linear Decay
  • 图像分类:Cosine Annealing 或 Step Decay
----