PyTorch torch.optim.lr_scheduler 学习率设置 调参 -- CosineAnnealingLR
lr_scheduler 学习率
学习率的参数调整是深度学习中一个非常重要的一项,Andrew NG(吴恩达)认为一般如果想调参数,第一个一般就是学习率。作者初步学习者,有错误直接提出,热烈欢迎,共同学习。(感谢Andrew ng的机器学习和深度学习的入门教程)
PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是
- 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing。
- 自适应调整:自适应调整学习率 ReduceLROnPlateau。
-
自定义调整:自定义调整学习率 LambdaLR。
引用: PyTorch学习之六个学习率调整策略
CosineAnnealingLR 余弦退火调整学习率
相关知识
该方法是出自论文2017 International Conference on Learning Representations (ICLR)上的,论文《SGDR: Stochastic Gradient Descent
Warm Restarts》,作者提供了源码:https://github.com/loshchil/SGDR
作者:Ilya Loshchilov & Frank Hutter;Research Scientist at AAD group with Frank Hutter. Freiburg, Germany.
论文内容
其实它的权重衰减的公式为:
参数 | 含义 |
---|---|
学习率最小值 | |
学习率的最大值 | |
是从last_start开始后已经记录了多少个epoch | |
是固定的数;一旦 代表cos为-1;因此 |
瞅瞅不同参数下的学习率的衰减变化:
诶哟吗!这个乱的,可以发现根据自己不同需求设置T_i(也就是torch函数中的T_max);T_mult
瞅瞅,最后一个三角形粉色的,拟合的多快。
TORCH 使用
以余弦函数为周期,并在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以 2∗Tmax2*Tmax2∗Tmax 为周期,在一个周期内先下降,后上升。
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
参数:
参数 | 含义 |
---|---|
T_max(int) | 一次学习率周期的迭代次数,即 T_max 个 epoch 之后重新设置学习率。 |
eta_min(float) | 最小学习率,即在一个周期中,学习率最小会下降到 eta_min,默认值为 0。 |
last_epoch | 最后一个EPOCH 默认-1,可不设置 |
OK,可以发现参数名字变了,其实就变成了:
η _max就是初始设置的LR,T_cur是从last epoch的经历的epoch数。这玩意,就是没走一步都会更新lr。
上一篇: Kylin构建Cube优化