在Machine learning中,学习率是优化算法中的一个调参参数,它决定每次迭代向损失函数最小值移动时的步长大小。它影响新获取的信息覆盖旧信息的程度,隐喻性地表示模型学习的速度。在自适应控制文献中,它通常被称为增益。设置学习率涉及一种权衡:过高的学习率会导致模型越过最小值,而过低的学习率则会减慢收敛速度,或可能陷入不良的局部最小值。学习率调度通过训练过程中变化学习率来解决这一问题,既可采用预定义调度,也可采用自适应方法。
在优化中的作用
学习率决定沿下降方向(通常由损失函数的梯度导出)所走步长的大小。在Deep learning中,模型通过迭代调整权重以最小化损失函数来训练,而学习率控制这些调整的激进程度。恒定的高学习率可能导致在最小值附近振荡,而恒定的低学习率则会使训练变得不切实际地缓慢。随时间调度学习率有助于实现更快的收敛、防止振荡并避免不良局部最小值。学习率也可以按参数不同而不同,此时它变成近似于Hessian矩阵逆的对角矩阵,如牛顿法中的情况。这与拟牛顿方法中的步长和不精确线搜索有关。
基于时间的调度
基于时间的调度根据先前学习率和衰减参数在每次迭代时调整学习率。公式为 \eta_{n+1} = \eta_0 / (1 + d n),其中 \eta_0 是初始学习率,d 是衰减参数,n 是迭代步数。此调度逐渐降低学习率,允许训练早期采取较大步长,后期进行更精细的调整。它实现简单,只需一个超参数,即衰减系数 d。然而,学习率单调递减,这可能并非对所有问题都是最优的。
基于步长的调度
基于步长的调度在预定义间隔处改变学习率。迭代 n 处的学习率为 \eta_n = \eta_0 d^{\lfloor (1+n)/r \rfloor},其中 d 是乘法因子(例如,0.5 表示减半),r 是下降率(例如,每 10 次迭代)。取整函数确保学习率在下降之间保持恒定。此调度在实践中很常见,因为它易于调整,并提供离散的降低,有助于模型稳定到最小值。d 和 r 的选择取决于数据集和模型架构。
指数调度
指数调度使用递减的指数函数:\eta_n = \eta_0 e^{-d n},其中 d 是衰减参数。与基于步长的调度的离散下降不同,这提供了平滑、连续的学习率降低。指数衰减常用于Neural network训练,因为它平衡了早期探索与后期细化。衰减参数 d 控制学习率下降的速度;较大的 d 导致更快的衰减,这可能引起过早收敛。
预热和余弦退火
现代训练,尤其是Large language model的训练,通常采用预热,即学习率在前几千步内从小值增加到峰值。这可以防止早期训练中权重随机且梯度可能较大时的不稳定性。预热后,学习率可能使用余弦退火进行衰减,该退火遵循从峰值到接近零值的余弦曲线。余弦退火已被证明能改善许多基于Transformer (architecture)的模型的最终性能。一些调度将预热与循环模式相结合,其中学习率在界限之间振荡,允许模型逃离局部最小值并探索损失景观的不同区域。
动量和衰减
动量是一种常与学习率调度配对的技术。它类似于球滚下山坡,球的动量使其越过小凸起,并在梯度方向一致时加速。动量由一个类似于质量的超参数控制;过高的值会导致模型越过最小值,而过低的值则会降低其益处。另一方面,衰减用于稳定学习并通过随时间减小步长来避免振荡。这两者通常内置于深度学习库(如Keras)中,这些库提供默认实现和可调参数。
自适应学习率
固定调度的一个关键限制是它们依赖于手动选择的超参数,这些超参数因问题和模型而异。自适应梯度下降算法通过基于历史梯度按参数调整学习率来解决这一问题。常见方法包括Adagrad、Adadelta、RMSprop和Adam。这些算法通常内置于深度学习框架中,并已成为训练Artificial intelligence模型的标准。Adam于2014年引入,结合了动量与按参数缩放,并广泛用于Generative AI和其他应用。自适应方法减少了对手动调度调整的需求,尽管许多从业者仍在其上使用调度以获得最佳结果。
实际考虑
选择初始学习率至关重要。常见技术包括使用默认值(如0.01或0.001),或执行学习率范围测试,即在几个周期内线性增加学习率以找到合适的范围。最优调度通常取决于模型大小、数据集和优化器。例如,OpenAI和Google DeepMind已报告在训练大型模型时使用预热和余弦衰减。在实践中,调度通常与早停结合使用,即当验证性能停止改善时停止训练。调度的选择会显著影响最终模型质量、训练时间和稳定性,使其成为任何训练流程中的关键超参数。