warmup与余弦退火学习率

Posted 洪流之源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了warmup与余弦退火学习率相关的知识,希望对你有一定的参考价值。

warmup与余弦退火学习率的主要思路是学习率先从很小的数值线性增加到预设学习率,然后按照余弦函数值进行衰减。为什么要这么做的呢?主要有如下原因:

1. 在模型的训练之初weights是随机初始化的,可以理解模型对数据的“理解程度”为0,也就是说没有任何先验知识,在第一个epoche中,每个batch的数据对模型来说都是新的,模型会根据输入的数据进行快速调参,此时如果采用较大的学习率的话,有很大的可能使模型对于数据“过拟合”,后续需要更多的轮次才能“拉回来”;
2. 当模型训练一段时间之后(如:10epoch或10000steps),模型对数据具有一定的先验知识,此时使用较大的学习率模型就不容易学“偏”,可以使用较大的学习率加速模型收敛;
3. 当模型使用较大的学习率训练一段时间之后,模型的分布相对比较稳定,此时不宜从数据中再学到新特点,如果仍使用较大的学习率会破坏模型的稳定性,而使用小学习率更容易获取局部最优值。

学习率的变化趋势类似下图所示,学习率先从很小的数值线性增加到一个最大的学习率,然后按照余弦函数值进行衰减:


在pytorch中实现warmup与余弦退火学习率的伪代码如下:

from warmup_scheduler import GradualWarmupScheduler

MAX_EPOCH=100
INIT_LR = 0.01
WARMUP_LR_TIMES = 10
WARMU

以上是关于warmup与余弦退火学习率的主要内容,如果未能解决你的问题,请参考以下文章

余弦衰减学习率与linear warmup结合版代码

基于pytorch实现简单的分类模型训练

Pytorch Note34 学习率衰减

第十七篇 PyTorch学习率调整策略

PyTorch学习之六个学习率调整策略

java算法---余弦相似度计算字符串相似率