Skip to content

优化器面试题集


Q1: Adam优化器的核心公式和原理

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 = θ_{t-1} - α * m̂_t / (√v̂_t + ε)

关键设计:

  1. 一阶矩(动量):加速收敛,减少震荡
  2. 二阶矩(自适应LR):每参数独立调整学习率
  3. 偏差修正:修正初期m₀=v₀=0带来的偏差

Q2: β₁和β₂的作用?

  • β₁(0.9):控制动量的平滑程度。越大,历史梯度影响越久
  • β₂(0.999):控制自适应学习率的平滑程度。越大,LR越小越稳定
  • β₂更大是因为需要更长的历史来估计梯度的"平均尺度"

Q3: Adam vs SGD vs AdamW

方面SGD+MomentumAdamAdamW
收敛
泛化更好可能略差改善
权重衰减L2L2解耦
显存1x3x(m+v)3x
适用CVNLPLLM

Q4: 为什么需要学习率warmup?

: 训练初期:

  1. 模型参数随机,梯度方向不一致
  2. Adam的m和v还没有充分积累
  3. 大学习率在早期可能破坏初始化

Warmup逐步增加学习率,让优化器统计量积累、参数找到稳定方向后再用全速学习率。Transformer尤其需要warmup。


Q5: loss不下降如何排查?

  1. 学习率:太大(震荡)还是太小(不动)?
  2. 梯度:检查梯度范数,是否消失/爆炸
  3. 数据:标签是否正确?归一化?
  4. 模型:初始化是否正确?激活函数是否恰当?
  5. Batch Norm:小batch时BN不稳定,可试Layer Norm

Q6: CosineAnnealing为什么好?

相比Step的突变,Cosine平滑地将学习率从最大值降到最小值:

  • 前期"探索"时LR大
  • 后期"微调"时LR小
  • 避免了Step的突变带来的loss回升