深度学习常用学习率衰减方法全解
扫盲
什么是学习率?
想象
X
2
X^2
X2图像,学习率就是下降找最优解的步长(从左边或者右边下山的步幅)
步子太大(学习率高)→ 可能会跳过宝藏
步子太小(学习率低)→ 找得很慢
越到底部我们可以发现如果步长不变的话,会左右震荡
所以,我们需要学习率衰减,开始大步找,后来慢慢小步调整
一、基础衰减方法
1. 固定步长衰减 (StepLR)
公式:
η
t
=
η
0
×
γ
⌊
t
/
s
⌋
\eta_t = \eta_0 \times \gamma^{\lfloor t/s \rfloor}
ηt=η0×γ⌊t/s⌋
参数:
step_size
:衰减周期(每s个epoch衰减一次)gamma
:衰减系数(通常0.1-0.5)
特点:- 简单易用
- 呈阶梯式下降
适用场景: - 初步训练阶段
- 需要稳定降低学习率的任务
怎么用:每走5步,步子减半
例子:
开始步子:1米
第5层后:0.5米
第10层后:0.25米
第1步:1米 → 第2步:1米 → ... → 第5步:1米
第6步:0.5米 → 第7步:0.5米 → ...
2. 多步长衰减 (MultiStepLR)
公式:
η
t
=
η
0
×
γ
∑
m
1
(
t
≥
m
)
\eta_t = \eta_0 \times \gamma^{\sum_{m} \mathbf{1}(t \geq m)}
ηt=η0×γ∑m1(t≥m)
参数:
milestones
:预设衰减节点列表(如[30,60,90])
特点:- 允许非均匀间隔衰减
- 更灵活的阶段控制
适用场景: - 分阶段训练(如预训练+微调)
- 复杂学习率调度需求
方法名称 | 公式/原理 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
固定步长衰减 | lr = lr * γ (每N步衰减γ倍) | 简单易实现 | 需手动设置衰减点 | 基础分类任务 |
指数衰减 | lr = lr₀ * e^(-kt) | 平滑连续变化 | 对初始参数敏感 | 收敛稳定性要求高的任务 |
时间衰减 | lr = lr₀ / (1 + kt) | 初期衰减快后期平缓 | 需调优衰减系数k | 大规模数据集训练 |
阶梯衰减 | lr = lr₀ * γ^floor(t/N) | 离散式分段调整 | 学习率突变可能破坏收敛 | 典型CV任务(如ResNet) |
二、自适应衰减方法
3. 指数衰减 (ExponentialLR)
公式:
η
t
=
η
0
×
γ
t
\eta_t = \eta_0 \times \gamma^{t}
ηt=η0×γt
特点:
- 连续指数下降
- 需要谨慎选择γ(通常0.95-0.99)
适用场景: - 需要平滑衰减的任务
- 长时间训练任务
怎么用:每次训练都让学习率像雪球融化一样变小一点
例子:
开始:大雪球(学习率1.0)
每次融化10%:
第1次:0.9
第2次:0.81
第3次:0.729
☃️ 1.0 → 0.9 → 0.81 → 0.729 → ...
(每次都乘0.9)
4. 余弦衰减 (CosineAnnealingLR)
公式:
η
t
=
η
m
i
n
+
1
2
(
η
0
−
η
m
i
n
)
(
1
+
cos
(
t
T
π
)
)
\eta_t = \eta_{min} + \frac{1}{2}(\eta_0 - \eta_{min})(1 + \cos(\frac{t}{T}\pi))
ηt=ηmin+21(η0−ηmin)(1+cos(Ttπ))
参数:
T_max
:半周期长度eta_min
:最小学习率(通常0)
特点:- 模拟余弦曲线下降
- 允许周期性重启
适用场景: - 图像分类任务
- 需要跳出局部最优的场景
方法名称 | 核心机制 | 关键参数 | 优势领域 |
---|---|---|---|
余弦退火 | lr = lr_min + ½(lr_max-lr_min)(1+cos(T_cur/T)) | T_max(周期长度) | NLP微调、GAN训练 |
带重启余弦退火 | 周期性重置学习率最大值 | T_mult(周期倍增) | 逃离局部最优 |
OneCycle | 先升后降的三角策略 | pct_start(上升段) | 快速收敛的小数据集 |
CLR(三角循环) | 在上下界间周期性震荡 | step_size | 探索最优学习率范围 |
怎么用:像滑滑梯一样,开始快,后来慢,滑到底又爬回去
例子:
开始:滑得超快(学习率1.0)
中间:速度变慢
到底部:最慢(0.1)
突然!又回到高处重新滑
🎢 滑梯形状:高 → 低 → 高 → 低...
学习率变化:1.0 → 0.5 → 0.1 → 0.5 → 0.1...
三、动态调整方法
5. 按指标衰减 (ReduceLROnPlateau)
机制:
监控验证指标(如loss/accuracy),当指标停止改进时衰减
参数:
factor
:衰减系数(0.1-0.5)patience
:等待epoch数mode
:min(loss)/max(accuracy)
特点:- 依赖验证集表现
- 需要选择合适监控指标
适用场景: - 验证指标波动较大的任务
- 需要自动适应训练动态的任务
怎么用:老师看你成绩没进步,就让你更仔细检查
例子:
连续3次考试分数一样 → 学习率减半
连续5次没进步 → 再减半
6. 线性衰减 (LinearLR)
公式:
η
t
=
η
0
×
(
1
−
t
T
)
\eta_t = \eta_0 \times (1 - \frac{t}{T})
ηt=η0×(1−Tt)
特点:
- 线性递减到0
- 需要预设总步数T
适用场景: - 需要稳定收敛的优化任务
- 联合其他衰减方法使用
方法名称 | 调节依据 | 数学形式 | 适用场景 |
---|---|---|---|
ReduceLROnPlateau | 验证指标停滞时衰减 | lr *= γ (当指标不提升) | 验证集可靠的场景 |
GradNorm | 根据梯度幅值动态调整 | lr ∝ ‖∇L‖ | 多任务学习 |
AdaDelta | 自适应调整学习率(二阶动量) | 自动计算无需手动设置 | 非凸优化问题 |
四、高级调度策略
7. 带重启余弦衰减 (CosineWarmRestarts)
公式:
η
t
=
η
m
i
n
+
1
2
(
η
0
−
η
m
i
n
)
(
1
+
cos
(
t
c
u
r
T
i
π
)
)
\eta_t = \eta_{min} + \frac{1}{2}(\eta_0 - \eta_{min})(1 + \cos(\frac{t_{cur}}{T_i}\pi))
ηt=ηmin+21(η0−ηmin)(1+cos(Titcurπ))
参数:
T_0
:初始周期长度T_mult
:周期倍增因子
特点:- 周期性重启学习率
- 逐步延长周期长度
适用场景: - 小批量数据训练
- 需要跳出局部最优的任务
8. 循环学习率 (CyclicLR)
机制:
在预设范围内周期震荡调整学习率
参数:
base_lr
:下限学习率max_lr
:上限学习率step_size
:半周期步数
特点:- 促进参数空间探索
- 需要更大batch size
适用场景: - 损失曲面复杂任务
- 需要避开尖锐最小值的情况
方法名称 | 创新点 | 典型应用 | 效果提升 |
---|---|---|---|
SGDR | 带热重启的余弦退火 | 小样本学习 | 收敛速度↑30% |
Super-Convergence | 超高速学习率训练 | 图像分类 | 训练时间↓50% |
Linear Warmup | 初始阶段线性增加学习率 | 大Batch训练 | 稳定性↑40% |
Polynomial Decay | 多项式衰减 lr = (lr₀ - lr_end)(1-t/T)^p + lr_end | 语音识别 | 最终精度↑1-2% |
五、方法对比与选型指南
方法 | 训练速度 | 超参数数 | 适用任务类型 | 典型场景 |
---|---|---|---|---|
StepLR | 快 | 2 | 基础分类任务 | ResNet/CIFAR10 |
CosineAnnealing | 中 | 2 | 图像分类 | Transformer/ImageNet |
ReduceLROnPlateau | 慢 | 3 | 指标波动任务 | GAN训练 |
CyclicLR | 快 | 4 | 复杂优化任务 | 对抗训练 |
OneCycleLR | 最快 | 5 | 快速收敛需求 | 小样本学习 |
使用建议:
- 初期实验:从StepLR或Cosine开始
- 精细调优:尝试ReduceOnPlateau+Cosine组合
- 快速收敛:使用OneCycle策略
- 不稳定训练:配合Warmup使用线性增长
注:实际应用中常组合多种策略,如
Warmup+Cosine
或Linear+Plateau