优化算法
优化算法是训练神经网络的核心,决定了如何更新参数以最小化损失函数。好的优化算法能加速收敛、提高稳定性。
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 # 二阶矩估计(自适应学习率)
m̂t = mt / (1-βt1) # 偏差校正
v̂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