Cyclic Learning Rates/zh

    From Marovi AI
    This page is a translated version of the page Cyclic Learning Rates and the translation is 100% complete.
    Other languages:
    Article
    Topic area Optimization
    Prerequisites Stochastic Gradient Descent, Learning Rate Schedule


    概述

    循环学习率CLR)是一类学习率调度方法,它使学习率在下界和上界之间周期性变化,而不是单调递减。该技术由 Leslie N. Smith 于 2015 年提出,作为手动调整的阶梯衰减和更复杂的自适应优化器的实用替代方案,其经验观察表明:让学习率振荡通常能比精心调整的固定或衰减调度在更少的迭代次数内达到目标精度[1] 同一篇论文还提出了学习率范围测试,这是一种短时扫描,能自动定位循环的边界。

    此后,循环调度已成为 PyTorch(`torch.optim.lr_scheduler.CyclicLR`)和 fast.ai 训练栈等库中的默认选择,并支撑了流行的 one-cycle(单周期)策略,可在数十个而非数百个轮次内将深度网络训练到高精度。

    背景与动机

    2015 年之前的大多数训练方案使用分段常数学习率,伴随一两次手动下降,有时辅以与验证损失挂钩的学习率衰减。两个实际问题促成了循环调度的出现。首先,选择初始学习率和下降时机需要代价高昂的反复试错扫描。其次,即便是精心调整的单调调度,也可能让优化器陷入鞍点附近,或被困在小步长无法逃离的狭窄尖锐极小值中。

    Smith 的假设是:周期性地提高学习率具有有益的正则化效果——大步长将迭代点推离尖锐极小值并越过鞍脊,随后的低速率阶段则使其能够稳定到附近更平坦的盆地。在极小学习率上花费的总计算量也减少了,这有助于观察到的实际运行时间加速。

    三角形调度

    基本的 CLR 策略称为三角形,它在长度为 $ s $步长)的半周期内将学习率从基值 $ \eta_{\min} $ 线性插值到最大值 $ \eta_{\max} $,然后在下一个半周期内线性返回$ \eta_{\min} $。定义周期索引

    $ {\displaystyle c = \left\lfloor 1 + \frac{t}{2s} \right\rfloor,} $

    以及周期内的位置

    $ {\displaystyle x = \left| \frac{t}{s} - 2c + 1 \right|.} $

    在第 $ t $迭代时的学习率为

    $ {\displaystyle \eta_t = \eta_{\min} + (\eta_{\max} - \eta_{\min})\,\max(0, 1 - x).} $

    典型的步长在以迭代次数衡量的两到十个轮次之间。Smith 报告说,当循环足够短,使训练预算内能容纳多个完整循环时,可获得良好的结果。

    学习率范围测试

    为了选择 $ \eta_{\min} $$ \eta_{\max} $,Smith 提出了范围测试(又称 LR 查找器)。该方法训练数百次迭代,同时将学习率从极小值(例如 $ 10^{-7} $)以指数方式增加到较大值(例如 $ 10 $),并记录每一步的训练损失。所得的损失-学习率曲线通常呈现三个区域:学习率过小无法取得进展的平坦区域、有效学习的陡峭下降区域,以及损失爆炸的发散区域。

    一个实用的启发式方法是:将 $ \eta_{\max} $ 设置在损失开始上升的速率附近或略低于该速率,将 $ \eta_{\min} $ 设置在大约小一个数量级处,靠近下降区域的起点。范围测试成本低廉(通常不到一个完整的轮次),可替代传统网格搜索所需的多次完整训练运行。

    变体

    Smith 的原始论文定义了三种共享三角形基本形状但随时间调节幅度的策略。

    • triangular(三角形):纯三角形,所有循环中振幅恒定。
    • triangular2(三角形2):差值 $ \eta_{\max} - \eta_{\min} $ 在每个循环结束时减半,在保留形状的同时逐渐缩小振荡。这将循环的探索优势与衰减调度的收敛行为相结合。
    • exp_range(指数范围):振幅按指数衰减,$ (\eta_{\max} - \eta_{\min})\gamma^t $,其中 $ \gamma \in (0,1) $

    一个密切相关的余弦变体用半余弦波代替三角形;这种更平滑的过渡是 SGDR(带热重启的随机梯度下降)的基础,由 Loshchilov 和 Hutter 提出。[2]

    One-cycle 策略

    在 2018 年的后续工作中,Smith 提出了 one-cycle(单周期)策略,其中学习率在整个训练运行过程中执行单个三角形,可选地在最后百分之几的迭代中通过短暂的衰灭阶段将其降至远低于 $ \eta_{\min} $[3] 该策略通常与镜像的循环动量调度相结合:在学习率上升时降低动量系数,然后反转,其依据的启发式观点是:当动量降低时,更高的学习率更容易被容忍。

    One-cycle 训练作为超收敛的方法被广泛推广,可在比传统调度少大约一个数量级的迭代次数内将 CIFAR-10 和 ImageNet 模型训练到具有竞争力的精度。PyTorch 中的实现为 `torch.optim.lr_scheduler.OneCycleLR`。

    与其他调度的比较

    循环调度在完全单调衰减和热重启系列之间占据中间位置。与阶梯衰减余弦退火相比,循环调度在高学习率下停留的时间显著更长,这起到了隐式正则化的作用,在训练数据有限或带噪声时尤为有用。与带热重启的余弦退火SGDR)相比,三角形形式更简单,可能也更容易理解,而 SGDR 倾向于产生更平滑的损失曲线,并自然适用于快照集成[4]

    诸如 Adam 之类的自适应优化器与循环调度的交互并不简单:自适应的逐参数缩放已经为高曲率方向衰减了较大的有效步长,因此循环的经验收益通常小于使用带动量的普通 SGD 时的收益。One-cycle 方案最常与带动量SGD 搭配使用。

    实际考虑与局限性

    循环调度引入了两个新的超参数($ \eta_{\min} $$ \eta_{\max} $)和一个步长,但范围测试在很大程度上自动化了前两者,并且第三个有良好的默认值。其主要代价是中间快照在不同循环之间不能直接比较:验证精度会随学习率振荡,因此模型选择应在循环结束时进行,而不是在任意迭代处进行。

    文献和实践经验中记录了若干注意事项。

    • 批归一化统计的相互作用可能并不简单;非常高的学习率会短暂破坏运行统计的稳定性,有时需要延长第一个循环的预热部分。
    • $ \eta_{\max} $ 的最佳值取决于批大小和模型宽度;将批大小加倍通常允许比例性更高的峰值速率。
    • 对于非常深的Transformer模型,one-cycle 策略的使用频率低于线性预热后接余弦衰减的方案,部分原因是层归一化和 pre-norm 架构能够容忍更高的恒定速率。

    循环学习率仍然是中等规模卷积和循环模型的强大默认选择,即使在最终采用其他调度的工作流中,也是一种有用的诊断工具,因为范围测试提供了一种快速且有原则的方法来限定任何学习率扫描的边界。

    参考文献

    1. Smith, L. N. Cyclical Learning Rates for Training Neural Networks. WACV, 2017. arXiv:1506.01186.
    2. Loshchilov, I. and Hutter, F. SGDR: Stochastic Gradient Descent with Warm Restarts. ICLR, 2017. arXiv:1608.03983.
    3. Smith, L. N. A Disciplined Approach to Neural Network Hyper-parameters: Part 1. Technical Report, US Naval Research Laboratory, 2018. arXiv:1803.09820.
    4. Huang, G. et al. Snapshot Ensembles: Train 1, get M for free. ICLR, 2017. arXiv:1704.00109.