在机器学习中,学习率是一个调优参数,决定了每次迭代中向损失函数最小值移动时的步长。它影响新获取的信息覆盖旧信息的程度,隐喻性地表示模型学习的速度。在自适应控制文献中,学习率通常被称为增益。设置学习率涉及收敛速度与过冲之间的权衡:过高的学习率可能导致模型越过最小值,而过低的学习率则可能减缓收敛或使模型陷入不良的局部最小值。为了解决这些问题,通常使用学习率调度和自适应方法,而预热步骤是一种在训练深度神经网络中日益重要的特定技术。
预热步骤指的是训练初始阶段,在此期间学习率从非常小的值增加到目标学习率。这通常以线性方式或按照预定步数或轮数的调度进行。其目的是防止训练开始时的大幅更新,这可能会使模型不稳定,尤其是在像变换器和大型语言模型这样的大规模架构中。通过逐步增加学习率,模型可以以更保守的更新开始,使其在全面学习开始前在损失景观中找到稳定区域。
预热步骤的概念与学习率调度密切相关。学习率调度在训练过程中改变学习率,通常是在轮次或迭代之间,使用衰减和动量等参数。常见的调度包括基于时间的、基于步长的和指数衰减。例如,基于时间的调度将学习率更新为 η_{n+1} = η_0 / (1 + d n),其中 η_0 是初始学习率,d 是衰减参数,n 是迭代步数。基于步长的调度在固定间隔内按因子降低学习率,而指数调度则使用递减的指数函数。预热步骤通常与这些调度结合使用,其中学习率在预热阶段先增加,然后遵循衰减调度。
在深度学习中的重要性
预热步骤在训练深度神经网络中变得尤为重要,尤其是像变换器这样的架构。大型模型,如由 OpenAI、Anthropic 和 Google DeepMind 开发的模型,通常需要仔细管理学习率才能有效收敛。没有预热,初始的大梯度可能导致模型发散或陷入较差的局部最小值。预热允许模型逐步适应数据分布,降低不稳定的风险。
实证研究表明,预热步骤可以提高最终模型性能和训练速度。例如,在训练大型语言模型时,常见做法是在前几千步使用线性预热,然后使用余弦退火等衰减调度。这种方法已被许多最先进的模型采用,包括那些在 AWS Trainium 和 Google Cloud 等基础设施上训练的模型。
预热调度的类型
有几种实现预热步骤的方法。最直接的是线性预热,其中学习率在固定步数内从较小的初始值(通常为零)线性增加到目标学习率。另一种方法是指数预热,其中学习率指数增加,尽管这不太常见。一些实现使用恒定预热,其中学习率在特定步数内保持较小值,然后跳到目标值。
预热调度的选择可能取决于模型架构和优化算法。例如,在使用像 Adam 这样的自适应优化器训练时,预热通常用于补偿早期迭代中的梯度估计偏差。预热期允许优化器在应用完整更新前积累足够的统计信息。
与自适应学习率的关系
自适应学习率方法,如 Adagrad、Adadelta、RMSprop 和 Adam,根据历史梯度为每个参数调整学习率。这些方法内置于像 Keras 和 PyTorch 这样的深度学习库中。虽然自适应方法减少了手动调优的需求,但它们仍然可以从预热步骤中受益。事实上,大规模训练中 Adam 的许多实现默认包含预热阶段。预热有助于稳定自适应学习率估计的方差,从而实现更可靠的收敛。
实际实现
在实践中,预热步骤作为学习率调度器的一部分实现。例如,在流行的 Hugging Face Transformers 库中,调度器可以配置预热比例或特定数量的预热步骤。调度器通常在预热期内将学习率从 0 线性增加到初始学习率,然后应用衰减调度。这通常用于训练基于 Transformer (architecture) 架构的模型,如 BERT 和 GPT。
典型配置可能将预热步骤设置为总训练步数的一小部分,例如 1% 到 10%。例如,在训练一个具有 100,000 步的模型时,可能会使用 1,000 步的预热。具体数量取决于模型大小和数据集。较大的模型通常需要更长的预热期以避免不稳定。
研究与发展
预热步骤一直是机器学习社区研究的主题。研究调查了最佳预热持续时间和调度类型。一些研究表明,预热起到一种正则化形式的作用,防止训练早期阶段的过拟合。其他研究则探索了理论基础,将预热与损失景观的曲率联系起来。例如,Li 等人(2019)的论文提出,预热有助于避免在大学习率训练时可能出现的尖锐最小值。
在大型语言模型的背景下,预热步骤通常与梯度裁剪和权重衰减等其他技术结合使用。这些技术共同有助于稳定训练并提高泛化能力。像 OpenAI 和 Anthropic 这样的公司已经发布了其训练运行的细节,其中通常包括预热步骤作为关键组成部分。
挑战与考虑
虽然预热步骤是有益的,但它们也引入了额外的超参数,如预热持续时间和初始学习率。这些必须为每次训练运行进行调优,这可能计算成本高昂。此外,最佳预热调度可能因模型架构和任务而异。例如,用于图像分类的模型可能需要与用于自然语言处理的模型不同的预热设置。
另一个考虑是预热与批量大小之间的相互作用。当使用大批量时,梯度估计更准确,这可能减少对预热的需求。然而,在实践中,即使使用大批量,预热仍然常用,因为它有助于保持稳定性。
未来方向
随着机器学习模型继续增大,预热步骤仍然是训练工具包中的基本工具。研究人员正在探索自动确定最佳预热调度的方法,可能使用超参数优化等技术。此外,新的优化算法可能将预热作为内置功能,减少手动配置的需求。
总之,预热步骤是训练神经网络的关键初始阶段,特别是对于大规模模型。通过逐步增加学习率,它们有助于稳定训练、改善收敛,并最终带来更好的模型性能。随着 Deep learning 领域的进步,预热步骤可能继续在训练各种领域的复杂模型中发挥重要作用。