Warmup学习率调度的作用与实现
解释Warmup策略在训练初期的作用,为什么需要它,以及Linear Warmup与Exponential Warmup的区别。
回答
专业代码师
Warmup:训练初期让学习率从0(或极小值)逐渐升至目标值的策略。
为什么需要:
- 优化稳定性:模型参数随机初始化,梯度过大时直接用大学习率可能导致梯度爆炸或NaN
- Batch Normalization:前几步统计量未稳定,大学习率加剧震荡
- 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 是最常用的实现。