学习率调度器

译自英文

学习率调度器在神经网络训练过程中调整学习率,以改善收敛性并避免局部最小值。常见的调度方式包括基于时间、基于步长和指数衰减,以及像Adam这样的自适应方法。

在机器学习和统计学中,学习率是优化算法中的一个调优参数,用于确定在向损失函数最小值逼近的每次迭代中应采取的步长。由于它影响了新获取的信息覆盖旧信息的程度,因此它隐喻性地代表了机器学习模型“学习”的速度。在自适应控制文献中,学习率通常被称为增益。

设置学习率需要在收敛速度和过冲之间进行权衡。虽然下降方向通常由损失函数的梯度决定,但学习率决定了在该方向上迈出的步长大小。学习率过高会导致学习越过最小值,而学习率过低则可能导致收敛过慢,或陷入不理想的局部最小值。为了实现更快的收敛、防止振荡并避免陷入不理想的局部最小值,学习率通常在训练过程中会有所变化,要么遵循学习率调度方案,要么采用自适应学习率方法。学习率及其调整也可能因参数而异,在这种情况下,它表现为一个对角矩阵,可被解释为对牛顿法中 Hessian 矩阵逆的近似。学习率与拟牛顿法及相关优化算法中由不精确线搜索确定的步长有关。

学习率调度方案

初始学习率可以保留系统默认值,也可以通过一系列技术进行选择。学习率调度方案会在学习过程中改变学习率,并且最常在各个周期或迭代之间进行调整。这主要通过两个参数实现:衰减和动量。学习率调度方案有多种,但最常见的是基于时间、基于步长和指数衰减三种。

衰减有助于将学习稳定在一个合适的位置,并避免振荡,而当学习率过高时,学习过程可能会在最小值附近来回跳动。衰减由一个超参数控制。

动量类似于一个球从山坡滚下;目标是让球停在山脚的最低点(对应于最低误差)。当误差梯度长时间保持同一方向时,动量既能加速学习(增大有效学习率),也能通过“滚过”小的凸起,避免陷入局部最小值。动量由一个类似于球质量的超参数控制,该参数需要手动选择,,如果过大,球可能会滚过我们希望找到的最小值;如果过小,则无法达到目的。考虑动量的公式比单纯衰减更复杂,但通常已内置于诸如 Keras 等深度学习库中。

基于时间的调度方案会根据上一次迭代的学习率来调整当前学习率。考虑衰减后,学习率的数学公式为:

η_{n+1} = η₀ / (1 + d n)

其中 η 是学习率,η₀ 是初始学习率,d 是衰减参数,n 是迭代步数。

基于步长的调度方案会根据预定义的步数来改变学习率。其衰减应用公式定义为:

η_n = η₀ d^(⌊(1+n)/r⌋)

其中 η_n 是第 n 次迭代时的学习率,η₀ 是初始学习率,d 表示每次衰减时学习率的变化幅度(0.5 对应减半),r 表示衰减频率,即每隔多少次迭代衰减一次(10 表示每 10 次迭代衰减一次)。向下取整函数(⌊…⌋)会将小于 1 的输入值降至 0。

指数调度方案与基于步长的方案类似,但并非采用离散步长,而是使用递减的指数函数。考虑衰减后的数学公式为:

η_n = η₀ e^(−d n)

其中 d 是衰减参数。

自适应学习率

学习率调度方案的问题在于,它们都依赖于需要针对每次学习任务手动选择的超参数,而这些超参数可能因问题或模型的不同而有很大差异。为了解决这一问题,出现了多种自适应梯度下降算法,例如 Adagrad、Adadelta、RMSprop 和 Adam,这些算法通常已内置于诸如 Keras 等深度学习库中。

在深度学习中的作用

学习率调度器是训练现代神经网络(包括深度学习模型和大语言模型)的关键组成部分。在实践中,像 TensorFlow 和 PyTorch 这样的框架提供了内置的调度器实现。例如,OpenAI 和 Anthropic 在训练其基于 Transformer 的模型时,会使用复杂的调度技术以确保稳定收敛。同样,Google DeepMind 和 Meta AI 在大规模训练中也采用了自定义调度器。

实际考量

选择合适的学习率调度方案通常需要反复试验。常见做法包括使用预热阶段,即学习率从一个较小的值线性增加,随后进入衰减阶段。这种方法有助于在训练初期稳定模型。此外,一些调度器(如余弦退火和周期性学习率)因其能够帮助模型逃离尖锐的最小值而受到欢迎。

另请参阅

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