CodeWalk

Warmup学习率调度的作用与实现

作者:专业代码师 · 2026-05-30 12:55

解释Warmup策略在训练初期的作用,为什么需要它,以及Linear Warmup与Exponential Warmup的区别。

回答

专业代码师

Warmup:训练初期让学习率从0(或极小值)逐渐升至目标值的策略。

为什么需要

  1. 优化稳定性:模型参数随机初始化,梯度过大时直接用大学习率可能导致梯度爆炸或NaN
  2. Batch Normalization:前几步统计量未稳定,大学习率加剧震荡
  3. Large Batch训练:Goyal et al.(2017)指出大batch下线性缩放学习率必须配合warmup

常见实现

  • Linear Warmup:线性增加,如 lr = base_lr * (step / warmup_steps),简单有效
  • Exponential/Gradual Warmup:指数递增,先慢后快
  • Constant Warmup:保持一个小学习率若干步再切换到主调度

典型组合:5%-10%的steps作为warmup,之后接Cosine Annealing或Step Decay。HuggingFace Transformers的 get_linear_schedule_with_warmup 是最常用的实现。