LR Scheduling
Learning Rate Scheduling
在DNN训练中的另一大挑战就是设置合适的learning rate schedule。不合适的设置会导致:
- 训练的不稳定
- 过慢的convergence
- convergence to suboptimal solutions
学习率调度器(Learning Rate Schedulers)在深度学习训练中非常重要,它通过动态调整学习率 ,帮助模型在训练初期快速学习,在后期稳定细致地优化,从而提高收敛速度和 最终模型性能 。
具体来说,学习率(Learning Rate) 是优化器(如SGD、Adam)更新模型参数时所迈出的步长。步子太大,可能会跳过最优解;步子太小,则收敛太慢。调度器(Schedulers)就是用来自动管理和调整这个步长的机制。它不是使用一个固定的学习率,而是根据预设的规则(如周期数、损失值变化)来改变它。
其具体作用如下:
- 训练初期(Fast Progress Early On): 刚开始训练时,模型参数离最佳值很远,可以使用 较大的学习率 。这使得模型可以快速穿过平坦的损失区域,迅速找到损失函数的”大致方向”,从而实现 快速收敛 。
- 训练后期(Stable Fine-Tuning Later): 随着训练的进行,模型参数越来越接近损失函数的最低点。这时如果继续使用大步长,模型就会在最优解附近来回 震荡 ,无法稳定收敛。因此,调度器会 降低学习率 ,让模型”迈小步”,进行 稳定、细致的优化(fine-tuning) ,确保能找到更精确的最低点。
最终,通过早期的大步长,模型能更快地达到一个可接受的性能水平;通过后期的微小步长,模型能更精确地定位到损失函数的全局(或局部)最小值,从而获得 更高的准确率和更低的损失 。
学习率调度器就像是 汽车的油门和刹车 。刚上路时(训练初期)加大油门(高学习率)迅速提速;快到目的地时(训练后期)轻踩刹车(低学习率)缓慢而精确地停到位。这种动态控制是深度学习中提高效率和精度的一个 关键技巧 。
Line Search 与学习率的优化视角
在经典优化理论中,梯度下降(GD)的每一步更新都涉及选择合适的步长 \(\lambda_k\):
注意在原始的梯度下降方法中(不是机器学习而是优化领域),步长 \(\lambda_k\) 在每次迭代 \(k\) 都可能不同。通常需要通过 线搜索(Line Search) 来确定这个值——即沿更新方向 \(\Delta\theta^{(k)}\) 搜索使损失函数下降的步长。
Backtracking Line Search(回溯线搜索): 从一个较大的步长开始,逐步缩小直到满足充分下降条件(Armijo condition)。
Exact Line Search(精确线搜索): 精确求解一维优化问题 \(\min_{\lambda > 0} J(\theta^{(k)} - \lambda \nabla J(\theta^{(k)}))\)。

上图展示了对函数 \(f(x_1, x_2) = e^{x_1+3x_2-0.1} + e^{x_1-3x_2-0.1} + e^{-x_1-0.1}\) 的优化过程,backtracking line search 的轨迹呈锯齿状,而 exact line search 的路径更直接。两种算法都展现 线性收敛(linear convergence)。
但在DNN训练中,每步都进行线搜索的计算开销太大。因此研究者们致力于设计 学习率调度(schedule) 或规则来自动更新学习率,避免数值搜索。
SGD 收敛的充分条件(Robbins-Monro 条件)
对于 SGD 更新 \(\theta^{k+1} \leftarrow \theta^k - \lambda_k \cdot g(\theta^k)\),其中 \(g(\theta^k)\) 是梯度的随机估计,收敛需要以下 充分条件:
直觉解释:
- 第一个条件 \(\sum \lambda_k = \infty\) 保证步长总和足够大,使得优化过程能够到达参数空间中的任何位置
- 第二个条件 \(\sum \lambda_k^2 < \infty\) 保证步长最终足够小,使得噪声的影响逐渐消失,收敛到稳定解
重要提示: 条件 (C) 是 充分条件但非必要条件——满足 (C) 可以保证 SGD 收敛,但 SGD 收敛不一定需要 (C)。由于第二个条件要求学习率递减,这就是衰减学习率调度器的理论基础。
实践中,存在许多满足这些条件的学习率调度器:从最大值 \(\lambda_{max}\) 开始,逐渐衰减到最小值 \(\lambda_{min}\) 并保持。不同的调度器区别在于衰减函数 \(f(k, \lambda_0)\) 的选择。由于实际训练会在有限步 \(k\) 后停止,这种递减调度通常效果良好。
Step Decay
Step Decay(阶梯衰减)是最简单、最经典的学习率调度策略。其核心思想是每隔固定的 epoch 数,将学习率乘以一个衰减因子(通常为 0.1 或 0.5)。
公式:
其中 \(\eta_0\) 是初始学习率,\(\gamma\) 是衰减因子(如 0.1),\(S\) 是衰减步长(每隔多少个 epoch 衰减一次),\(\lfloor \cdot \rfloor\) 是取整操作。
典型设置: 在 ImageNet 训练 ResNet 的经典设置中,初始学习率 \(\eta_0 = 0.1\),每 30 个 epoch 将学习率乘以 0.1(即在第 30、60、90 个 epoch 时衰减)。
优点: 实现简单,效果稳定,是很多经典论文的默认选择。
缺点: 需要手动选择衰减的时机和幅度,不够灵活;学习率的突变可能导致训练过程中 loss 出现短暂的不稳定。
在 PyTorch 中对应 torch.optim.lr_scheduler.StepLR 和 MultiStepLR。
Exponential Decay
Exponential Decay(指数衰减)让学习率按指数函数平滑地衰减,避免了 Step Decay 中学习率突然跳变的问题。
公式:
其中 \(\gamma \in (0, 1)\) 是每个 epoch 的衰减率,如 \(\gamma = 0.95\) 或 \(\gamma = 0.99\)。
特点: 学习率呈平滑的指数曲线下降,前期下降较快,后期下降逐渐放缓。相比 Step Decay,指数衰减更加平滑,不会有突然的学习率跳变。但需要注意 \(\gamma\) 的选取:如果 \(\gamma\) 太小,学习率会过快衰减,可能导致训练不充分;如果 \(\gamma\) 太接近 1,则衰减太慢,与固定学习率差别不大。
在 PyTorch 中对应 torch.optim.lr_scheduler.ExponentialLR。
Inverse Square Root Decay
Inverse Square Root Decay(逆平方根衰减)是满足 Robbins-Monro 条件的经典调度,在 Transformer 的 Noam scheduler 中被广泛使用:
这是多项式衰减 \(\lambda_k = \lambda_0 / (k+1)^p\) 在 \(p = 0.5\) 时的特例。该衰减速度适中——比指数衰减慢,但比线性衰减快,特别适合需要长时间训练的场景。
收敛性分析
关于不同调度器的收敛性,有几个重要结论:
衰减路径的影响: 学习率衰减的具体函数形状并不是最关键的因素。大多数收敛分析使用多项式学习率 \(\lambda_t = \lambda_0 / \sqrt{t}\) 作为分析对象。不同的变体可能影响损失曲线的稳定性,但不应影响算法是否收敛。
多项式学习率的收敛步数: 对于多项式学习率 \(\lambda_k = \lambda_0 / (k+1)^p\)(\(p \in (0,1)\)),达到最优性间隙 \(\|J(\theta^k) - J(\theta^*)\|\) 小于某个阈值所需的步数为:
其中 \(m\) 是数据样本数,\(p\) 是多项式幂次,\(c\) 是常数。(参见 Yao 2007, Early Stopping)
直觉:
- 更大的数据集(更大的 \(m\))→ 更长的训练时间
- 更小的 \(p\)(\(0 < p < 1\))→ 更小的 \(N^*\),即更激进的学习率衰减 → 更短的训练时间。这解释了为什么 指数衰减 在某些场景下收敛更快
Cosine Annealing
Cosine Annealing(余弦退火)是目前非常流行的学习率调度策略,由 Loshchilov 和 Hutter 在2016年的 SGDR(SGD with Warm Restarts)论文中提出。
公式:
其中 \(\eta_{max}\) 是最大学习率(通常等于初始学习率),\(\eta_{min}\) 是最小学习率(通常取 0 或一个极小值),\(T\) 是总的训练周期数,\(t\) 是当前周期。
为什么有效:
- 训练初期学习率高,可以快速探索参数空间
- 训练中期学习率平缓下降,逐步精细化
- 训练后期学习率接近零,在局部最优点附近进行精细搜索
- 余弦曲线的形状使得学习率在开始和结束时变化缓慢、中间变化较快,这比线性衰减更符合实际训练的需求
Warm Restarts(SGDR): SGDR 的核心思想是周期性地将学习率"重启"回初始值,然后再次按余弦曲线衰减。这种策略的好处是:当学习率突然增大时,模型会跳出当前的局部最优,有机会探索到更好的解。每次重启后的余弦衰减又能让模型稳定收敛。实践中,重启周期可以逐渐加长(如 \(T_0, 2T_0, 4T_0, \ldots\)),这样前期多探索,后期多收敛。
在 PyTorch 中对应 torch.optim.lr_scheduler.CosineAnnealingLR 和 CosineAnnealingWarmRestarts。
Warmup
Warmup(学习率预热)是指在训练刚开始的若干步中,将学习率从一个很小的值(如 0 或 \(10^{-7}\))线性增长到目标学习率,然后再按照其他策略(如余弦退火)进行衰减。
Linear Warmup 公式:
其中 \(T_{warmup}\) 是预热步数,\(\eta_{target}\) 是目标学习率。
为什么需要 Warmup:
- 训练初期参数不稳定: 模型参数是随机初始化的,初始梯度的方向和大小都不可靠。如果一开始就用很大的学习率,模型可能会被带到参数空间中很差的区域,甚至直接发散。
- Adaptive Optimizer 的统计量不准确: 对于 Adam 等自适应优化器,训练刚开始时一阶矩和二阶矩的估计非常不准确(因为样本太少),此时大学习率会导致异常大的参数更新。
- 大 Batch 训练的必要条件: 当使用非常大的 batch size(如数千甚至数万)时,梯度估计非常准确(方差小),如果直接用大学习率,模型容易过早收敛到尖锐的局部最小值(sharp minima),泛化性差。Warmup 给模型一个缓冲期,让参数先在一个合理的范围内"热身"。
- Transformer 训练的标配: 原始 Transformer 论文(Vaswani et al., 2017)中使用的 Noam scheduler 就包含 warmup 阶段。其学习率公式为:
前 \(T_{warmup}\) 步线性增长,之后按 \(t^{-0.5}\) 衰减。几乎所有现代 Transformer 模型(BERT、GPT、ViT 等)都使用 warmup。
Warmup 的理论动机: 从 Hessian 的角度理解,训练初期参数远离最优点,损失曲面的曲率(Hessian 特征值)可能非常大且不稳定。此时最优学习率 \(\lambda \approx 1/h\)(\(h\) 为 Hessian 对角元素)很小。如果直接使用大学习率,更新量 \(\lambda \cdot g\) 会远超 Newton 步的大小,导致参数跳到更差的区域甚至发散。Warmup 让学习率从小值逐步增大,给模型时间稳定梯度统计量和 Hessian 估计。
OneCycleLR
OneCycleLR(1Cycle Policy)由 Leslie Smith 在2018年提出,其核心发现是使用比传统方法更大的学习率,配合特殊的调度策略,可以实现 Super-Convergence(超级收敛) -- 用更少的训练步数达到更好的效果。
策略描述:
整个训练过程分为两个阶段:
- 上升阶段(约占前 30%-45% 的训练): 学习率从一个较低值线性增长到最大学习率 \(\eta_{max}\)
- 下降阶段(约占后 55%-70% 的训练): 学习率从最大值余弦退火到一个极小值(甚至接近 0)
同时,动量(momentum)做相反的变化:学习率升高时动量降低,学习率降低时动量升高。
Super-Convergence: Smith 发现,在使用 1Cycle Policy 时,最大学习率可以设置为传统方法的 3-10 倍。配合这种"先升后降"的策略,模型可以用传统方法 1/5 甚至 1/10 的训练步数达到相同甚至更好的性能。这种现象称为超级收敛。
如何选择最大学习率: 使用 LR Range Test(学习率范围测试):将学习率从一个极小值逐步增大到一个极大值,记录每个学习率对应的 loss。选择 loss 下降最快处对应的学习率作为 \(\eta_{max}\)。
在 PyTorch 中对应 torch.optim.lr_scheduler.OneCycleLR。
ReduceLROnPlateau
ReduceLROnPlateau(基于平台期的学习率衰减)是一种自适应调度策略。它不依赖预设的衰减计划,而是监控某个指标(通常是 validation loss),当指标在连续若干个 epoch 内不再改善时,自动降低学习率。
工作机制:
- 监控指标(如 validation loss)在
patience个 epoch 内没有改善 - 将学习率乘以
factor(通常为 0.1 或 0.5) - 可以设置
min_lr防止学习率降得过低 - 可以设置
threshold来定义"改善"的最小幅度
典型设置: patience=10, factor=0.1,即如果 validation loss 连续 10 个 epoch 没有下降,就将学习率缩小为原来的 1/10。
优点: 不需要预先知道最佳的衰减时机,完全由训练过程中的表现驱动。特别适合不确定训练需要多少个 epoch 的场景。
缺点: 是一种被动策略,只有在发现性能停滞后才降低学习率,存在一定的滞后性。
在 PyTorch 中对应 torch.optim.lr_scheduler.ReduceLROnPlateau。
调度器对比总结
| 调度策略 | 核心机制 | 超参数 | 典型应用场景 |
|---|---|---|---|
| Step Decay | 每隔固定 epoch 乘以衰减因子 | 衰减步长, 衰减因子 | CNN 分类(ResNet 等) |
| Exponential Decay | 每个 epoch 乘以固定衰减率 | 衰减率 \(\gamma\) | 通用,适合平滑衰减需求 |
| Cosine Annealing | 按余弦曲线从高到低 | 最大/最小学习率, 周期 \(T\) | 现代训练的主流选择 |
| Warmup | 训练初期线性增长学习率 | 预热步数 | Transformer, 大 Batch 训练 |
| OneCycleLR | 先升后降 + 动量反向变化 | 最大学习率, 训练总步数 | 追求快速收敛、超级收敛 |
| ReduceLROnPlateau | 监控指标停滞时降低学习率 | patience, factor | 不确定训练时长的场景 |
实践建议:
- 训练 Transformer 类模型时,推荐使用 Warmup + Cosine Annealing 的组合
- 训练 CNN 分类模型时,Step Decay 和 Cosine Annealing 都是不错的选择
- 如果追求快速训练,可以尝试 OneCycleLR
- 如果对任务不够了解、不确定训练多少个 epoch 合适,可以用 ReduceLROnPlateau 作为兜底方案
- 在几乎所有大规模训练中,Warmup 都是必不可少的
Polynomial Decay
Polynomial Decay(多项式衰减)按多项式函数将学习率从初始值衰减到最小值:
其中 \(p\) 是多项式的幂次。当 \(p = 1\) 时,就是 Linear Decay(线性衰减),即学习率均匀地从 \(\eta_0\) 下降到 \(\eta_{min}\)。
Linear Decay 是 BERT 和许多 NLP 模型训练的默认选择。典型配置为 Warmup + Linear Decay:前若干步线性增长学习率,之后线性衰减到 0。
# PyTorch - Warmup + Linear Decay
from transformers import get_linear_schedule_with_warmup
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=1000,
num_training_steps=total_steps
)
在 PyTorch 中对应 torch.optim.lr_scheduler.PolynomialLR。
组合使用调度器
在实际训练中,调度器往往组合使用。最常见的组合是 Warmup + 主调度器:
import torch.optim as optim
from torch.optim.lr_scheduler import SequentialLR, LinearLR, CosineAnnealingLR
optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
# Warmup: 前1000步线性从 0.01*lr 增长到 lr
warmup = LinearLR(optimizer, start_factor=0.01, total_iters=1000)
# 主调度器: Cosine Annealing
cosine = CosineAnnealingLR(optimizer, T_max=total_epochs - 1000)
# 组合: 先 Warmup 再 Cosine
scheduler = SequentialLR(optimizer, [warmup, cosine], milestones=[1000])
常见组合:
| 组合 | 适用场景 |
|---|---|
| Warmup + Cosine Annealing | Transformer 预训练、ViT |
| Warmup + Linear Decay | BERT/GPT 微调 |
| Warmup + Cosine with Warm Restarts | 长时间训练、探索能力强 |
| OneCycleLR(内置 Warmup) | CNN 快速训练 |
自适应学习率方法(Adaptive Learning Rate)
以上调度器按照预设的时间表调整学习率。下面介绍另一类方法:根据训练过程中的信息自适应地调整学习率,包括基于梯度符号的启发式方法、基于 Hessian 的二阶方法,以及包含周期/重启机制的策略。
基于梯度的启发式方法:Delta-Bar-Delta
Jacobs (1988) 提出了学习率自适应的四条启发式规则:
- 每个参数应有独立的学习率(per-dimension LR)
- 学习率应随时间变化
- 当某参数的梯度在多个连续时间步保持相同符号时,该参数的学习率应增大
- 当某参数的梯度在多个连续时间步符号交替时,该参数的学习率应减小
注意:规则 3 和 4 的思想与动量(Momentum)的核心思想相同。
Delta-Bar-Delta (DBD) 更新规则:
其中 \(\delta > 0\) 是增大学习率的常数,\(1 > \varepsilon > 0\) 是减小学习率的因子,\(g(t) = \nabla J(\theta^t)\) 是当前梯度,\(\bar{g}(t) = (1 - \beta)g(t) + \beta\bar{g}(t-1)\) 是梯度的指数移动平均。
参考文献:Jacobs, R. A. "Increased rates of convergence through learning rate adaptation." Neural Networks 1, no. 4 (1988): 295-307.
Regrettable DBD(RDBD,Song 2023): 现代改进版本,核心思想是检查条件 \(\langle g_t, g_{t-1} \rangle \cdot \langle g_{t+1}, g_t \rangle \geq 0\)。如果不满足,则"撤销"上一步的学习率更新(regrettable);如果满足,则按以下规则更新:

参考文献:Song, Zhao, and Chiwun Yang. "An automatic learning rate schedule algorithm for achieving faster convergence and steeper descent." arXiv preprint arXiv:2310.11291 (2023).
最优学习率与 Hessian 的关系
从 Newton 法推导最优学习率
回顾梯度下降只使用一阶导数(梯度):\(\Delta\theta_{GD}^{(k)} = -\nabla J(\theta^{(k)})\),而 Newton 法 使用二阶导数(Hessian),收敛速度远快于 GD:
其中 \(H_k = \nabla^2 J(\theta^{(k)})\) 是 Hessian 矩阵(\(n \times n\))。
1D 情况的直觉: 考虑 \(\min_\theta f(\theta)\),\(\theta \in \mathbb{R}\),此时:
其中 \(h = f''(\theta)\) 是二阶导数。则:
这意味着 最优学习率 为:
即学习率应为 Hessian(二阶导数)的倒数,这样 GD 就能达到 Newton 法的性能。
注意: 这个 \(\lambda_{opt} = 1/h\) 只在 1D 情况下严格成立。在高维情况下,Newton 步涉及完整的 Hessian 逆矩阵 \(H^{-1}\),无法简单地用一个标量学习率替代。


Preconditioning(预条件化)
由于计算完整的 \(H^{-1}\) 代价极高(\(n \times n\) 矩阵求逆),实际方法都采用 逐维度(per-dimension) 近似:只使用 Hessian 的对角元素,分别对每个参数应用独立的学习率。这称为 预条件化(preconditioning),其效果是通过拉伸或压缩某些维度,使损失曲面变得不那么"病态(ill-conditioned)"。
Hessian 计算的注意事项:
- 如何计算 Hessian 对角线? 通常通过对梯度本身做反向传播(backprop of backprop),需要额外一次反向传播,但可以与标准反向传播并行执行(有一步延迟)
- Mini-batch 的影响: 由于使用随机数据,得到的 Hessian 对角线是真实 Hessian 的一个估计
AdaDelta
AdaDelta(Zeiler, 2012)利用 Hessian 的 "思想" 但不显式计算二阶导数。其核心推导如下:
从 Newton 步出发:\(\Delta\theta_{Newton} = -g/h\),因此 \(1/h = -\Delta\theta_{Newton}/g\)。
在 AdaGrad/RMSProp 中:\(\Delta x = -\frac{\eta}{\sqrt{v_t + \epsilon}} g_t\),其中 \(v_t = \beta v_{t-1} + (1-\beta)g_t^2\),即等效学习率 \(\lambda_t = \eta / \sqrt{v_t + \epsilon}\)。
要让 \(\lambda_t \approx 1/h\),即 \(\frac{\eta}{\sqrt{v_t + \epsilon}} \approx \frac{\Delta\theta_{Newton}}{g_t}\)。由于 \(\sqrt{v_t + \epsilon}\) 包含梯度信息(等价于 \(g_t\)),因此希望 \(\eta\) 等价于 \(\Delta\theta\)——用过去参数更新量的 RMS 来代替:
从而得到 AdaDelta 更新规则:
其中:
特点: AdaDelta 不需要手动设置全局学习率 \(\eta\),这是其相对于 AdaGrad 和 RMSProp 的主要优势。但目前没有理论收敛保证。


参考文献:Zeiler, M. D. "Adadelta: an adaptive learning rate method." arXiv preprint arXiv:1212.5701 (2012).
Adaptive Gradient Descent without Descent(AdGD)
Malitsky and Mishchenko (2019) 提出了一种不依赖线搜索的自适应学习率方法。核心思想是利用连续迭代间的梯度差来 近似 Hessian:
注意 \(L_k\) 近似梯度的导数,即 近似 Hessian \(h_k\)。然后学习率更新为:
其中 \(r_k = \lambda_k / \lambda_{k-1}\)。该公式包含两部分:\(\sqrt{1 + r_{k-1}} \cdot \lambda_{k-1}\) 实际上在 增大 学习率,而 \(\alpha / L_k\) 是 Hessian 倒数的近似。
理论保证: 对于具有局部光滑性的凸损失函数,收敛速率为 \(\|J(\theta^k) - J(\theta^*)\| \sim O(1/k)\)。


参考文献:Malitsky, Y. and Mishchenko, K. "Adaptive gradient descent without descent." arXiv preprint arXiv:1910.09529 (2019).
vSGD:基于二阶信息的学习率自适应
Schaul, Zhang, and LeCun (2013) 提出了 vSGD,通过最小化期望损失(考虑随机数据的影响),推导出每个维度 \(i\) 的最优学习率:
其中 \(\sigma^2\) 是最优参数的方差。由于实践中不知道 \(\theta^*\) 及其方差,上式被近似为:
vSGD 算法(结合指数移动平均):

参考文献:Schaul, T., Zhang, S., and LeCun, Y. "No more pesky learning rates." ICML, pp. 343-351. PMLR, 2013.
AdaHessian
AdaHessian(Yao et al., 2021)是一种自适应二阶优化器,使用 Newton 步 \(\Delta\theta = -H^{-k} \cdot g\)(\(0 \leq k \leq 1\) 为 Hessian 幂次超参数),但仅计算 Hessian 对角线来降低计算开销。
核心思想: 对梯度进行 预条件化:\(\Delta\theta = [\text{diag}(H)]^{-k} \cdot g = D^{-k} \cdot g\),其中 \(D\) 是 Hessian 对角线。

算法步骤:
- 计算梯度 \(g_t \leftarrow \nabla J(\theta^t)\)
- 计算 Hessian 对角线 \(h_t\)(通过 backprop of \(g_t\))
- Batch 平均 Hessian 对角线:\(d_t \leftarrow \text{batch\_avg}(h_t)\)
- Hessian 对角线平方的 EMA:\(\bar{d}_t^2 \leftarrow \beta_2 \bar{d}_{t-1}^2 + (1-\beta_2)d_t^2\)
- 动量:\(m_t \leftarrow \beta_1 m_{t-1} + (1-\beta_1)g_t\)
- 关键步骤 —— 计算预条件化分母:\(v_t \leftarrow (\bar{d}_t)^k\)
- 参数更新:\(\theta_{t+1} \leftarrow \theta_t - \eta \cdot m_t / v_t\)
Hessian 幂次 \(k\) 的作用:
| \(k\) 值 | 等价方法 |
|---|---|
| \(k = 0\) | 退化为 AdaGrad(带 EMA) |
| \(0 < k < 1\) | 介于一阶和二阶方法之间 |
| \(k = 1\) | 使用完整的 Newton 步长/学习率 |

计算开销: Hessian 对角线通过 Hutchinson 方法近似计算。计算频率可以调节——不必每步都计算:
| Hutchinson 计算频率 | 1 | 2 | 3 | 5 |
|---|---|---|---|---|
| 理论开销(\(\times\)SGD) | \(2\times\) | \(1.5\times\) | \(1.33\times\) | \(1.2\times\) |
在 ResNet20/CIFAR10 上,即使每5步计算一次 Hessian,精度也几乎不受影响(92.16 vs 92.13)。
参考文献:Yao, Z., Gholami, A., Shen, S., et al. "Adahessian: An adaptive second order optimizer for machine learning." AAAI, vol. 35, no. 12, pp. 10665-10673. 2021.
Cyclic Learning Rate(CLR)
Cyclic Learning Rate(Smith, 2017)采用三角形(triangular)波形在最大值和最小值之间周期性地循环学习率,而非单调衰减。

核心思想: 周期性调度的目的是通过重启学习率来 跳出当前局部最小值区域,探索新的区域。这一思想虽然是启发式的,但实践效果很好,与优化领域的"重启(restart)"技术相关。
LR Range Test(学习率范围测试) 用于确定 \(\lambda_{min}\) 和 \(\lambda_{max}\):
- 设定最小和最大学习率范围
- 绘制 accuracy vs. LR 曲线
- 注意 accuracy 开始增加 时对应的 LR → 设为 \(\lambda_{min}\)
- 注意 accuracy 开始下降或变得不稳定 时的 LR → 设为 \(\lambda_{max}\)
变体: CLR 还可以与自适应优化器组合(如 Nesterov + CLR、Adam + CLR),在 CIFAR-10 上的实验表明组合效果良好。

参考文献:Smith, L. N. "Cyclical learning rates for training neural networks." WACV, pp. 464-472. IEEE, 2017.
SGDR:SGD with Warm Restarts
SGDR(Loshchilov and Hutter, 2017)在 Cyclic LR 的基础上,使用 余弦退火 + 周期性 Warm Restart 的组合。
具体策略: 执行多个 run,每个 run \(i\) 持续 \(T_i\) 个 epoch。每次 restart 时,使用上一 run 的最终参数值作为新 run 的初始点。第 \(i\) 个 run 内部按余弦调度衰减学习率:
其中 \(\eta_{max}^i\) 和 \(\eta_{min}^i\) 分别是第 \(i\) 个 run 的最大和最小学习率,\(T_i\) 是其持续时间。
关键设计:
- 不同 run 可以有不同的持续时间 \(T_i\) 和不同的 (\(\eta_{max}\), \(\eta_{min}\))
- 建议逐步增大 \(T_i\)(如 \(T_0, 2T_0, 4T_0, \ldots\)):短周期快速探索多个局部最小值区域,长周期锁定在好的局部最小值中
- 也可以逐步减小 \(\eta_{max}\) 和 \(\eta_{min}\)
- Warm Restart LR 调度非常鲁棒

参考文献:Loshchilov, I. and Hutter, F. "SGDR: Stochastic gradient descent with warm restarts." arXiv preprint arXiv:1608.03983 (2016).
Adaptive Restart for Accelerated Gradient Schemes
O'Donoghue and Candes (2015) 提出了用于加速梯度法(如 Nesterov Momentum)的自适应重启方案。
Restart 算法的基本思想:
- 运行原始算法 \(T\) 步
- 如果未收敛,将最后一个点 \(\theta^{(T)}\) 作为新的起点重新运行
- 每次 restart 使用相同的超参数和策略(只换起始点)
对于 GD + Nesterov Momentum:
高动量 \(\beta \to 1\) 会导致更多的振荡(rippling)。最优动量 \(q = \mu/L\)(强凸参数/光滑参数的比值),但通常未知。
三种 Restart 条件:
| 方案 | 条件 | 含义 |
|---|---|---|
| Fixed Restart | 每隔固定 \(T\) 步 | 简单但不自适应 |
| Function Restart (FR) | \(J(\theta^k) > J(\theta^{k-1})\) | 损失增加时重启 |
| Gradient Restart (GR) | \(g_{k-1}^T \cdot (m_k - m_{k-1}) > 0\) | 梯度与动量变化方向相反时重启 |
Gradient Restart 的直觉: 下降方向要求 \(\nabla J(\theta)^T \cdot \Delta\theta < 0\)。GR 条件 \(g_{k-1}^T \cdot (m_k - m_{k-1}) > 0\) 意味着 \((-g_{k-1})^T \cdot (m_k - m_{k-1}) < 0\),即动量的变化方向与梯度下降方向相反——暗示损失函数可能在增加,此时重启。

理论结论: 自适应重启方法可以在 不需要知道问题结构(如 Hessian 最大/最小特征值)的情况下,达到最优的线性收敛速率。
参考文献:O'Donoghue, B. and Candes, E. "Adaptive restart for accelerated gradient schemes." Foundations of Computational Mathematics 15, no. 3 (2015): 715-732.