学习率调度:warmup 与衰减

学习率决定了参数每次沿梯度方向更新的步长。固定学习率常难两全:太大易震荡不收敛,太小则训练缓慢。学习率调度器在训练过程中按规则改变学习率,是训练 Transformer、卷积网络等模型的常规配置。

warmup:先小步热身

训练初期参数随机、梯度噪声大,若一上来就用大学习率容易不稳定。warmup 在前若干步(或若干 epoch)把学习率从接近 0 线性或余弦升到目标值,让优化先进入较平稳的区域,再转入正常调度。这在 Transformer 与大规模训练中尤为重要。

import torch

optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4)
scheduler = torch.optim.lr_scheduler.LinearLR(
    optimizer, start_factor=0.01, total_iters=1000)   # 前 1000 步 warmup

衰减:后期收窄步长

warmup 之后常用衰减策略逐步减小学习率,让参数在盆地附近精细收敛。常见策略有:阶梯衰减(StepLR,按周期折半)、指数衰减、余弦退火(CosineAnnealing,平滑下降到接近 0)。余弦退火因收敛平滑、无需手调阈值而被广泛采用。

怎么选

小数据集与简单模型用固定或阶梯学习率往往足够;大模型与 Transformer 通常需要 warmup 配合余弦退火。调度参数(峰值、warmup 步数、最小学习率)需结合 batch size 与总步数一起调,batch 越大常可配更大峰值学习率。

小结

学习率调度通过 warmup 热身稳定早期训练、再用衰减在后期精细收敛,是控制优化节奏的核心手段。warmup 加余弦退火在大模型训练中已成为主流组合,但具体参数应随数据规模与 batch 大小一起实验确定。

参考与延伸阅读

本文累计阅读