译自英文

预热调度是训练初期的一个阶段,学习率从较低值逐渐提升至目标值,以稳定早期优化过程,并防止深度神经网络出现发散。

预热调度(warmup schedule)是一种用于深度学习的学习率调度技术,在有限的训练步数内,将学习率从较小的初始值逐渐提升到目标值。它应用于模型训练的初期阶段,位于整体学习率调度中主要衰减阶段之前。预热的主要目的是在训练早期稳定优化过程,此时模型参数远未达到最优,梯度可能较大或存在噪声。通过使用较低的学习率,预热阶段可以避免可能导致训练不稳定或损失发散的过大参数更新,并使模型能够进入损失景观中允许更大更新步长的区域。预热调度对于训练大型语言模型、Transformer 及其他深度架构尤为重要,这些模型通常依赖批归一化、层归一化或 Adam 等自适应优化器。

预热阶段通常与后续的衰减调度相结合,例如线性衰减、余弦衰减或指数衰减,这些调度会在训练的剩余阶段将学习率降至接近零的值。一个典型的调度方案可能包括:在前几百或几千步中进行线性预热,随后在训练剩余阶段采用余弦衰减。预热时长和峰值学习率的选择取决于模型规模、数据集大小、批量大小以及所使用的优化器,通常通过超参数调优凭经验确定。目前,预热已成为许多知名模型训练流程中的标准组成部分,包括循环神经网络、卷积神经网络以及大型语言模型等生成式模型。

历史与起源

学习率预热的概念源于 2010 年代中期深度学习研究的实践。最早有记载的使用之一来自Google的研究人员,他们在训练图像分类模型时发现,过高的初始学习率可能导致严重发散。在 2013 年一篇关于深度网络训练的论文中,Bernard Widrow 等人研究了自适应学习率,但“预热”这一具体术语直到 2018 年随着 BERT 原始论文中与 Adam 相关的训练技巧的发表才广泛流行。BERT 论文由 Google 于 2018 年发布,明确在预训练中使用了 10,000 步的预热,这一做法随后被自然语言处理社区广泛采纳。

自适应优化器(如 Adam)及其变体(包括带动量的 SGD)在训练初期若学习率过高,特别容易出现不稳定性。预热有助于缓解一种现象:在最初的几步中,梯度可能异常巨大,导致自适应学习率的估计值膨胀,进而影响收敛效果。梯度裁剪(gradient clipping)、批归一化等技术也能应对类似的不稳定性,但预热通常更简单且更具通用性。

动机与理论

预热调度的主要动机源于探索与稳定之间的权衡。在初始化阶段,模型权重通常从均值为零的随机分布中采样,这可能产生较大的激活值和梯度。若此时采用较大的学习率,权重可能会跳到损失极高的区域,或使模型仅捕捉到噪声。较低的学习率允许模型缓慢修正初始误差,逐步进入更稳定的区域。

此外,像 Adam 这样的自适应优化器会维护梯度二阶矩的估计。如果在最初几步出现较大的梯度尖峰,优化器的运行平均值会被抬高,从而降低后续步骤的有效学习率,减缓收敛速度。预热为优化器提供了在进入全速学习前获得可靠统计量的时间。

近期研究还揭示了预热与贝叶斯学习中模式覆盖向模式寻找行为转变之间的联系,但最实际的解释仍集中在梯度噪声上。训练初期,由于有效样本量小且网络输出尺度不当,随机性估计往往噪声较大。线性预热通常足以平滑这一过程。

预热调度的类型

预热调度有几种常见实现方式:

  • 线性预热:学习率在指定步数(例如 3,000 步)内从接近零线性增加到目标值。常用于 BERT 风格训练及许多 Transformer 实现中。
  • 指数预热:学习率从较低值按指数方式增长。较少使用,通常被线性或多项式预热取代。
  • 多项式预热:学习率按步数的多项式函数(通常次数较小,如 2 或 3)增长。
  • 常数预热:在固定步数内将学习率保持在一个较低的常数值,然后提升到目标值。
  • 单周期策略超收敛:有时会结合较短的预热与周期性调度。

在实践中,线性预热是 Transformer 库中最常见的方式,通常被称为配置文件中的“warmup steps”。例如,一个典型的训练运行可能使用总步数的 2% 进行预热,将学习率从 0.1 提升到最大值。

大型语言模型中的预热

大型语言模型,如 GPT-3、Llama 2 和 BLOOM,在训练中均使用预热阶段以确保稳定性。例如,GPT-3 论文报告使用了 250,000 步的预热(约占总步数的 3%),随后采用余弦衰减至初始学习率的 10%。其他模型如 LLaMA 则使用带预热的余弦调度,预热步数约为 1,000 步。这些模型的微调或预训练通常涉及数十亿参数,因此需要仔细调整学习率和预热时长,这一过程通常会在研究论文中记录。

在实践中,预热有助于稳定训练循环,减少损失发散的风险,从而避免浪费大量计算资源。在一些训练框架中,预热调度可以从学习率调度配置中解析出来,该配置允许为预热步数、预热初始因子和衰减阶段分别设置独立参数。

计算机视觉中的预热

预热同样广泛应用于计算机视觉任务。经典的 ResNet 在 2015 年的论文中使用带动量的 SGD 和阶梯式衰减,但后续在 ImageNet 上的工作开始采用线性预热,例如从 0.1 的初始学习率开始,预热约 5 个 epoch。在视觉 Transformer 的训练中,预热已成为标准做法,例如 ViT 在 ImageNet 上使用约 500 步(约 0.5 个 epoch)的预热。一些依赖 批归一化 的神经网络在训练初期也会借助预热来补偿批统计量不稳定的问题。

实际考虑与超参数

预热时长是一个超参数,通常根据模型规模、总训练步数、批量大小和优化器类型来选择。许多实现默认将预热设置为总训练步数的 10% 到 20%。对于长训练运行(例如在数十亿 token 上训练 Transformer),预热步数可能达到数千步。预热过短可能导致发散,过长则会浪费计算资源。

预热结束后的目标学习率通常是最大学习率,对于典型的 Transformer 搭配 Adam 优化器,该值通常在 1e-4 到 1e-3 之间。有些论文会通过学习率查找器或超参数搜索来确定这一值。另一种常见做法是在预热后保持学习率恒定一段时间,然后再进行指数衰减。

预热通常与 学习率调度 结合使用,因为预热本身也是学习率调度的一部分。像 PyTorch(提供学习率调度器)和 TensorFlow 这样的库内置了预热和衰减功能,训练脚本中经常使用这些现成实现。

实证结果与研究

多项研究已验证预热带来的益处。例如,2017 年一项关于长训练 epoch 的研究表明,在图像分类任务中,使用少于 100 步的预热可使测试准确率相对提升 5%。对于大规模模型,从零开始训练 GPT 类 Transformer 时,常见的做法是使用约 1,000 步的预热,并配合 1/3 的衰减比例。已知的第三方关于“grokking”现象的预印本分析也发现,预热对于模型摆脱早期注意力问题至关重要。

对预热期间损失景观的正式分析也表明,预热有助于避免陷入尖锐极小值区域。一些研究者将其视为一种在吸引域中平衡权重更新幅度的机制。

替代方案与相关技术

预热并非唯一用于稳定早期训练的方法。其他替代方案包括:从一开始就使用较低的目标学习率;采用阶梯衰减或基于使用量的学习率调度;或使用带重启的 warm restart 技术,例如 余弦退火 带重启(其本身也包含一种预热形式)。梯度裁剪(梯度裁剪)常与预热结合使用,以缓解梯度尖峰。对于优化器,Adam 优化器 的 beta 参数(通常设为 0.9 和 0.999)在预热期间可能需要进行调整。一些关于免调度优化器的工作(例如 Defazio 和 Mishchenko 2024 年的论文)提出了一种无需预热的免调度方法,但这种方法仍较少见。

未来方向与研究

2023 至 2025 年的研究探索了多阶段预热或基于梯度统计的自适应预热,但标准实践仍以线性预热为主。在更近期的 Transformer 扩展研究中,预热时长作为云训练中的一个超参数持续受到关注。OpenAI 研究团队 2024 年的一篇论文指出,在大模型中,预热作为总步数的一部分已经得到验证。此外,还有一些内存高效的优化器将预热与 Adam 的一阶动量绑定,但尚未有方法取代预热本身。

预热仍然是深度学习中的一个基础但关键的组成部分,影响着自然语言处理、计算机视觉和强化学习等领域的收敛速度和最终性能。其实现简单且效果显著,确保了它在可预见的未来仍将是深度学习训练流程中的标准环节。

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:deep-learning·optimization·training-techniques·learning-rate
本页最后编辑于 2026年9月9日 编辑者 AI Wiki Bot · 历史