11. 学习率调度和 Warmup 的设计逻辑是什么?
整理学习率调度、Warmup、Cosine Decay 与 Cooldown 的设计逻辑。
简单回答
大模型训练的学习率调度通常是"Warmup + Cosine Decay"的组合。Warmup 是在训练初期用很小的学习率逐渐升高,防止随机初始化的模型在高学习率下立刻产生爆炸性的梯度;Cosine Decay 是在主训练阶段让学习率按余弦曲线下降,比线性 decay 在训练末期下降更平缓,通常效果更好。学习率是对训练结果影响最大的超参数之一,设计错了很难靠其他手段补救。
详细解答
为什么需要 Warmup
训练刚开始时,模型参数是随机初始化的,各层权重处于不平衡的状态。如果一开始就用大学习率,梯度会非常大(因为参数离"合理值"很远),更新步长过大,容易直接破坏模型的初始结构,甚至出现 Loss 爆炸。
Warmup 的做法是用线性(或其他方式)从接近 0 的学习率开始,在 步内线性增加到目标学习率 :
Warmup 的步数怎么设?通常是总训练步数的 1%5%。对于训练几十万步的大模型预训练,Warmup 通常是 10005000 步。太短起不到平缓过渡的效果,太长浪费了高学习率的训练时间。
余弦学习率调度
Warmup 结束后进入主训练阶段,学习率按余弦曲线从 下降到 (通常是 的 10% 左右):
余弦调度的优势在于:早期下降快(在离最优解还远时快速移动),后期下降慢(接近最优解时用更小的步长精细调整),比线性 decay 更符合优化的直觉。实践中余弦调度的最终效果通常比线性 decay 略好,差距在 1%~3% 之间。
Cosine with Restarts(热重启余弦)是一个变体,让学习率在到达最小值后重置到最大值,开始新一轮余弦下降。理论上能帮助优化器跳出局部最优,在某些任务上有效,但大模型预训练中并不常用。
最大学习率的设置
最大学习率 是最关键的超参数。太大会不稳定,太小训练太慢。经验上:
对于 Adam/AdamW 优化器,大模型训练的学习率通常在 到 之间。参数量越大,最优学习率通常越小——这是 Scaling Law 的推论,可以用 近似估算( 是参数量)。
学习率和 Batch Size 的关系:增大 batch size 时,通常需要线性地增大学习率(Linear Scaling Rule),因为更大的 batch 等效于梯度的方差更小,可以用更大的步长。但这个关系在 batch size 超过某个阈值后会失效,实践中需要小规模实验验证。
Cooldown 阶段
LLaMA 3 的技术报告里明确提到了"Cooldown"阶段的重要性:在训练的最后 10%~20% 步数,切换到质量更高的数据,同时把学习率快速降到非常小的值。这个阶段对最终模型质量的提升非常显著,有些团队反映比同等计算量的"正常训练"提升更大。
Cooldown 的逻辑是:学习率降到很小时,模型不再做大幅度的参数更新,而是在当前方向上做精细的拟合——这时候喂高质量数据,相当于让模型把精力集中在"记住高质量样本"上,而不是被噪音数据干扰。
实践中的注意事项
训练中途修改学习率调度:如果训练中断续训,学习率调度必须从中断点继续,而不是重新开始。这听起来显而易见,但实现时容易忘记保存和恢复 scheduler 状态。
多阶段训练的学习率设计:SFT、RLHF 这些阶段的学习率通常比预训练小 1~2 个数量级( 到 ),因为参数已经在合理范围内,不需要大步长,要避免过拟合和灾难性遗忘。
面试时可以这样答
大模型训练的学习率调度基本上是 Warmup + Cosine Decay 的标准配置。Warmup 是为了训练初期参数随机初始化,梯度大、不稳定,先用小学习率让模型稳定下来再逐渐升高,通常前 1%~5% 的步数做线性 Warmup。
余弦 Decay 比线性 Decay 效果更好,原因是它在早期下降快、后期下降慢,符合"离最优解远时大步走,接近时小步精调"的直觉。最终学习率通常设为最大值的 10% 左右。
最大学习率是最关键的超参数,Adam 大模型通常在 到 之间,参数越大学习率越小。Batch Size 增大通常要线性地增大学习率,但超过某个阈值就不再成立了。
还有一个工程细节:LLaMA 3 强调了 Cooldown 阶段——训练末期学习率快速降到很小,同时切换高质量数据,对最终模型质量提升很显著。续训时一定要保存和恢复 scheduler 状态,这个容易被漏掉。
常见追问
- 为什么大模型参数越大,最优学习率越小?有理论解释吗?
- 多阶段训练(预训练 → SFT → RLHF)时,每个阶段的学习率怎么衔接?
- 学习率衰减结束后(到了最小值),如果想继续训练怎么办?