在机器学习和统计学中,学习率是优化算法中的一个调优参数,它决定了每次迭代中向损失函数最小值迈进的步长。由于它影响着新获取的信息对旧信息的覆盖程度,因此可以形象地比喻为机器学习模型“学习”的速度。在自适应控制领域,学习率通常被称为增益。
在设定学习率时,需要在收敛速度与超调之间做出权衡。虽然下降方向通常由损失函数的梯度决定,但学习率则控制着在该方向上迈出的实际步长。学习率过高可能导致学习过程越过最小值,而学习率过低则可能使收敛过程极其缓慢,甚至陷入不理想的局部最小值。
为了加快收敛、避免振荡以及防止陷入不良的局部最小值,学习率在训练过程中通常会动态调整,这可以通过预设的学习率调度策略或采用自适应学习率算法来实现。此外,学习率的调整也可以针对每个参数单独进行,此时它相当于一个对角矩阵,可视为对牛顿法中涉及的海森矩阵逆的近似。学习率与拟牛顿法中通过不精确线搜索确定的步长密切相关。
核心概念:衰减与动量
学习率调度策略会在学习过程中改变学习率,通常是在不同的训练轮次(epoch)或迭代(iteration)之间进行调整。这主要通过两个参数实现:衰减(decay)和动量(momentum)。衰减有助于模型在最小值附近稳定下来,避免因学习率过高而在最优点附近来回震荡;动量则类似于一个球从山坡滚下,能够加速沿一致方向的下降,并越过小的局部障碍,从而帮助模型更快地找到全局最优解。动量由一个超参数控制,可以类比为球的“质量”。
基于时间的调度
基于时间的调度策略会根据当前的迭代次数来调整学习率。其数学公式通常为:
\[ \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} \]
其中,\(d\) 是衰减因子(例如0.5表示学习率减半),\(r\) 是衰减步长(例如10表示每10轮衰减一次)。这种方法在训练大型语言模型和Transformer架构时被广泛采用,实践者通常会在训练总步数的特定比例处(如30%、60%、90%)将学习率乘以0.1或0.5。
指数与余弦调度
指数调度与步进调度类似,但衰减是连续进行的,公式为:
\[ \eta_n = \eta_0 e^{-dn} \]
其中 \(d\) 是衰减率。这种调度在训练初期学习率下降较快,后期则逐渐变慢。另一种流行的策略是余弦退火,它遵循余弦曲线从初始学习率降至接近零。这种调度常常与线性预热(warmup)结合使用,即在训练开始时让学习率从很小的值线性增加到预设的最大值,这有助于训练非常深的网络和大型Transformer模型,防止因初始更新过大而导致训练不稳定。带有预热的余弦调度已成为许多OpenAI和Google DeepMind研究实现中的标准选择,因为它在相同的训练预算下,往往能取得比基于步进的调度更好的最终性能。
自适应学习率方法
手动选择学习率调度策略及其超参数可能很繁琐且依赖经验。为了解决这个问题,出现了多种自适应学习率算法,如Adagrad、Adadelta、RMSprop和Adam优化器,它们已成为Keras等深度学习库中的标准工具。这些方法会为每个参数独立地调整学习率,通常基于该参数历史梯度的信息(例如,Adagrad和Adam会按历史梯度平方和的平方根来缩放学习率)。这相当于自动为每个参数进行退火,省去了手动调整全局学习率调度的需要。虽然自适应方法通常收敛更快,但在某些任务上,其泛化性能可能不如精心调校的固定调度策略,因此实践中也常采用将两者结合的混合方法。
实际选择与考量
选择合适的学习率调度策略需要综合考虑多个因素,包括模型架构、数据集规模、优化算法以及可用的计算资源。对于小型模型和简单数据集,使用恒定的学习率或简单的基于时间的衰减可能就足够了。而对于大规模训练,如训练生成式AI系统,实践者通常会采用包含预热、余弦退火和周期性重启的复杂调度方案。初始学习率本身通常通过“学习率范围测试”来确定,即在少量迭代中线性增加学习率,并观察损失曲线的变化,选择使损失下降最快的学习率值。许多深度学习框架(如AWS和Google Cloud提供的服务)都内置了各种调度器和自动调参工具,大大简化了这一过程。
与其他技术的关系
学习率调度与许多其他训练技术紧密相关。例如,批归一化和层归一化通过稳定网络中间层的激活分布,可以允许使用更高的学习率并简化调度策略。合适的权重初始化方法也能影响学习率的选择,不良的初始化可能需要更低的学习率以避免训练发散。梯度裁剪则通过限制梯度的范数来防止梯度爆炸,这在训练循环神经网络或使用激进的学习率调度时尤为重要。在强化学习领域,学习率的调度通常与探索策略相关联。而在像RLHF这样对齐语言模型的技术中,学习率也需要仔细调整,以便在适应人类反馈的同时,不破坏模型预训练阶段学到的知识。
历史背景与研究
对学习率变化规律的研究可以追溯到自适应控制和随机梯度下降的早期工作。研究人员很早就从理论上证明了在非凸优化问题中,为了确保收敛,学习率需要随时间衰减。20世纪80年代,动量方法的引入为加速收敛和逃离局部最小值提供了重要工具。随后,Adagrad和Adam等自适应方法的出现,将研究重点从手动设计全局调度策略转向了自动的、逐参数的调整方法。时至今日,如何为不同的模型家族(如残差网络和U Net)选择最优的学习率调度策略,仍然是一个活跃的研究领域。