学习率 (Learning Rate)
概述
学习率(Learning Rate, LR)是深度学习优化中最重要的超参数,没有之一。它控制着模型参数每次更新的步长大小,直接决定了模型能否收敛、收敛速度有多快、以及最终能达到的性能水平。在 2026 年的实践中,学习率不再是一个简单的固定标量,而是一个精心设计的调度策略(Learning Rate Schedule),包括 Warmup、Decay、Cosine Annealing 等阶段。
The learning rate is arguably the most important hyperparameter in deep learning. It controls the step size at each iteration while moving toward a minimum of the loss function. A learning rate that is too large causes the training to diverge; a learning rate that is too small makes training painfully slow and may get stuck in poor local minima.
学习率的基本原理
梯度下降中的学习率
其中 就是学习率, 是损失函数关于参数的梯度。
学习率大小的影响
| 学习率 | 表现 | 问题 |
|---|---|---|
| 过大 | Loss 震荡或发散 | 参数更新跳过最优点,Loss 变为 NaN |
| 偏大 | 初期快速下降,但无法收敛到最优点 | 在最优点附近来回震荡 |
| 适中 | 稳定快速收敛 | — |
| 偏小 | 收敛缓慢 | 训练时间过长,可能陷入局部最优 |
| 过小 | 几乎不收敛 | 训练卡住,梯度更新几乎为 0 |
学习率调度策略详解
1. Constant LR (恒定学习率)
学习率在整个训练过程中保持不变。简单但几乎从不使用——因为训练初期和后期对学习率的需求完全不同。
2. Step Decay (阶梯衰减)
每隔固定 Epoch 数量,将学习率乘以一个衰减因子(通常 0.1 或 0.5)。
- 优点:简单直观,易于理解和调试
- 缺点:衰减时间点和衰减幅度需要手动设置,不够灵活
- 适用:ResNet 等传统 CNN 训练
3. Cosine Annealing (余弦退火)
学习率按余弦函数从初始值衰减到最小值(通常接近 0):
- 优点:平滑衰减,无需手动设置衰减点,在实践中表现优异
- 缺点:最终学习率接近 0,可能过早停止学习
- 适用:2026 年绝大多数视觉和 NLP 任务的默认选择
4. Cosine Annealing with Warm Restarts (SGDR)
周期性重置学习率,每次重启后学习率恢复到初始值,然后再次余弦衰减。每次周期的长度可以逐渐增加。
- 优点:周期性跳出局部最优,可能找到更好的解
- 适用:需要长时间训练的任务,或 Ensemble 时取不同周期的模型
5. Linear Warmup + Cosine Decay (预热 + 余弦衰减)
2026 年 LLM 训练的标准配置:
- Warmup 阶段:学习率从 0 或极小值线性增加到目标值(通常 1000-4000 步)
- Cosine Decay 阶段:Warmup 结束后,学习率按余弦曲线衰减到最小值
为什么需要 Warmup:
- 训练初期,模型参数是随机初始化的,梯度方向不稳定
- 大学习率在初期可能导致梯度爆炸
- Warmup 让模型先用小步长”探索”损失景观,找到合适的下降方向
- 在使用 LayerNorm 和 Adam 的 Transformer 中,Warmup 几乎是必需的
6. Polynomial Decay (多项式衰减)
其中 p 是衰减指数。p=1 为线性衰减,p=2 为二次衰减。
7. OneCycleLR (单周期学习率)
学习率先上升后下降,形成单一周期。由 Leslie Smith 提出,常用于快速训练。
学习率调度策略对比
| 调度策略 | 需要 Warmup | 需要调参 | 收敛速度 | 最终精度 | 2026 年主流度 |
|---|---|---|---|---|---|
| Constant | 否 | 最简 | 慢 | 中 | 几乎不用 |
| Step Decay | 否 | 中等 | 快 | 中 | 少量使用 |
| Cosine Annealing | 推荐 | 少 | 快 | 高 | 主流 |
| Cosine + Warm Restarts | 推荐 | 中等 | 快 | 高 | 竞赛使用 |
| Linear Warmup + Cosine | 是 | 少 | 快 | 最高 | LLM 标准 |
| Polynomial | 可选 | 中等 | 中 | 中 | 少量使用 |
| OneCycleLR | 否 (内置) | 中等 | 极快 | 中高 | 快速实验 |
如何选择学习率
LR Finder (学习率查找器)
由 Leslie Smith 提出,2026 年仍是最有效的学习率选择方法:
- 从一个极小学习率开始(如 1e-7)
- 每个 mini-batch 后将学习率乘以一个小的因子(如 1.1)
- 记录每个学习率对应的 Loss
- 绘制 LR vs Loss 曲线
- 选择 Loss 下降最快的点对应的学习率(或略小的值)
解读 LR Finder 曲线:
- Loss 持续下降的区间 → 学习率偏小,但安全
- Loss 下降最快的区间 → 最佳学习率范围
- Loss 开始震荡的区间 → 学习率偏大
- Loss 突然飙升 → 学习率过大,训练发散
不同场景的推荐学习率范围
| 场景 | 优化器 | 推荐初始 LR | 说明 |
|---|---|---|---|
| 图像分类 (CNN) | SGD + Momentum | 0.1 | 配合 Step Decay |
| 图像分类 (CNN) | Adam/AdamW | 1e-3 ~ 3e-4 | 配合 Cosine |
| Transformer / LLM | AdamW | 1e-4 ~ 3e-4 | 需要 Warmup |
| 微调 LLM (LoRA) | AdamW | 1e-4 ~ 5e-4 | 比全量微调高 |
| GAN | Adam | 1e-4 ~ 2e-4 | G 和 D 可用不同 LR |
| 强化学习 | Adam | 1e-4 ~ 3e-4 | 通常恒定 LR |
2026 年最佳实践
LLM 训练的标准配置
优化器: AdamW (β1=0.9, β2=0.95, weight_decay=0.1)
学习率: 3e-4 (max), 3e-5 (min)
Warmup: 2000 steps, linear
Decay: Cosine to min
Batch Size: 4M tokens (with gradient accumulation)
关键原则
- 学习率与 Batch Size 的关系:大批量训练可以用更大的学习率。经验法则:batch size 翻倍,学习率可翻倍或乘以 sqrt(2)
- Warmup 对 Transformer 至关重要:几乎所有 LLM 训练都使用 Warmup
- Cosine Decay 是最通用的衰减策略:无需手动调整衰减时间点
- 使用 Gradient Clipping:配合学习率调度,防止梯度爆炸
- 学习率与优化器协同:Adam 的自适应学习率降低了手动调整的需求,但初始学习率仍然重要
相关笔记
- 损失函数 (Loss Function) — 学习率直接影响损失函数收敛
- 梯度下降 (Gradient Descent) — 学习率是梯度下降的核心参数
- 概念-优化器详解 — 优化器与学习率调度的协同
- 学习曲线 (Learning Curves) — 学习曲线反映学习率设置的好坏
- 批归一化 (Batch Normalization) 与归一化家族 — BatchNorm 允许使用更大的学习率
来源
- Smith, L. N. (2017). Cyclical Learning Rates for Training Neural Networks. WACV. https://arxiv.org/abs/1506.01186
- Smith, L. N. (2018). A Disciplined Approach to Neural Network Hyper-Parameters: Part 1 — LR, Batch Size, Momentum, and Weight Decay. https://arxiv.org/abs/1803.09820
- Loshchilov, I. & Hutter, F. (2017). SGDR: Stochastic Gradient Descent with Warm Restarts. ICLR. https://arxiv.org/abs/1608.03983
- Gotmare, A., et al. (2019). A Closer Look at Deep Learning Heuristics: LR Restarts, Warmup, and Distillation. ICLR. https://arxiv.org/abs/1810.13243
- Karpathy, A. (2024). “A Recipe for Training Neural Networks”: https://karpathy.github.io/2019/04/25/recipe/