引言

优化算法是深度学习的核心引擎。从随机梯度下降(SGD)到Adam、再到AdamW,优化器的选择直接影响模型的收敛速度、泛化能力和最终性能。本文将从数学原理出发,深入剖析各类优化算法的本质差异,并给出生产环境下的实战调优策略。

1. 基础:随机梯度下降(SGD)

1.1 数学原理

SGD是最基础的优化算法,其参数更新公式为:

θ_{t+1} = θ_t - η · ∇L(θ_t; x_i, y_i)

其中η为学习率,∇L为单个样本或小批量样本的梯度。SGD的核心挑战在于:学习率的选择困难、收敛速度慢、容易陷入鞍点。

1.2 SGD的困境

  • 学习率调度敏感:固定学习率难以适应不同训练阶段的需求
  • 各向异性损失曲面:不同参数方向的最优学习率可能差异巨大
  • 鞍点问题:在高维空间中,鞍点数量远多于局部极小值
  • 梯度噪声:小批量估计的方差导致优化路径震荡

2. 动量方法:加速收敛与抑制震荡

2.1 Polyak动量(Heavy-Ball)

v_{t+1} = β · v_t + ∇L(θ_t)
θ_{t+1} = θ_t - η · v_{t+1}

动量系数β通常取0.9,通过累积历史梯度方向来加速收敛。物理类比:在损失曲面上滚动的球体,动量使其能越过小的局部障碍物。

2.2 Nesterov加速梯度(NAG)

v_{t+1} = β · v_t + ∇L(θ_t - β · v_t)
θ_{t+1} = θ_t - η · v_{t+1}

NAG的核心思想:先根据动量项"向前看"一步,然后计算梯度。这种前瞻性使NAG在凸函数理论上具有更优的收敛率:O(1/T²) vs O(1/T)。

2.3 实战对比

在ResNet-50 ImageNet训练中,SGD+Momentum配合余弦退火调度,最终top-1精度通常比纯SGD高2-3个百分点。动量方法对batch size不敏感,适合大规模分布式训练。

3. 自适应学习率方法

3.1 AdaGrad

G_t = G_{t-1} + g_t ⊙ g_t
θ_{t+1} = θ_t - η / √(G_t + ε) ⊙ g_t

AdaGrad为每个参数维护历史梯度平方的累积和,实现学习率的自适应衰减。优势:适合稀疏数据;劣势:学习率单调递减至零,训练后期几乎停止更新。

3.2 RMSProp

E[g²]_t = β · E[g²]_{t-1} + (1-β) · g_t²
θ_{t+1} = θ_t - η / √(E[g²]_t + ε) ⊙ g_t

Hinton提出的RMSProp用指数移动平均替代累积和,解决了AdaGrad学习率消失问题。β通常取0.99,使近期梯度对学习率调整影响更大。

3.3 Adam(Adaptive Moment Estimation)

m_t = β₁ · m_{t-1} + (1-β₁) · g_t      # 一阶矩估计
v_t = β₂ · v_{t-1} + (1-β₂) · g_t²     # 二阶矩估计
m̂_t = m_t / (1 - β₁^t)                  # 偏差校正
v̂_t = v_t / (1 - β₂^t)                  # 偏差校正
θ_{t+1} = θ_t - η · m̂_t / (√v̂_t + ε)

Adam结合了动量(一阶矩)和RMSProp(二阶矩)的思想,并加入了偏差校正机制。默认超参数:β₁=0.9, β₂=0.999, ε=1e-8。

3.4 Adam的泛化问题

Wilson & Martinez (2017)的研究表明,在某些任务上Adam的泛化能力不如精心调优的SGD。原因分析:

  • Adam的自适应学习率可能导致参数停留在 sharp minima 附近
  • L2正则化(权重衰减)在Adam中的效果与SGD不同
  • 自适应学习率对小梯度参数也给予较大更新,不利于找到平坦区域

4. AdamW:解耦权重衰减

4.1 问题根源

在标准Adam中,L2正则项λ||θ||²被加入损失函数,其梯度λθ被乘以自适应学习率:更新量 = -ηλθ / (√v̂ + ε)。这意味着权重衰减效果被自适应学习率"扭曲"了。

4.2 AdamW解耦方案

m_t = β₁ · m_{t-1} + (1-β₁) · g_t
v_t = β₂ · v_{t-1} + (1-β₂) · g_t²
θ_{t+1} = θ_t - η · (m̂_t / (√v̂_t + ε) + λ · θ_t)

关键区别:权重衰减项λ·θ_t不再除以自适应学习率。这使得所有参数以相同比例衰减,与学习率无关,有效防止过拟合。

4.3 Transformer时代的标配

AdamW已成为Transformer架构的默认优化器。BERT、GPT系列、ViT等模型均采用AdamW:

  • 学习率:1e-4 ~ 5e-5(配合warmup)
  • 权重衰减:0.01
  • β₁=0.9, β₂=0.999(部分模型用β₂=0.98)
  • 梯度裁剪:max_norm=1.0

5. 新一代优化器

5.1 LAMB(Layer-wise Adaptive Moments)

专为大batch训练设计,逐层计算信任比(trust ratio),使BERT在batch_size=32K时仍能收敛。Yahoo在2019年用LAMB将BERT训练时间从3天缩短到76分钟。

5.2 LARS(Layer-wise Adaptive Rate Scaling)

Google提出的逐层自适应学习率缩放,根据每层权重范数与梯度范数的比值调整学习率,使ResNet-50可在batch_size=32K下稳定训练。

5.3 RAdam(Rectified Adam)

Liu et al. (2019)发现Adam在训练初期由于二阶矩估计偏差大,可能导致训练不稳定。RAdam通过动态修正自适应学习率的方差,在前几个epoch退化为SGD+Momentum,然后逐渐过渡到Adam行为。

5.4 RLookahead

Lookahead通过维护"慢权重"(slow weights)来改善优化稳定性:

# 每k步执行一次同步
if step % k == 0:
    slow_weight = slow_weight + α · (fast_weight - slow_weight)

可以包装在任何现有优化器外层,几乎零额外成本即可提升泛化能力。

5.5 Lion优化器

Google 2023年发布的Lion(EvoLved Sign Momentum)采用符号更新机制:

m_t = β₁ · m_{t+1} + (1-β₁) · g_t  # 注意是t+1
θ_{t+1} = θ_t - η · sign(β₁ · m_t + (1-β₁) · g_t)

特点:更新量仅取符号(±1),内存占用仅为Adam的一半,且在多个任务上超越AdamW。已在ViT-B/16、ViT-G/14、扩散模型等任务上验证。

6. 学习率调度策略

6.1 Warmup

训练初期使用较小学习率逐步增大,防止初始阶段因二阶矩估计不准导致的大幅参数扰动。典型warmup步数为总步数的1-10%。

6.2 余弦退火(Cosine Annealing)

η_t = η_min + (η_max - η_min) · (1 + cos(π · T_cur / T)) / 2

Loshchilov & Hutter (2017)提出的余弦退火,配合warmup成为SGD训练ResNet的标准组合。带重启的余弦退火(SGDR)可多次跳出局部最优。

6.3 One-Cycle Policy

Smith (2017)提出的单周期策略:先线性增大学习率至最大值,再线性减小至初始值的1/10~1/100。优势:收敛速度快、泛化好(大学习率阶段相当于隐式正则化)。

6.4 Warmup-Decay组合

当前大语言模型训练的标准配置:linear warmup → constant → cosine decay。PaLM、LLaMA、GPT-4等均采用此策略,并配合梯度裁剪和损失spike检测。

7. 生产环境实战指南

7.1 优化器选择决策树

  • 计算机视觉(CNN):SGD + Momentum + Cosine Annealing(高精度首选)或 AdamW(快速实验)
  • Transformer/NLP:AdamW + Warmup + Cosine Decay
  • 大batch训练:LAMB或LARS
  • 快速实验/调参:AdamW(学习率1e-3起调)
  • 生成模型(扩散/GAN):AdamW配合谨慎的学习率平衡
  • 资源受限场景:Lion(内存减半)

7.2 超参数调优要点

  • 学习率:使用学习率范围测试(LR Range Test),从1e-7到1e-1扫描,选择损失下降最陡的区间
  • Batch Size:大batch需线性缩放学习率(Goyal et al., 2017),但存在泛化差距
  • 权重衰减:CNN约1e-4,Transformer约0.01~0.1
  • 梯度裁剪:将全局梯度范数限制在防止梯度的爆炸(典型阈值0.5~5.0)

7.3 常见问题排查

  • Loss起飞/NaN:降低学习率、启用warmup、检查输入数据、使混合精度时loss scaling
  • 训练不收敛:增大学习率、检查梯度流是否被阻断、减少正则化强度
  • 验证集过拟合:增大权重衰减、使用mixup/cutout数据增强、降低学习率
  • 训练平台期:尝试学习率阶梯下降、switch到SGD微调、使用SWA随机权重平均

8. 前沿趋势

8.1 Sophia(Second-order Clipped Stochastic Optimization)

Liu et al. (2023)提出利用Hessian对角线信息的拟二阶优化器,每次迭代使用Hessian裁剪的更新方向,在LLM预训练上实现2倍收敛加速,每 token 成本显著降低。

8.2 Schedule-Free优化

Defazio et al. (2024)挑战了"学习率必须有衰减调度"的假设,通过特殊构造的优化器(无调度版本)实现与精心调度相当的性能,消除了学习率衰减的超参数调优需求。

8.3 分布式优化通信

随着模型规模增长,梯度同步成为瓶颈:

  • 梯度压缩:1-bit SGD、PowerSGD、误差反馈量化
  • 通信-计算重叠:Ring-AllReduce、ZeRO分片(DeepSpeed)
  • 模型并行+数据并行混合:3D/4D并行(Megatron-LM)

9. 总结

优化算法的研究从SGD发展到AdamW、Lion,核心目标始终是在收敛速度和泛化能力之间取得最佳平衡。当前最佳实践是:Transformer家族用AdamW,传统CNN用SGD+Momentum+余弦退火,前沿大模型积极探索二阶方法和无调度优化器。理解各算法的数学特性和适用场景,才能在面对新任务时做出最合适的选择。

参考资料

  • Ruder, S. (2016). An overview of gradient descent optimization algorithms.
  • Kingma, D. P., & Ba, J. (2015). Adam: A method for stochastic optimization. ICLR.
  • Loshchilov, I., & Hutter, F. (2019). Decoupled weight decay regularization. ICLR.
  • Liu et al. (2023). Sophia: A scalable stochastic second-order optimizer for language model pre-training.
  • You, Y. et al. (2020). Large batch optimization for deep learning: Training BERT in 76 minutes. ICLR.
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部