Warmup
Warmup(Learning Rate Warmup,学习率预热)
3 秒看懂
训练大模型时,学习率不是一上来就拉满,而是从一个极小值(甚至接近零)逐步升到目标值——这个”慢启动”过程就叫 Warmup。 没有它,随机初始化的参数在高学习率下极易梯度爆炸、训练发散。它是如今几乎所有大模型训练的”标配开关”。
3 分钟产业解释
为什么工程师离不开 Warmup?
大模型训练(如 Transformer 架构)面临一个核心矛盾:训练初期,模型权重是随机初始化的,损失曲面非常”陡峭”且不稳定;但如果一开始就用很小的学习率,后期收敛会极慢。
Warmup 的解法朴素而有效:
- 起步阶段(前几千到几万步):学习率从 ≈0 线性(或按其他曲线)升到预设峰值
\eta_{max}。 - 正常训练阶段:之后配合 Cosine Decay、Linear Decay 等调度器,将学习率从峰值逐步降低。
产业价值:
- 对于参数量从数十亿到数万亿的模型(GPT 系列、LLaMA、PaLM 等),Warmup 步数通常是总训练步数的 0.1%–2% 量级,看似微小,但若去掉,训练大概率在前几百步就出现 loss spike 或彻底崩溃。
- 它是训练超参数调优中成本最低、收益最高的单项之一——通常只需设定一个
warmup_steps或warmup_ratio,无需额外计算资源。 - 对于分布式训练(数据并行、张量并行、流水线并行),初始阶段各并行分支的梯度方差更大,Warmup 的稳定作用更加关键。
15 分钟专家深入
核心机制拆解
问题本质: 随机初始化时,模型各层的激活值和梯度统计量(均值、方差)尚未经训练”校准”。若此时施加较大的参数更新,会导致:
- 某些层的激活值指数级放大(尤其是深层网络中的残差连接路径)
- 梯度范数剧烈波动 → loss 震荡或直接 NaN
- 注意力分布退化为近似均匀,softmax 饱和
Warmup 的数学直觉: 给优化器”热身时间”,让 Adam/AdamW 的一阶矩(动量)和二阶矩(自适应学习率)估计器收集足够的梯度统计信息后再用大步长更新。
经典 Warmup 调度形式
① 线性 Warmup(最常用)
\eta_t = \eta_{max} \cdot \frac{t}{T_w}, \quad t \leq T_w
其中 T_w 为总 warmup 步数。之后接主调度器(如 Cosine Decay)。
② Transformer 原始调度(Vaswani et al., 2017)
\eta_t = d_{model}^{-0.5} \cdot \min\!\left(t^{-0.5},\; t \cdot T_w^{-1.5}\right)
这个公式将 warmup 和 inverse-square-root decay 合为一体,在 t = T_w 处达到峰值。现代大模型训练已较少使用此原始形式,更常用线性 warmup + cosine decay 的组合。
③ Gradual Warmup(Goyal et al., 2017, “Accurate, Large Minibatch SGD”)
在 ImageNet 大 batch 训练中提出:先用小学习率训练 5 个 epoch(线性升温),再切换到正常学习率。该工作证明了 warmup 使得用大 batch(如 8192)训练成为可能,且精度不损失。
常见超参数设置(行业实践归纳)
| 模型规模 | 典型 Warmup 步数 | 占总训练步数比例 | 来源 |
|---|---|---|---|
| BERT-Large(340M) | ~10,000 步 | ~1%(总步 1M) | Google 原始论文 |
| GPT-3(175B) | 约 117 步(375M tokens) | 极小比例 | OpenAI 论文 [估算] |
| LLaMA 系列 | 2,000 步 | 据公开配置文件 | Meta 开源配置 |
| 大规模预训练(通用) | 1,000–10,000 步 | 0.1%–5% | [行业共识] |
⚠️ 以上为基于公开论文与开源配置的归纳,实际训练中因 batch size、数据量不同而差异显著,无唯一”正确值”。
为什么 Adam/AdamW 尤其需要 Warmup?
SGD 类优化器也需要 warmup,但 Adam 系列有额外的脆弱性:
Adam 的参数更新为:
\theta_{t+1} = \theta_t - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
在 $t$ 很小时,二阶矩估计 \hat{v}_t 的偏差校正项 \frac{1}{1-\beta_2^t} 会放大有效步长。当 \beta_2 = 0.999(常见设置)时:
| 步数 $t$ | 偏差校正因子 \frac{1}{1-\beta_2^t} |
|---|---|
| 1 | ~1000 |
| 10 | ~100 |
| 100 | ~10 |
| 1000 | ~1.58 |
也就是说,Adam 在最初几步的有效学习率可能是设定值的成百上千倍! Warmup 直接压制了这一爆炸性放大。
技术原理(深度机制)
从损失曲面几何角度理解 Warmup
训练初期的损失曲面示意(概念图):
Loss
│
│ ╱╲ ╱╲
│ ╱ ╲ ╱ ╲ ← 高曲率、多尖峰(sharp minima 密集)
│ ╱ ╲ ╱ ╲
│╱ ╲╱ ╲___________
└──────────────────────────── 参数空间
↑
随机初始化在此区间
Warmup 的作用:用小步长 "试探" 曲面 → 避免一步跳入高损失区域
关键理论支撑:
-
梯度方差视角(Gradient Variance)
- 初始化时,mini-batch 梯度的方差极大(参数未收敛 → 各样本梯度方向不一致)
- 大学习率 + 高方差 = 参数更新方向被噪声主导 → 发散
- Warmup 让方差逐步降低后再放大步长
-
Loss Sharpness 与泛化(Jiang et al., 2020; Foret et al., 2021)
- 有研究指出,训练初期跳入 sharp minima 会导致后期难以逃出
- 小学习率 warmup 相当于一种隐式的 sharpness-aware 初始化路径选择
-
与 Batch Normalization 的类比
- BN 通过归一化激活值来稳定训练,但 Pre-LN Transformer 中通常不使用 BN(用 LayerNorm)
- LayerNorm 虽归一化了激活,但不归一化梯度流,因此无法替代 warmup 的作用
- 不过:Pre-LN 架构相比 Post-LN 对 warmup 的依赖度确实更低(详见下文误读纠偏)
Warmup 与主调度器的衔接
学习率
│ ┌─────────────────────── Cosine Decay ──────→ 0
│ ╱
│ ╱
│ ╱ ← 线性 Warmup
│ ╱
│ ╱
│──╱
└──┼────┼────────────────────────────────────────→ 步数
0 T_w (warmup结束)
Post-Warmup 常见主调度器:
| 调度器 | 公式 | 典型使用场景 |
|---|---|---|
| Cosine Decay | \eta_t = \eta_{min} + \frac{1}{2}(\eta_{max}-\eta_{min})(1+\cos(\frac{t-T_w}{T_{total}-T_w}\pi)) | GPT、LLaMA、大多数 LLM |
| Linear Decay | \eta_t = \eta_{max}(1 - \frac{t-T_w}{T_{total}-T_w}) | BERT 原始 |
| WSD (Warmup-Stable-Decay) | 先 warmup,再长时间恒定 lr,最后短时间快速衰减 | MiniCPM、部分实践 [近期趋势] |
| Inverse Sqrt | \eta_t \propto t^{-0.5} | 原始 Transformer、T5 |
技术演进史
| 时间 | 里程碑 | 关键贡献 |
|---|---|---|
| 2015 | He et al., “Delving Deep into Rectifiers” | 提出 MSRA 初始化 + 配合 lr 调度,间接启发了”分阶段学习率”思路 |
| 2017.02 | Goyal et al., “Accurate, Large Minibatch SGD” | 正式提出 Gradual Warmup,使 ImageNet 大 batch(8K)训练不掉精度 |
| 2017.06 | Vaswani et al., “Attention Is All You Need” | 将 warmup 内嵌到 Transformer 的 lr 公式中,成为架构标配 |
| 2018 | BERT(Devlin et al., 2018) | 线性 warmup + 线性 decay 的经典范式,被 NLP 社区广泛采纳 |
| 2019 | GPT-2 / Megatron-LM | 超大规模训练中确认 warmup 的必要性;Megatron 代码内置 warmup 逻辑 |
| 2020 | GPT-3 论文 | warmup 步数精细化,针对超长训练制定策略 |
| 2023–2024 | LLaMA、Qwen、DeepSeek 等开源模型 | warmup 通常 2000 步左右,配合 cosine decay 成为事实标准 |
| 2024 | WSD 调度器兴起 | 将 warmup → stable → decay 三段解耦,为”续训”/“退火”提供灵活性 |
技术路线对比
| 维度 | 线性 Warmup + Cosine | Transformer 原始公式 | WSD 调度器 | 无 Warmup |
|---|---|---|---|---|
| 实现复杂度 | 低 | 中 | 低 | 最低 |
| 训练稳定性 | 高 | 中(对 T_w 敏感) | 高 | 极差(大模型几乎必崩) |
| 最终精度 | 基准线 | 可比 | 可比/略优 [部分报告] | N/A(训练不收敛) |
| 续训友好度 | 低(cosine 已衰减) | 低 | 高(stable 阶段可任意延长) | N/A |
| 与大 batch 兼容 | 好 | 一般 | 好 | 差 |
| 行业采用度 | ★★★★★ | ★★(历史遗留) | ★★★(上升中) | 不采用 |
上下游
上游(Warmup 依赖什么) 下游(什么依赖 Warmup)
┌─────────────────────┐ ┌──────────────────────┐
│ • 权重初始化方案 │ │ • 大模型预训练 │
│ (Xavier/He/μP等) │ │ • SFT / RLHF 微调 │
│ • 优化器选择 │ ──Warmup→ │ • 分布式训练框架 │
│ (Adam/AdamW/Adan) │ │ (Megatron, DeepSpeed)│
│ • Batch Size 策略 │ │ • 训练稳定性工程 │
│ • 模型架构 │ │ • 学习率调度器 │
│ (Pre-LN vs Post-LN)│ │ (Cosine, WSD等) │
└─────────────────────┘ └──────────────────────┘
关键指标
| 指标 | 说明 | 典型值 / 范围 |
|---|---|---|
warmup_steps | 预热阶段总步数 | 1,000–10,000(LLM 预训练);100–500(微调) |
warmup_ratio | 预热步数占总步数比例 | 0.01%–5% |
初始学习率 \eta_0 | warmup 起始 lr | 通常为峰值 lr 的 10^{-7}–10^{-3} 量级(或直接从 0 开始) |
峰值学习率 \eta_{max} | warmup 结束时的 lr | LLM: 1\times10^{-4}–6\times10^{-4} [范围估算] |
| warmup 曲线形状 | 线性 / 指数 / 多项式 | 线性最常见 |
| loss spike 概率 | 有 warmup vs 无 warmup | 无 warmup 时 spike 频率显著增高 [定性共识] |
供需与市场数据
Warmup 本身是训练方法,不直接构成独立市场,但它是训练成本和GPU 时间利用率的隐性影响因素。
- 训练失败成本:一次大模型预训练的成本在百万到千万美元量级(数千 GPU 运行数周到数月)。若因缺少 warmup 导致前期发散需要 restart,直接损失 GPU 时间和电力。据行业估算,warmup 能避免的”无谓 restart”可节省 1%–5% 的总训练成本。[定性估算]
- 超参搜索成本:Warmup 步数是超参搜索的维度之一。最优 warmup 步数依赖于 batch size、模型大小、数据分布,需要小规模 proxy 实验确定。
- 框架支持:PyTorch 原生
torch.optim.lr_scheduler中LinearLR、CosineAnnealingLR均支持 warmup;Hugging Face Transformers 的Trainer类内置warmup_steps/warmup_ratio参数;DeepSpeed、Megatron-LM 同样内建。Warmup 已是训练框架的”零成本基础设施”。
代表公司与资本映射
| 公司/机构 | Warmup 相关实践 | 关联 |
|---|---|---|
| Transformer 原始 warmup 公式;BERT 训练范式 | 论文发源地 | |
| OpenAI | GPT-3/4 训练中的精细 warmup 调度 | 大规模训练工程实践标杆 |
| Meta (FAIR) | LLaMA 开源配置公开 warmup 步数 | 可复现的训练配方 |
| Microsoft / DeepSpeed | DeepSpeed 框架内置 warmup 调度器 | 训练基础设施 |
| NVIDIA (Megatron-LM) | Megatron 代码中 warmup + cosine decay 是默认配置 | GPU 训练优化 |
| Hugging Face | Transformers Trainer 中 warmup 是默认可选参数 | 开发者生态 |
| DeepSeek | 采用 WSD 调度器(Warmup-Stable-Decay) | 近期新型调度实践 |
产业映射:Warmup 不构成独立投资主题,但它是大模型训练效率的关键组成。讨论训练优化方向时,可将其放入”训练稳定性工程”的广义框架中,与混合精度训练、梯度裁剪、初始化策略等共同评估。
投资逻辑
核心判断
- Warmup 是成熟技术,已无独立技术壁垒。 它是开源框架的标准组件,不构成差异化竞争力。
- 但它是”训练可靠性”的必要条件。 任何试图从零训练大模型的团队,若忽略了 warmup(以及梯度裁剪、混合精度等基础工程),极可能在前期浪费大量算力。
- WSD 等新型调度器的兴起值得关注。 WSD(Warmup-Stable-Decay)将训练解耦为三阶段,为**续训(continual pre-training)和退火(annealing)**提供了工程灵活性,可能成为下一代训练配方的默认选项。
- 更广义的”学习率工程”是一个微创新方向。 包括 per-layer lr(不同层用不同 lr)、μP(Maximal Update Parameterization,使超参可跨模型规模迁移)等,都是在 warmup 基础上的进一步精细化。
风险点
- 若出现全新的优化算法(如不需要 warmup 的一阶方法),现有训练配方可能需要重构。但目前尚无明确替代方案。
常见误读纠偏
❌ 误读 1:「Pre-LN Transformer 不需要 Warmup」
纠偏:Pre-LN(LayerNorm 放在残差连接之前)架构确实比 Post-LN 对 warmup 的依赖度低——Post-LN 的训练不稳定性更严重,没有 warmup 几乎无法训练。但 Pre-LN 在大模型规模下(参数量数十亿+)仍然需要 warmup,否则前期 loss spike 的概率仍然显著。“更少依赖” ≠ “不需要”。 许多论文和工程报告均确认了这一点。
❌ 误读 2:「Warmup 只是为了防止梯度爆炸」
纠偏:梯度爆炸是表象之一,但 warmup 的作用机制更深层:
- Adam 二阶矩偏差校正的放大效应(见技术原理节)是独立于梯度爆炸的另一机制
- loss 曲面的尖锐性:早期参数在随机初始化附近,曲面曲率高,小步长帮助”绕过”尖锐最小值
- 注意力机制的退化:Transformer 的 softmax attention 在初始化时接近均匀分布,过大的更新可能将其推入退化状态
- 因此,即使使用了梯度裁剪(gradient clipping),warmup 仍然是必要的
❌ 误读 3:「Warmup 步数越多越安全」
纠偏:过长的 warmup 会:
- 浪费训练步数(warmup 阶段的 lr 低 → 参数更新效率低)
- 可能让模型在次优区域停留过久
- 实际工程中,warmup 步数需要与 batch size 配合调优。更大的 batch size 通常允许更短的 warmup(因为梯度估计更准确,方差更低)
❌ 误读 4:「微调(Fine-tuning)不需要 Warmup」
纠偏:取决于场景。全参数微调时,由于预训练权重已”校准”,warmup 需求确实降低,但通常仍使用少量 warmup(如 3%–10% 的总微调步数)以应对新数据分布的冲击。LoRA 等参数高效微调中,新增的低秩矩阵是随机初始化的,warmup 仍有意义但通常步数更少。
学习路径
Level 0 · 直觉理解
└── 知道"训练刚开始时学习率要小一些,然后慢慢变大"
推荐:任何深度学习入门教程中"学习率调度"一节
Level 1 · 理解机制
└── 掌握线性 warmup 公式,能解释 Adam 偏差校正问题
推荐:
• Vaswani et al., "Attention Is All You Need" (2017) §5.3
• Goyal et al., "Accurate, Large Minibatch SGD" (2017)
Level 2 · 工程实践
└── 能在训练框架中配置 warmup,理解 warmup_steps 的选择逻辑
推荐:
• Hugging Face Transformers 文档 - Trainer 的 lr_scheduler_type
• PyTorch 官方 lr_scheduler 教程
• 任意开源 LLM(如 LLaMA)的训练配置文件
Level 3 · 理论深度
└── 理解 warmup 与损失曲面几何、sharpness-aware 优化的关系
推荐:
• Smith & Le, "A Bayesian Perspective on Generalization and
Stochastic Gradient Descent" (2018)
• Gotmare et al., "A Closer Look at Deep Learning Heuristics"
(2019) - 关于 warmup 的理论分析
• Liu et al., "WSD: A Warmup-Stable-Decay Learning Rate
Schedule for Training Large Language Models" (2024)
Level 4 · 前沿探索
└── μP、per-layer lr、与 warmup 的协同设计
推荐:
• Yang et al., "Tensor Programs V: Tuning Large Neural
Networks via Zero-Shot Hyperparameter Transfer" (2022) [μP]
一句话总结
Warmup 是大模型训练中最”不起眼”却最关键的稳定器——它用几千步的低学习率”热身”,换来了后续数百万步训练的收敛保证,是每一个大模型训练配方的隐性基础设施。
延伸阅读与来源
- Vaswani et al. (2017), “Attention Is All You Need”, NeurIPS — Transformer 原始 warmup 公式
- Goyal et al. (2017), “Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour” — Gradual Warmup 提出
- Gotmare et al. (2019), “A Closer Look at Deep Learning Heuristics” — warmup 理论分析
- Loshchilov & Hutter (2019), “Decoupled Weight Decay Regularization” (AdamW) — AdamW 中 warmup 的交互
- Liu et al. (2024), “WSD: A Warmup-Stable-Decay Learning Rate Schedule” — 新型 WSD 调度器
- Yang et al. (2022), “Tensor Programs V” (μP) — 超参数跨规模迁移中 warmup 的角色
- Meta LLaMA 开源代码及训练配置 — 工程实践参考
- Megatron-LM GitHub 仓库 — 大规模分布式训练中的 warmup 实现
📌 准确性声明:本页技术事实基于上述论文与开源项目的公开信息。具体训练超参数(如 GPT-3 的 warmup 步数)部分基于论文披露与社区复现的估算,已标注。无据处均以定性表述呈现。