核心概念:衰减与动量
学习率调度在训练过程中改变学习率,通常是在每个周期或每次迭代之间进行调整。这主要通过两个参数实现:衰减和动量。衰减有助于模型收敛到稳定的最优点,避免因学习率过高而在最小值附近来回震荡;动量则加速训练过程,帮助模型越过局部极小值,并抑制参数更新中的振荡。这两个参数通常作为超参数由人工设定。
基于时间的调度
基于时间的调度根据训练轮次调整学习率,其数学公式为:
\[ \eta_{n+1} = \frac{\eta_0}{1 + dn} \]
其中,\(\eta\) 是学习率,\(\eta_0\) 是初始学习率,\(d\) 是衰减参数,\(n\) 是迭代次数。这种调度方式实现简单,仅需设定初始学习率和衰减常数,因此常用于早期神经网络实验。
基于步数的调度
基于步数的调度按照预设的步数间隔调整学习率,公式为:
\[ \eta_n = \eta_0 d^{\left\lfloor \frac{1+n}{r} \right\rfloor} \]
其中,\(\eta_n\) 是第 \(n\) 次迭代时的学习率,\(\eta_0\) 是初始学习率,\(d\) 是每次衰减的因子(如 0.5 表示减半),\(r\) 是衰减间隔(如每 10 次迭代衰减一次)。这种方法在训练大型语言模型和 Transformer 时被广泛采用,通常会在训练总步数的特定比例处(如 30%、60%、80%)将学习率乘以 0.1 或 0.5。
指数调度
指数调度与基于步数的调度类似,但使用指数衰减函数:
\[ \eta_n = \eta_0 e^{-dn} \]
其中,\(d\) 是衰减参数。这种调度提供平滑且连续的衰减,前期衰减较快,后期逐渐放缓。它适用于损失曲面相对平滑的场景,但有时会衰减过快,导致后期训练不足。变体包括带热重启的指数衰减,即周期性地将学习率重置为较高值,以帮助模型跳出局部极小值,这一技术近期在课程学习和梯度裁剪相关研究中有所探索。
余弦与热启动调度
余弦调度超越了传统调度方式,让学习率沿余弦曲线从初始值平滑降至接近零。通常还会结合线性热启动阶段,在训练初期让学习率从很小的值逐步升至初始最大值,这一过程通常持续几百到几千步。热启动对于训练深层网络和大规模 Transformer 尤为重要,可以防止随机初始化权重导致的早期不稳定性。带热启动的余弦调度已成为许多 OpenAI 和 Google DeepMind 研究实现的默认选择,因为它能在相同训练预算下获得更好的最终性能。
自适应学习率方法
传统学习率调度需要手动设定超参数,且这些参数可能因问题或模型而异。为克服这一局限,出现了多种自适应梯度下降算法,如 Adagrad、Adadelta、RMSprop 和 Adam,这些方法已内置于 Keras 等深度学习库中。它们为每个参数单独调整学习率,基于历史梯度信息进行缩放,本质上实现了自动化的学习率退火。虽然自适应方法通常收敛更快,但在某些任务上可能不如精心调优的固定调度泛化得好,因此实践中常采用混合策略:在自适应优化器之上叠加显式调度。
实际考量与选择
选择学习率调度需权衡多个因素:模型架构、数据集规模、优化算法以及可用计算资源。对于小型模型和简单数据集,固定学习率或简单的时间衰减通常已足够。对于大规模训练(如生成式 AI 系统),实践者常结合热启动、余弦衰减和周期性重启。初始学习率通常通过学习率范围测试确定,即在少量迭代中线性增加学习率,选择损失下降最陡峭处的值。许多框架(如 AWS 和 Google Cloud 的机器学习服务)提供了内置的调度器和自动调参工具,减少了手动调整的负担。
与其他技术的关系
学习率调度与其他训练技术密切相关。批归一化和层归一化可以稳定损失曲面,从而允许使用更高的学习率和更简单的调度策略。权重初始化方式影响合适的初始学习率,若权重缩放不当,可能需要较低的学习率以避免发散。梯度裁剪可防止梯度爆炸,这在采用激进调度或训练循环架构时尤为重要。在强化学习中,调度常与探索策略配合;在基于人类反馈的强化学习(RLHF)中对齐语言模型时,学习率通常会被谨慎退火,以在保留预训练知识的同时适应人类偏好。
历史背景与研究
学习率变化的概念可追溯至随机梯度下降的早期研究。麻省理工学院和斯坦福大学人工智能实验室等机构的研究者分析了不同衰减函数的理论性质,证明在非凸优化中衰减学习率对保证收敛是必要的。20 世纪 80 年代,动量方法的引入为现代优化器奠定了基础。此后,Adagrad 和 Adam 等自适应方法的发展将研究重点从手动调度转向自动逐参数调整。如今,调度选择仍是一个活跃的研究领域,相关研究比较了不同衰减形状在各类模型(包括残差网络和 U-Net)上的泛化性能。