模型预训练 / 训练配方 Recipe进阶 12 分钟阅读 查看源文件 ↗

学习率配方:阶段安排与选择#

TL;DR#

本页内容8 个部分

学习率配方:按模型使用目标确定候选日程、对比预算和评价指标

1. 先确定模型怎样使用#

学习率日程的选择取决于训练结束后要使用哪个模型,以及怎样评价它。本页区分三个目标:

  1. 直接使用预训练基座。 比较完成日程后的验证 loss,以及直接使用基座时的目标任务得分。
  2. 继续训练或比较多个训练预算。 同时比较各候选的验证 loss,以及得到全部候选模型所需的总计算量。
  3. 预训练后再做监督微调。 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 步从零升到 3×10−43\times10^{-4};需要衰减的方案最终降到 3×10−53\times10^{-5}。WSD 在第 80000 步开始冷却,WSO 则保持峰值到结束。本页曲线与学习率算例共用这些输入,不将它们当作推荐超参数。

描述 token 数时,B 表示十亿,T 表示万亿;它们是数量单位,与下文的调度变量区分。

本页用成功执行的优化步数衡量调度进度,以 tt 表示当前调度位置,T=100000T=100000 表示计划执行的优化步数,Tw=2000T_w=2000 表示 warmup 的步数。若沿用工程基础中每次成功更新处理 65536 个位置的配置,且没有尾批或跳步,窗口处理量为 窗口处理位置数=100000×65536=6,553,600,000\text{窗口处理位置数}=100000\times65536=6{,}553{,}600{,}000。改变 batch 或出现跳步后,应累计实际处理量,不能只凭相同步数断定 token 预算相同。

本页算例中的四种配方共享相同的 warmup,区别在于 warmup 之后的学习率:

配方 Warmup 后的安排 需要额外确定的量
Linear,线性衰减 随剩余进度匀速下降 终点与最低学习率
Cosine,余弦衰减 按余弦曲线平滑下降 终点与最低学习率
WSD 先保持峰值,末尾单独冷却 冷却起点、冷却曲线与终值
WSO 一直保持峰值 稳定阶段的峰值与停止位置

2.2 Linear 与 cosine:预先确定衰减终点#

峰值记为 ηmax⁡=3×10−4\eta_{\max}=3\times10^{-4},衰减终值记为 ηmin⁡=3×10−5\eta_{\min}=3\times10^{-5}。先固定共同的 warmup:ηt=ηmax⁡t/Tw\eta_t=\eta_{\max}t/T_w,适用 0≤t≤Tw0\le t\le T_w。这里将调度进度视为连续变量,并在指定位置取样。公式规定曲线数值;实现时还应明确 scheduler 在参数更新前还是更新后推进,以确定首次更新及末次更新实际使用的学习率。Warmup 后,将剩余进度写成 u=(t−Tw)/(T−Tw)u=(t-T_w)/(T-T_w),使开始时 u=0u=0、结束时 u=1u=1。

线性插值给出:

ηtlinear=ηmin⁡+(ηmax⁡−ηmin⁡)(1−u),Tw≤t≤T.\eta_t^{\mathrm{linear}}=\eta_{\min}+(\eta_{\max}-\eta_{\min})(1-u),\qquad T_w\le t\le T.

余弦插值将 1−u1-u 换成 (1+cos⁡(πu))/2(1+\cos(\pi u))/2:

ηtcosine=ηmin⁡+ηmax⁡−ηmin⁡2[1+cos⁡(πt−TwT−Tw)],Tw≤t≤T.\eta_t^{\mathrm{cosine}}=\eta_{\min}+\frac{\eta_{\max}-\eta_{\min}}2\left[1+\cos\left(\pi\frac{t-T_w}{T-T_w}\right)\right],\qquad T_w\le t\le T.

两条曲线都在 t=Twt=T_w 取峰值、t=Tt=T 取终值。在线性衰减阶段,学习率对调度进度 tt 的导数为常数。余弦衰减在该阶段两个端点的导数为零,在阶段中点的下降速率绝对值最大。这里使用单段余弦,不使用周期重启;更多调度形式见学习率调度。

在线性与余弦衰减阶段,终点 TT 参与学习率的计算。假如日程按 400B tokens 规划,训练到 100B tokens 时保存的检查点(checkpoint)尚未完成计划中的学习率衰减,不能直接当成专门训练 100B 并完成衰减的结果。改变训练长度后重新定义曲线,也可能在当前步产生学习率跳变。

2.3 WSD 与 WSO:是否在末尾冷却#

WSD 增加一个冷却起点 TsT_s,满足 Tw<Ts<TT_w<T_s<T;在本篇例子中取 Ts=80000T_s=80000。Warmup 后保持峰值,到 TsT_s 才下降。以线性冷却为例,先把冷却进度归一化为 (t−Ts)/(T−Ts)(t-T_s)/(T-T_s),再在峰值与终值之间插值,得到:

ηtWSD={ηmax⁡tTw,0≤t≤Tw,ηmax⁡,Tw<t≤Ts,ηmin⁡+(ηmax⁡−ηmin⁡)T−tT−Ts,Ts<t≤T.\eta_t^{\mathrm{WSD}}= \begin{cases} \eta_{\max}\dfrac{t}{T_w}, & 0\le t\le T_w,\\ \eta_{\max}, & T_w<t\le T_s,\\ \eta_{\min}+(\eta_{\max}-\eta_{\min})\dfrac{T-t}{T-T_s}, & T_s<t\le T. \end{cases}

冷却段公式在起点 t=Tst=T_s 的极限值等于峰值,与稳定段衔接;在终点 t=Tt=T,学习率等于衰减终值。加上共同的 warmup,整个日程连续。WSD 是阶段安排,冷却段也可以采用其他曲线;本页统一使用线性冷却,以便与算例及 WSO 比较。[1] [3]

如果完全去掉冷却,warmup 后直接保持峰值,就得到 WSO:

ηtWSO={ηmax⁡tTw,0≤t≤Tw,ηmax⁡,Tw<t≤T.\eta_t^{\mathrm{WSO}}= \begin{cases} \eta_{\max}\dfrac{t}{T_w}, & 0\le t\le T_w,\\ \eta_{\max}, & T_w<t\le T. \end{cases}

把 WSD 的终值设为 ηmin⁡=ηmax⁡\eta_{\min}=\eta_{\max},也得到 warmup 后保持恒定的同一条 WSO 曲线。“不衰减”指预训练 warmup 之后不降低学习率;是否在 SFT 中衰减,是另一项配置。

同一预算下 Linear、Cosine、WSD 与 WSO 的学习率曲线,单位为峰值比例

图中横轴是调度位置 tt,纵轴是学习率与共同峰值的比值 ηt/ηmax⁡\eta_t/\eta_{\max}。第 80000 步以前,WSD 与 WSO 重合;之后 WSD 冷却,WSO 的虚线继续保持峰值。

2.4 同一调度位置的学习率比较#

沿用 100000 步窗口、2000 步 warmup、峰值 3×10−43\times10^{-4} 与衰减终值 3×10−53\times10^{-5},WSD 从第 80000 步开始冷却。以下计算学习率函数的输出,不是训练效果实验;WSO 不使用其他方案的衰减终值。

先算 t=90000t=90000。Linear 与 cosine 的衰减进度为 u=88000/98000=44/49u=88000/98000=44/49,WSD 冷却段的剩余比例为 冷却剩余比例=(100000−90000)/(100000−80000)=1/2\text{冷却剩余比例}=(100000-90000)/(100000-80000)=1/2。代入各自公式:

η90000linear=3×10−5+2.7×10−4(1−4449)≈5.7551×10−5,η90000cosine=3×10−5+2.7×10−42[1+cos⁡(44π49)]≈3.6877×10−5,η90000WSD=3×10−5+2.7×10−4×12=1.65×10−4,η90000WSO=3×10−4.\begin{aligned} \eta_{90000}^{\mathrm{linear}} &=3\times10^{-5}+2.7\times10^{-4}\left(1-\frac{44}{49}\right) \approx5.7551\times10^{-5},\\ \eta_{90000}^{\mathrm{cosine}} &=3\times10^{-5}+\frac{2.7\times10^{-4}}2\left[1+\cos\left(\frac{44\pi}{49}\right)\right] \approx3.6877\times10^{-5},\\ \eta_{90000}^{\mathrm{WSD}} &=3\times10^{-5}+2.7\times10^{-4}\times\frac12 =1.65\times10^{-4},\\ \eta_{90000}^{\mathrm{WSO}}&=3\times10^{-4}. \end{aligned}

下表统一以 10−410^{-4} 为单位。例如 1.65 表示学习率 1.65×10−41.65\times10^{-4},不是步数或任务得分。

调度位置 tt 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

在同一调度位置 t=90000t=90000,四种方案输出的学习率不同。这些数值不能直接给出参数更新量,也不能判断哪种方案的验证 loss 或任务得分更优。

3. 对比条件与完整预算#

3.1 区分曲线对比与调参后的方案对比#

若比较学习率曲线形状对训练结果的影响,应固定模型、数据顺序、每次更新使用的全局 batch、总训练 token 数、优化器及其超参数、峰值学习率,并采用相同的损失聚合规则。若目标是比较各日程经调参后的微调任务得分,则应分别搜索峰值学习率,以及适用日程的冷却长度,并为各方法分配可比的搜索预算。

比较曲线形状时,共享峰值用于控制变量;比较各方案能达到的结果时,各自的峰值也需要进入搜索。因此,“共享峰值下谁的得分更高”和“分别调参后谁的得分更高”不是同一个实验问题。

3.2 将冷却计入预算,再核算主干复用#

若要比较同一个模型训练 100B、200B、400B tokens 的结果,可以在共同的 warmup 后维持恒定学习率,在不同位置保存 checkpoint 并从这些状态分别进行末尾冷却。本文将这次不进入冷却阶段的持续训练称为主干,将从 checkpoint 开始的各次冷却训练称为分支。复用主干要求各候选在分支前使用相同的模型初始化、数据顺序、全局 batch、优化器和学习率日程。分支应从保存的完整训练状态恢复,包括相应的随机状态和数据读取进度。

每个候选的训练预算都应包含冷却步数。设候选 jj 的目标预算为 TjT_j 步,冷却长度为 KjK_j 步;为保留共同的 warmup 和非空稳定阶段,要求 0<Kj<Tj−Tw0<K_j<T_j-T_w。分支从主干的 Tj−KjT_j-K_j 步开始;如果主干先训练 TjT_j 步再追加冷却,总预算已变成 Tj+KjT_j+K_j。模型大小固定时,各分支的近似训练计算量仍可按 Chinchilla 的 C≈6NDC\approx6ND 口径核算。

恒定学习率主干在 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 步冷却。因此,获得两个候选模型所需的总训练步数为:

Tshared=80000+10000+20000=110000 步.T_{\mathrm{shared}}=80000+10000+20000=110000\ \text{步}.

独立训练两次则需要 Tindependent=50000+100000=150000T_{\mathrm{independent}}=50000+100000=150000 步。在模型、每步处理量和单步计算量相同时,训练计算量的节省比例为 计算量节省比例=(150000−110000)/150000≈26.7%\text{计算量节省比例}=(150000-110000)/150000\approx26.7\%。这里比较的是为得到两个候选而消耗的总训练量;每个候选本身仍分别只用了 50000、100000 步。

这是共享同一峰值和 warmup 的预算手算,没有计入 checkpoint I/O、评测或多组超参数搜索的成本。若两个候选采用不同的峰值或 warmup,其分支前的日程就可能不同,需要重新确定可复用的训练区间。

3.3 学习率变化还会改变累计权重衰减#

日程也会改变 AdamW 权重衰减的累计作用。对使用权重衰减的参数,忽略梯度更新时,单步衰减项为 θ←(1−ηtλ)θ\theta\leftarrow(1-\eta_t\lambda)\theta,其中 λ\lambda 为衰减系数;只考虑衰减项并跨步累乘,得到 累计衰减因子=∏t(1−ηtλ)\text{累计衰减因子}=\prod_t(1-\eta_t\lambda)。因此,同一 λ\lambda 配合不同学习率曲线,累计衰减因子一般也不同。这里所说的收缩假设每步满足 0≤ηtλ<10\le\eta_t\lambda<1。这是解释实验时需要考虑的配方耦合,不能把观察到的全部差异直接归因于单一的局部曲率变化;更新规则见 AdamW。

4. 文献结果及其支持的结论#

4.1 恒定主干加冷却的多预算实验#

Hägele 等的实验中,恒定学习率加冷却获得了与完整 cosine 日程相近的验证 loss;复用分支前的训练也减少了多预算实验的重复计算。[2]

这支持在训练长度未定或需要比较多个预算时,将恒定主干加冷却作为候选。复用的对象是各候选共同执行的训练前缀,而不是免除各候选自己的冷却成本。110000 步与 150000 步的比较是本篇在固定每步计算量下的预算手算,不是文献报告的实际运行耗时。

4.2 WSO:预训练指标与 SFT 后得分的排序#

下面使用文献报告的两阶段训练结果检验选择依据,与学习率函数的手算结果分开。实验固定 FineWeb-Edu 预训练数据与 3×10−43\times10^{-4} 峰值,对 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。

要把这一比较落实到选型目标,设 ss 表示一条预训练日程,θs\theta_s 为按该日程得到的参数;hh 表示 SFT 配置,SFT⁡h(θs)\operatorname{SFT}_h(\theta_s) 表示从该参数出发微调得到的模型,Score⁡\operatorname{Score} 是约定评测集上的得分。若最终使用的是微调模型,概念上的选型目标是:

s∗=arg⁡max⁡s  max⁡hScore⁡ ⁣(SFT⁡h(θs)).s^*=\underset{s}{\arg\max}\;\max_h\operatorname{Score}\!\left(\operatorname{SFT}_h(\theta_s)\right).

内层在给定候选集合中选择使该基座微调后得分最高的 SFT 配置,外层比较各预训练日程对应的最高得分。实际搜索只能覆盖有限候选,各日程需要可比的搜索范围和预算。先按预训练 loss 选出一个基座、再只微调它,可能提前淘汰最终表现更好的候选。[3]

5. 选择依据与迁移局限性#

使用目标 应保留的比较 判断依据
直接使用预训练模型 完成日程的 cosine、linear、WSD 等候选 验证 loss 与直接使用基座时的目标任务得分
训练长度未定或设计多规模训练实验 恒定主干、不同预算的冷却分支 获得全部候选所需的总计算量及各候选的验证 loss
为 SFT 提供基座 冷却与未冷却 checkpoint 都进入微调 在可比 SFT 搜索预算下比较微调后的目标任务得分

WSO 的实验结果支持在微调比较中保留未冷却 checkpoint,但不足以确定其他训练设置也应取消衰减。两阶段实验中,不同预训练日程使用同一峰值学习率,这不能确定各日程分别调优后的最优峰值;后续微调的搜索设置也属于结论的条件。还应检查单项任务与重复运行的波动,而不是只看一个平均值。

相关研究也测试了加入 mid-training(中间训练阶段)以及 1B 模型处理 2T tokens 的设置;这些结果仅支持文中测试的训练流程,不能保证在偏好优化、强化学习、LoRA 或新的数据分布下仍有相同的任务得分排序。[3]

预训练验证 loss 仍用于评价该阶段的训练结果;当最终目标是 SFT 后的任务得分时,还需要保留冷却和未冷却的基座进行后续比较。局部曲率可以帮助分析差异,但不能替代任务评测,也不能仅凭相关性确定因果关系。[3]

参考资料#

  1. MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies,Hu 等,2024。§4:WSD 的阶段安排与多训练长度实验。
  2. Scaling Laws and Compute-Optimal Training Beyond Fixed Training Durations,Hägele 等,2024。§3、§5:恒定学习率主干、冷却分支与 scaling 实验复用。
  3. 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,同时改变参数所在区域的局部曲率。设 L\mathcal L 为选定数据集上的损失,θ\theta 为当前参数向量,Δ\Delta 为同维度的参数位移。损失在该点附近二阶可微、位移足够小时,可以作局部二阶近似:

L(θ+Δ)≈L(θ)+∇L(θ)⊤Δ+12Δ⊤H(θ)Δ,\mathcal L(\theta+\Delta)\approx\mathcal L(\theta)+\nabla\mathcal L(\theta)^\top\Delta+\frac12\Delta^\top H(\theta)\Delta,

其中 H(θ)H(\theta) 是该损失对参数的 Hessian 矩阵。最后一项是给定位移方向上的二阶项;仅知道当前损失较低,无法确定该项的大小。因此,当前 loss 不能单独确定后续微调中的损失变化。

WSO 论文在 1B 模型实验中用 Hessian 的迹估计局部尖锐程度,观察到衰减方案的该指标更高,且 Hessian 迹与 SFT 后平均分负相关。该相关性与“局部曲率和后续微调表现有关”的解释一致,但不能单独证明因果关系。较低的 Hessian 迹也不能保证任意给定微调方向上的损失增量更小。Hessian 的迹是其对角元素之和,不能单独确定给定位移的二阶项 Δ⊤H(θ)Δ\Delta^\top H(\theta)\Delta。实际微调的参数位移还取决于梯度、优化器状态和学习率,因此局部曲率测量不能替代微调后的任务评测。[3]