学习率配方:阶段安排与选择#
TL;DR#
本页内容8 个部分
1. 先确定模型怎样使用#
学习率日程的选择取决于训练结束后要使用哪个模型,以及怎样评价它。本页区分三个目标:
- 直接使用预训练基座。 比较完成日程后的验证 loss,以及直接使用基座时的目标任务得分。
- 继续训练或比较多个训练预算。 同时比较各候选的验证 loss,以及得到全部候选模型所需的总计算量。
- 预训练后再做监督微调。 SFT(Supervised Fine-Tuning,监督微调)后的模型才是最终使用对象,应在可比调参预算下比较微调后的任务得分。
固定学习率让训练始终使用同一个学习率系数。学习率衰减逐渐减小这一系数,旨在限制训练后期的更新幅度;实际参数增量还取决于梯度与优化器状态,是否降低验证 loss 需要通过实验判断。Warmup(预热)则从较低学习率开始,逐渐升至峰值。通用更新与稳定性解释见学习率调度。
在预训练中,日程还规定训练末期的学习率。Linear(线性衰减)和 cosine(余弦衰减)通常从 warmup 结束后开始下降,需要事先指定终点。WSD(Warmup-Stable-Decay,预热—稳定—衰减)让学习率长时间保持峰值,只在末尾冷却,便于继续训练和复用多预算实验的训练主干。这里“稳定阶段”仅指学习率保持恒定,不表示 loss、梯度范数或任务得分保持不变。[1] [2]
如果预训练后还要进行 SFT,应同时比较预训练 loss 与微调后的任务得分,检查两项指标对候选日程的排序是否一致。WSO(Warmup-Stable-Only,只有预热与稳定阶段)保留恒定学习率到预训练结束,用来检验是否需要这段衰减。[3]
本篇整理文献中的日程设置与实验结果,并用统一算例核对学习率和预算。学习率函数的数值、文献报告的模型得分,以及本文的选择依据分别说明;本篇没有开展新的训练实验。
2. 候选日程及对应计算#
2.1 统一算例的预算与参数#
本页的学习率算例固定为:训练 100000 步,前 2000 步从零升到 ;需要衰减的方案最终降到 。WSD 在第 80000 步开始冷却,WSO 则保持峰值到结束。本页曲线与学习率算例共用这些输入,不将它们当作推荐超参数。
描述 token 数时,B 表示十亿,T 表示万亿;它们是数量单位,与下文的调度变量区分。
本页用成功执行的优化步数衡量调度进度,以 表示当前调度位置, 表示计划执行的优化步数, 表示 warmup 的步数。若沿用工程基础中每次成功更新处理 65536 个位置的配置,且没有尾批或跳步,窗口处理量为 。改变 batch 或出现跳步后,应累计实际处理量,不能只凭相同步数断定 token 预算相同。
本页算例中的四种配方共享相同的 warmup,区别在于 warmup 之后的学习率:
| 配方 | Warmup 后的安排 | 需要额外确定的量 |
|---|---|---|
| Linear,线性衰减 | 随剩余进度匀速下降 | 终点与最低学习率 |
| Cosine,余弦衰减 | 按余弦曲线平滑下降 | 终点与最低学习率 |
| WSD | 先保持峰值,末尾单独冷却 | 冷却起点、冷却曲线与终值 |
| WSO | 一直保持峰值 | 稳定阶段的峰值与停止位置 |
2.2 Linear 与 cosine:预先确定衰减终点#
峰值记为 ,衰减终值记为 。先固定共同的 warmup:,适用 。这里将调度进度视为连续变量,并在指定位置取样。公式规定曲线数值;实现时还应明确 scheduler 在参数更新前还是更新后推进,以确定首次更新及末次更新实际使用的学习率。Warmup 后,将剩余进度写成 ,使开始时 、结束时 。
线性插值给出:
余弦插值将 换成 :
两条曲线都在 取峰值、 取终值。在线性衰减阶段,学习率对调度进度 的导数为常数。余弦衰减在该阶段两个端点的导数为零,在阶段中点的下降速率绝对值最大。这里使用单段余弦,不使用周期重启;更多调度形式见学习率调度。
在线性与余弦衰减阶段,终点 参与学习率的计算。假如日程按 400B tokens 规划,训练到 100B tokens 时保存的检查点(checkpoint)尚未完成计划中的学习率衰减,不能直接当成专门训练 100B 并完成衰减的结果。改变训练长度后重新定义曲线,也可能在当前步产生学习率跳变。
2.3 WSD 与 WSO:是否在末尾冷却#
WSD 增加一个冷却起点 ,满足 ;在本篇例子中取 。Warmup 后保持峰值,到 才下降。以线性冷却为例,先把冷却进度归一化为 ,再在峰值与终值之间插值,得到:
冷却段公式在起点 的极限值等于峰值,与稳定段衔接;在终点 ,学习率等于衰减终值。加上共同的 warmup,整个日程连续。WSD 是阶段安排,冷却段也可以采用其他曲线;本页统一使用线性冷却,以便与算例及 WSO 比较。[1] [3]
如果完全去掉冷却,warmup 后直接保持峰值,就得到 WSO:
把 WSD 的终值设为 ,也得到 warmup 后保持恒定的同一条 WSO 曲线。“不衰减”指预训练 warmup 之后不降低学习率;是否在 SFT 中衰减,是另一项配置。
图中横轴是调度位置 ,纵轴是学习率与共同峰值的比值 。第 80000 步以前,WSD 与 WSO 重合;之后 WSD 冷却,WSO 的虚线继续保持峰值。
2.4 同一调度位置的学习率比较#
沿用 100000 步窗口、2000 步 warmup、峰值 与衰减终值 ,WSD 从第 80000 步开始冷却。以下计算学习率函数的输出,不是训练效果实验;WSO 不使用其他方案的衰减终值。
先算 。Linear 与 cosine 的衰减进度为 ,WSD 冷却段的剩余比例为 。代入各自公式:
下表统一以 为单位。例如 1.65 表示学习率 ,不是步数或任务得分。
| 调度位置 | Linear | Cosine | WSD | WSO |
|---|---|---|---|---|
| 1,000 | 1.5000 | 1.5000 | 1.5000 | 1.5000 |
| 2,000 | 3.0000 | 3.0000 | 3.0000 | 3.0000 |
| 51,000 | 1.6500 | 1.6500 | 3.0000 | 3.0000 |
| 80,000 | 0.8510 | 0.5681 | 3.0000 | 3.0000 |
| 90,000 | 0.5755 | 0.3688 | 1.6500 | 3.0000 |
| 100,000 | 0.3000 | 0.3000 | 0.3000 | 3.0000 |
在同一调度位置 ,四种方案输出的学习率不同。这些数值不能直接给出参数更新量,也不能判断哪种方案的验证 loss 或任务得分更优。
3. 对比条件与完整预算#
3.1 区分曲线对比与调参后的方案对比#
若比较学习率曲线形状对训练结果的影响,应固定模型、数据顺序、每次更新使用的全局 batch、总训练 token 数、优化器及其超参数、峰值学习率,并采用相同的损失聚合规则。若目标是比较各日程经调参后的微调任务得分,则应分别搜索峰值学习率,以及适用日程的冷却长度,并为各方法分配可比的搜索预算。
比较曲线形状时,共享峰值用于控制变量;比较各方案能达到的结果时,各自的峰值也需要进入搜索。因此,“共享峰值下谁的得分更高”和“分别调参后谁的得分更高”不是同一个实验问题。
3.2 将冷却计入预算,再核算主干复用#
若要比较同一个模型训练 100B、200B、400B tokens 的结果,可以在共同的 warmup 后维持恒定学习率,在不同位置保存 checkpoint 并从这些状态分别进行末尾冷却。本文将这次不进入冷却阶段的持续训练称为主干,将从 checkpoint 开始的各次冷却训练称为分支。复用主干要求各候选在分支前使用相同的模型初始化、数据顺序、全局 batch、优化器和学习率日程。分支应从保存的完整训练状态恢复,包括相应的随机状态和数据读取进度。
每个候选的训练预算都应包含冷却步数。设候选 的目标预算为 步,冷却长度为 步;为保留共同的 warmup 和非空稳定阶段,要求 。分支从主干的 步开始;如果主干先训练 步再追加冷却,总预算已变成 。模型大小固定时,各分支的近似训练计算量仍可按 Chinchilla 的 口径核算。
恒定学习率主干在 warmup 后不依赖预先指定的衰减终点,但这不表示峰值学习率在任意训练长度下都最优。训练越久,原来的峰值可能需要重调;改变数据分布后也需要重新验证。若目标是 SFT 后的表现,还应将未冷却 checkpoint 纳入具有可比调参范围和计算预算的微调比较,不能只保留冷却后 loss 最低的分支。
现在为同一个模型比较 50000 步与 100000 步两种终点。仍使用前面的峰值、最低值和 2000 步 warmup;两个终点都预留末尾 20% 做线性冷却。短方案在第 40000 步分支,长方案在第 80000 步分支:
| 目标终点 | 冷却分支起点 | 冷却长度 | 单个候选的完整预算 |
|---|---|---|---|
| 50000 步 | 40000 步 | 10000 步 | 50000 步 |
| 100000 步 | 80000 步 | 20000 步 | 100000 步 |
主干在第 40000 步保存 checkpoint,随后继续训练到第 80000 步。短分支从第 40000 步的完整训练状态恢复,再进行 10000 步冷却;长分支从第 80000 步的状态恢复,再进行 20000 步冷却。因此,获得两个候选模型所需的总训练步数为:
独立训练两次则需要 步。在模型、每步处理量和单步计算量相同时,训练计算量的节省比例为 。这里比较的是为得到两个候选而消耗的总训练量;每个候选本身仍分别只用了 50000、100000 步。
这是共享同一峰值和 warmup 的预算手算,没有计入 checkpoint I/O、评测或多组超参数搜索的成本。若两个候选采用不同的峰值或 warmup,其分支前的日程就可能不同,需要重新确定可复用的训练区间。
3.3 学习率变化还会改变累计权重衰减#
日程也会改变 AdamW 权重衰减的累计作用。对使用权重衰减的参数,忽略梯度更新时,单步衰减项为 ,其中 为衰减系数;只考虑衰减项并跨步累乘,得到 。因此,同一 配合不同学习率曲线,累计衰减因子一般也不同。这里所说的收缩假设每步满足 。这是解释实验时需要考虑的配方耦合,不能把观察到的全部差异直接归因于单一的局部曲率变化;更新规则见 AdamW。
4. 文献结果及其支持的结论#
4.1 恒定主干加冷却的多预算实验#
Hägele 等的实验中,恒定学习率加冷却获得了与完整 cosine 日程相近的验证 loss;复用分支前的训练也减少了多预算实验的重复计算。[2]
这支持在训练长度未定或需要比较多个预算时,将恒定主干加冷却作为候选。复用的对象是各候选共同执行的训练前缀,而不是免除各候选自己的冷却成本。110000 步与 150000 步的比较是本篇在固定每步计算量下的预算手算,不是文献报告的实际运行耗时。
4.2 WSO:预训练指标与 SFT 后得分的排序#
下面使用文献报告的两阶段训练结果检验选择依据,与学习率函数的手算结果分开。实验固定 FineWeb-Edu 预训练数据与 峰值,对 1B、8B 的 Llama 3 架构模型比较日程;随后在 Tulu-3 混合数据上全参数 SFT,按相同搜索方案分别选择微调学习率,SFT 自身使用 warmup 加 cosine 衰减。文献中的预训练衰减方案分别测试了终值为峰值 0% 和 10% 的设置,WSO 则在 warmup 后保持峰值。下面的文献结果不只覆盖手算采用的 10% 终值。[3]
论文表 1 中,每列分别以该规模下该指标最优的衰减方案为基线,报告 WSO 减去基线的差值:
| WSO 模型规模 | 预训练验证 loss 差值,越低越好 | 预训练任务平均分差值,越高越好 | SFT 后任务平均分差值,越高越好 |
|---|---|---|---|
| 1B | +0.071 | −1.7 个百分点 | +0.3 个百分点 |
| 8B | +0.127 | −0.8 个百分点 | +1.1 个百分点 |
这些列的比较基线可能是不同配置,不能把一整行理解为相对同一个模型的差距。SFT 后平均分汇总 AlpacaEval、TruthfulQA 与 MMLU;其平均值更高也不表示每个任务都更好。在这些候选中,如果仅保留预训练验证 loss 最低的模型,就会排除表中 SFT 后平均分最高的 WSO。
要把这一比较落实到选型目标,设 表示一条预训练日程, 为按该日程得到的参数; 表示 SFT 配置, 表示从该参数出发微调得到的模型, 是约定评测集上的得分。若最终使用的是微调模型,概念上的选型目标是:
内层在给定候选集合中选择使该基座微调后得分最高的 SFT 配置,外层比较各预训练日程对应的最高得分。实际搜索只能覆盖有限候选,各日程需要可比的搜索范围和预算。先按预训练 loss 选出一个基座、再只微调它,可能提前淘汰最终表现更好的候选。[3]
5. 选择依据与迁移局限性#
| 使用目标 | 应保留的比较 | 判断依据 |
|---|---|---|
| 直接使用预训练模型 | 完成日程的 cosine、linear、WSD 等候选 | 验证 loss 与直接使用基座时的目标任务得分 |
| 训练长度未定或设计多规模训练实验 | 恒定主干、不同预算的冷却分支 | 获得全部候选所需的总计算量及各候选的验证 loss |
| 为 SFT 提供基座 | 冷却与未冷却 checkpoint 都进入微调 | 在可比 SFT 搜索预算下比较微调后的目标任务得分 |
WSO 的实验结果支持在微调比较中保留未冷却 checkpoint,但不足以确定其他训练设置也应取消衰减。两阶段实验中,不同预训练日程使用同一峰值学习率,这不能确定各日程分别调优后的最优峰值;后续微调的搜索设置也属于结论的条件。还应检查单项任务与重复运行的波动,而不是只看一个平均值。
相关研究也测试了加入 mid-training(中间训练阶段)以及 1B 模型处理 2T tokens 的设置;这些结果仅支持文中测试的训练流程,不能保证在偏好优化、强化学习、LoRA 或新的数据分布下仍有相同的任务得分排序。[3]
预训练验证 loss 仍用于评价该阶段的训练结果;当最终目标是 SFT 后的任务得分时,还需要保留冷却和未冷却的基座进行后续比较。局部曲率可以帮助分析差异,但不能替代任务评测,也不能仅凭相关性确定因果关系。[3]
参考资料#
- MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies,Hu 等,2024。§4:WSD 的阶段安排与多训练长度实验。
- Scaling Laws and Compute-Optimal Training Beyond Fixed Training Durations,Hägele 等,2024。§3、§5:恒定学习率主干、冷却分支与 scaling 实验复用。
- Pre-training LLM without Learning Rate Decay Enhances Supervised Fine-Tuning,Yano 等,2026,arXiv:2603.16127v1。§2–3 给出日程与两阶段比较;§6 分析局部曲率;附录 D–F 说明 SFT 配置、评测与完整结果。
补充推导#
局部曲率为什么不能单独决定 SFT 后的表现?
相关研究用损失的局部曲率解释不同预训练日程在后续 SFT 中的差异:衰减可能降低当前 loss,同时改变参数所在区域的局部曲率。设 为选定数据集上的损失, 为当前参数向量, 为同维度的参数位移。损失在该点附近二阶可微、位移足够小时,可以作局部二阶近似:
其中 是该损失对参数的 Hessian 矩阵。最后一项是给定位移方向上的二阶项;仅知道当前损失较低,无法确定该项的大小。因此,当前 loss 不能单独确定后续微调中的损失变化。
WSO 论文在 1B 模型实验中用 Hessian 的迹估计局部尖锐程度,观察到衰减方案的该指标更高,且 Hessian 迹与 SFT 后平均分负相关。该相关性与“局部曲率和后续微调表现有关”的解释一致,但不能单独证明因果关系。较低的 Hessian 迹也不能保证任意给定微调方向上的损失增量更小。Hessian 的迹是其对角元素之和,不能单独确定给定位移的二阶项 。实际微调的参数位移还取决于梯度、优化器状态和学习率,因此局部曲率测量不能替代微调后的任务评测。[3]