← 返回题目列表

学习率调度和 Warmup 有什么作用?

中等 第 19 / 25 题 更新于 2026/09/19
深度学习机器学习面试题模型训练

简化版

Warmup 在训练初期把学习率从小值逐步升到峰值,避免随机初始化、Adam 矩估计未稳或大 batch 下的早期更新过猛;随后 scheduler 再按 cosine、linear 等规则衰减。两段必须按 optimizer update 数计步。

详细版

  • warmup 可按固定步数或总更新步数比例设置,比例不是普适常数。

  • 峰值学习率、warmup 长度和 batch size 相互影响。

  • 线性衰减到零与 cosine 衰减的尾部行为不同。

  • 梯度累积后 scheduler 应随参数更新前进,而非随 micro-batch 前进。

  • 恢复训练必须同时恢复 scheduler 的 last_step。

完整版教学

一、先建立稳定更新尺度,再逐步收敛

训练初期激活、梯度和 Adam 的二阶矩估计都不稳定,直接使用峰值学习率可能造成不可逆发散。

Warmup 暂时缩小步幅,让统计与表示进入合理范围。

衰减阶段则降低后期噪声,使参数在较小邻域内细化。

Warmup 解决起跑问题,decay 解决收尾问题,作用不能互相替代。

二、底层机制与公式

linear warmup: lr(t)=lr_peak*t/W, t<=W
cosine decay: lr(t)=lr_min+0.5*(lr_peak-lr_min)*(1+cos(pi*(t-W)/(T-W)))

三、带数字的推演

总更新 100,000 步,warmup 5,000 步,峰值 1e-3

第 1,000 步学习率为 2e-4;第 5,000 步到 1e-3,之后才进入 cosine 衰减。

四、方案对比

方案/对象核心特点代价或边界
Linear decay按剩余进度线性下降尾部快速接近零
Cosine decay前慢后平滑下降需确定最小 LR
Plateau scheduler指标不改善才下降依赖稳定验证信号

五、执行流程

估算 optimizer updates -> 设 peak LR 与 warmup -> 每次更新后推进 scheduler
-> 记录实际 LR 曲线 -> 断点恢复 step -> 对比早期梯度与最终指标

六、边界条件与工程代价

“先 optimizer.step 还是先 scheduler.step”依框架接口而定,顺序错误可能跳过第一个学习率。

应打印前几个 update 的实际 LR 做单元测试。

训练数据或 world size 改变会改变每 epoch 的更新次数;若 scheduler 以 step 为单位,继续沿用旧总步数会让衰减时程错位。

记忆钩子:学习率曲线分成“热身到峰值”和“衰减到收尾”。

七、常见误区与追问

  • 误区:Warmup 是为了让 loss 先下降得慢。 核心是防止早期不稳定的大更新。

  • 追问:为什么大 batch 常配 warmup? 峰值学习率常随 batch 增大,早期统计却尚未稳定。

  • 误区:按 micro-step 推进 scheduler。 梯度累积时只有 optimizer step 才是一次参数更新。

  • 追问:恢复训练要保存什么? scheduler 状态及全局 update step。

  • 追问:如何检查实现正确? 打印并绘制实际 LR,核对 warmup 峰值与结束步。

八、加强记忆

学习率曲线分成“热身到峰值”和“衰减到收尾”。

所有步数都跟着参数更新时钟走,并用真实曲线而不是配置值验收。