你在一个 10M 参数的小模型上做 fine-tune,数据 5 万条,用 Adam 训了 20k step 还没收敛。有人建议换 L-BFGS 或 K-FAC。请判断:什么条件下二阶方法在这个场景能赢,什么条件下反而更慢?请给出至少两个可量化的判断标准(参数量、每步显存、batch 大小等),并说明如果模型换成 1B 参数你的结论变不变。
面试官在考什么
考察对二阶方法每步成本、近似方式和适用边界的判断力,以及在规模变化时能否果断取舍。
回答框架 · 前两步
- 稠密牛顿法每步要 O(N^3) 求解和 O(N^2) 存储;L-BFGS 用 m 步历史近似,每步额外 O(mN);K-FAC 用 Kronecker 近似把 per-layer 矩阵降到 O(d^2),但仍远高于 SGD/Adam 的 O(N)。
- 适用条件:参数量小(如 <10^7)、能做全 batch 或大 batch、目标近凸/平滑、迭代次数少;10M 参数加 5 万条数据理论上可以试 L-BFGS。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「机器学习基础」方向页
同一能力域的其他题
- 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,哪些不做,为什么。