#一、高频问题速览

  1. SGDMomentumAdamAdamW 的核心区别是什么?
  2. 为什么 Adam 往往前期收敛更快,但泛化未必最好?
  3. AdamW 为什么要把 weight decay 从梯度更新里解耦?
  4. RMSPropAdafactorLAMBLion 各自更适合解决什么问题?
  5. 优化器状态为什么会吃掉这么多显存?怎么快速估算?
  6. 为什么大模型预训练里最常见的是 AdamW,而不是纯 SGD
  7. 什么时候会考虑 Adafactor、8-bit optimizer 或其他省状态优化器?
  8. mixed precision 训练里,master weights、loss scaling 和 optimizer 有什么关系?
  9. 如果训练不收敛,怎么判断是优化器问题,还是学习率、batch size、数据或实现问题?
  10. 手写一个 optimizer step 时,最容易写错哪些细节?

#就地速答

  • 问:SGDMomentumAdamAdamW 的核心区别是什么?

    答:SGD 直接沿当前梯度更新;Momentum 在梯度上做速度累积以减少震荡;Adam 同时维护一阶和二阶矩做自适应步长;AdamW 则在 Adam 基础上把 weight decay 从梯度项里解耦,训练行为更稳定。

  • 问:为什么 Adam 往往前期收敛更快,但泛化未必最好?

    答:因为 Adam 会对每个参数做自适应缩放,早期在尺度不均、梯度噪声大的任务上更容易快速下降;但这种“坐标级自适应”有时也会把模型推向更依赖局部统计的解,泛化不一定优于调得很好的 SGD/Momentum

  • 问:AdamW 为什么要把 weight decay 从梯度更新里解耦?

    答:因为在 Adam 里直接把 L2 正则加进梯度,会和自适应学习率纠缠在一起,不同参数实际承受的衰减强度会失真;AdamW 把衰减单独做一次参数收缩,语义和调参都更清楚。

  • 问:RMSPropAdafactorLAMBLion 各自更适合解决什么问题?

    答:RMSProp 主要解决非平稳梯度下的步长适配,Adafactor 重点是省二阶矩显存,LAMB 更偏大 batch 训练稳定性,Lion 则想用更轻的状态和 sign 更新换更低开销。

  • 问:优化器状态为什么会吃掉这么多显存?怎么快速估算?

    答:因为像 Adam 这类优化器通常要为每个参数额外维护一阶矩、二阶矩,mixed precision 下还常带一份 FP32 master weights;粗看显存会到参数本体的数倍。

  • 问:为什么大模型预训练里最常见的是 AdamW,而不是纯 SGD

    答:因为大模型训练通常梯度尺度复杂、训练周期长、调参成本高,AdamW 在收敛速度、稳定性和工程成熟度之间提供了目前最稳的折中。

  • 问:什么时候会考虑 Adafactor、8-bit optimizer 或其他省状态优化器?

    答:当模型太大、优化器状态显存明显成为瓶颈,或者训练资源很紧时,会优先考虑这些“少状态/压状态”的方案,但通常要接受一定的稳定性和调参代价。

  • 问:mixed precision 训练里,master weights、loss scaling 和 optimizer 有什么关系?

    答:因为低精度参数和梯度容易下溢或积累误差,所以很多实现会保留 FP32 master weights 做更新,并通过 loss scaling 先放大梯度、再在 optimizer step 前反缩放,保证数值稳定。

  • 问:如果训练不收敛,怎么判断是优化器问题,还是学习率、batch size、数据或实现问题?

    答:最稳的做法不是直接换优化器,而是做最小隔离:先固定数据和模型,逐项排查学习率、warmup、梯度裁剪、batch size、数值溢出和实现 bug;只有这些都排除后,才更像优化器选择或超参本身有问题。

  • 问:手写一个 optimizer step 时,最容易写错哪些细节?

    答:最常见错误包括:把 AdamW 写成 Adam + L2、漏掉 bias correction、epsilon 加错位置、先后更新顺序写反、梯度裁剪和 zero_grad 时机不对,以及 mixed precision 下忘记 unscale。