你在 CIFAR-10 上训练 ResNet-18,batch=128,SGD momentum=0.9,weight_decay=5e-4,初始 lr=0.1。比较三种调度:(A) 常数 0.1;(B) StepLR 每 30 epoch 乘 0.1,共 100 epoch;(C) CosineAnnealing 从 0.1 退火到 0,共 100 epoch。结果 B 和 C 最终训练 loss 相近,但 B 测试精度更高,C 后半程训练 loss 更低。请问:为什么降低学习率通常能提升最终测试精度?B 和 C 的差异可能来自哪里?如果 C 后半程训练 loss 更低但测试没更好,你会先怀疑什么?
面试官在考什么
判断是否理解学习率调度同时影响优化精度和泛化,以及训练 loss 低不等于测试好。
回答框架 · 前两步
- 训练后期降低 lr 可以减小参数更新噪声和步长,使模型在损失盆地内更稳定地精调,通常有利于最终精度;高 lr 长期探索可能无法收敛到较好的局部区域。
- StepLR 在固定 epoch 突降,前期保持高 lr 探索,后期低 lr 精调;Cosine 平滑连续下降,后期 lr 非常小甚至到 0,可能更充分拟合训练集。
还有 2 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「机器学习基础」方向页
同一能力域的其他题
- Adam 和 SGD 的区别是什么?为什么很多视觉任务最终还用 SGD + momentum,而 NLP/大模型训练几乎都用 AdamW?
- 你用 mini-batch SGD 训练一个图像分类模型,batch size=256,初始 lr=0.1,momentum=0.9,Nesterov=False。训练日志显示:前几百步 loss 下降,随后在局部来回震荡,验证集不再提升;把 lr 降到 0.01 后震荡消失,但收敛明显变慢。请给出你的诊断顺序:这是 lr 过大、momentum 过大,还是二者耦合?你会做哪两个可复现实验来定位?并说明在什么条件下可以把 SGD+Momentum 的等效步长近似看成 lr/(1-momentum)。
- 你在 8 卡上训练一个带 BatchNorm 的 CNN,基线是 batch size=256、SGD momentum=0.9、lr=0.1,训练 90 epoch。现在为了提吞吐把单卡 batch 从 32 提到 512(总 batch=4096),epoch 数保持不变。请给出你会怎么改 lr 和 momentum,warmup 设多少步,并说明每一步的判断依据。如果按你的方案训到第 5 个 epoch 出现 loss spike,你的排查顺序是什么?
- 你接手一个日更的 CTR 模型训练管线:稠密参数约 3 亿,稀疏 embedding 约 20 亿行;集群固定 512 张 A100,单次训练窗口 8 小时。现状用 Adam,1.2 万步收敛到目标 loss。团队提议换成 SGD+Momentum,理由是线上 AUC 能涨,但实测同样步数下 loss 明显更高、大约要 3 倍步数才能追平。请给出你的决策和落地方案:切不切?切的话 lr、momentum、warmup、batch 怎么定?20 亿行的稀疏 embedding 那一侧要不要开 momentum?在 8 小时预算下你怎么判断这笔账划不划算?
- 你在训练一个两层 MLP,mini-batch 大小 64,用纯 SGD,初始学习率 0.1。训练初期 loss 抖动很大,相邻两次迭代的梯度方向经常左右翻转。换成 SGD + Momentum(momentum=0.9) 后,前期 loss 下降变快,但后期在极小值附近持续来回震荡,验证集也没有变好。请问:Momentum 为什么能抑制这种左右翻转并加速?momentum=0.9 时,如果梯度方向长期一致,有效学习率大约是原来的多少倍?后期这种震荡你会先调 momentum 还是先调学习率,为什么?
- 你在训练一个带 embedding、LayerNorm 和 bias 的序列模型,优化器从 Adam 换成 AdamW,weight_decay=0.01,lr=3e-4,beta1=0.9,beta2=0.999。训练 10 个 epoch 后训练 loss 继续下降,但验证 loss 开始上升。你怀疑 weight decay 加错了参数。请说明 Adam 中 L2 正则与 AdamW 的 decoupled weight decay 在更新式上的区别;并给出参数分组方案:哪些参数做 weight decay,哪些不做,为什么。