理解学习率调度(余弦退火 + warmup)的原理和作用
1.学习率设置对模型训练的影响
- 学习率设置过大,会导致训练loss振荡,模型训练不稳定
- 学习率设置过小,会导致模型训练缓慢
- 同时,需要注意的是,在模型初期和后期对于学习率的设置是不一样的
2.Warmup阶段
在模型刚刚训练的时候,模型的参数都是随机初始化的,如果使用较大的学习率设置,很容易导致模型跑飞。
Warmup的思想就是一开始从一个min_learning_rate进行线性增长,增长到目标值。
1 | if step < warmup_steps: |
3.余弦退火阶段
Warmup 之后,学习率按余弦函数逐渐衰减:
Warmup 之后,学习率按余弦函数逐渐衰减:
$$
\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})\left(1 + \cos\left(\frac{t - t_w}{T - t_w} \pi\right)\right)
$$
其中:
- $\eta_{\max}$:最大学习率
- $\eta_{\min}$:最小学习率
- $t_w$:warmup 步数
- $T$:总训练步数
使用余弦退火,在训练初期学习率缓慢下降,训练后期快速下降至最小学习率,帮助模型后期精细化收敛.
1 | import math |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 思想是一个锐化的过程!
评论