上一篇,我们学习了adam之类的优化器公式和用法。这些优化器本身,怎么说,其实隐含有动态调整了学习率的。那么为何我们还要有单独学习率衰减策略呢?
Adam是一种自适应的学习率优化器,它会根据每个参数的梯度历史自动调整学习率。但它的调整是局部的、短期的,并不能解决训练后期整体降低学习率的问题。所以学习率的衰减是对整个训练过程的宏观调控,而Adam是对每个参数的微观调控。两者互补。
一句话讲,就是那个Adam公式里学习率η不管咋样,毕竟是死的固定值。咱们现在搞个公式,把它变成动态的值。
那么常见的动态学习率公式啥样呢,不管啥样,应该都是逐渐下降的吧。
1、step Decay(2012)
原理:每隔固定epoch讲学习率乘以一个因子(如0.1)
优点:简单粗暴
缺点:不够丝滑
适用场景:训练过程稳定
2、Exponential Decay(2000年开始。指数衰减,这个并非只用深度学习上)
原理:lr=lr0*e^-λt,每个epoch按比例衰减(λ衰减常数,决定衰减速度,t就是epoch或者batch)感受下,确实指数衰减,开始衰比较厉害。
优点:指数的也很丝滑嘛,衰减很快的
这里扩展点,因为余弦和指数都来自同一个母函数:复指数函数。
欧拉公式:e^ix=cos(x)+i*sin(x)。哎呀呀,我说呢,余弦和指数都像德芙一样丝滑,肯定有联系,果然。宇宙的语言是数学,数学真美,宇宙真迷人。
缺点:衰减速度固定,缺乏灵活性
适用场景:训练时间较长,需持续收敛
3、Polynomial Decay(2016,tensorflow里带的)
原理:lr=lr0*(1-t/T)^p,(p是控制衰减速度,线性,平方啊)训练后期趋近于0。举例说明,好比大船在海上高速行驶,快到港口就慢慢靠岸。
优点:可控性强,适合精细调节
缺点:需要设定总训练步数
适用场景:精细调参,收尾阶段;p=1时线性下降,p>1时后期下降更快,p<1时前期下降更快,后期变慢;后期微调
4、Cosine Annealing(余弦退火。2016年)
原理:lr=lr_min+1/2(lr_max-lr_min)(1+cos(T_cur/T_max*π))(lr_min最小学习率,lr_max最大学习率)
优点:带了cos,先快后慢。没得说,丝滑如德芙,末期趋近于0,适合warm restart
缺点:参数太多,理解稍微复杂
适用场景:训练周期长,需稳定收敛
【和Polynomial Decay有啥区别?】
一个余弦波,一个多项式曲线;余弦波的适合长时间训练,多项式曲线的快速收敛,轻量模型。看图,发现没,余弦波尾部也很丝滑,但是多项式的就接近线性了。数学真有趣,上学的时候咋没感觉到呢。
5、Cosine Annealing with Restarts
它是对余弦退火的扩展,就是T_max变小。这样拥有了完整周期。好处时,每次重启学习率时,模型会从一个较高的学习率重新开始训练。有助于跳出当前局部最优解,探索新的 参数空间。适合长时间训练,保持训练的活力和探索性。
余弦函数这种周期性,很爽。我喜欢它的曲线
5、ReduceLROnPlateau(2015)
原理:如果验证集los一段时间不下降,则降低学习率
优点:自适应,适合验证集波动
缺点:依赖验证集
适用场景:验证集loss波动大。这个相当于手动版调节,粗糙了点
6、OneCycleLR()
原理:学习率先升后降,形成一个周期。看公式,先线性升到lr_max,再线性降回来
- warm-up阶段 lrt=lr_min+(lr_max-lr_min)*t/T1
- annealing阶段lrt=lr_max-(lr_max-lr_min)*(t-T1)/T2
-T1:升高阶段步数
-T2:降低阶段步数
-lr_min:最小学习率
-lr_max:最大学习率
优点:快速收敛
缺点:loss波动大,失效,不适合复杂模型。你看看它公式,那么简单,一点不如余弦丝滑。
适用场景:快速训练,实验阶段
7、Warmup Decay(2017谷歌)
原理:前几部缓慢提高学习率,再开始衰减;这个好像很熟悉常见
假设总训练步数T,warm-up步数Tw。
- warm-up阶段 lrt=lr_max*t/Tw【发现没,这个和OneCycleLR区别,没最小值】
- decay阶段lrt=lr_max*(1-(t-Tw)/(T-Tw))
优点:适合复杂模型,生产环境。和AdamW组合
缺点:需设定warmup步数
适用场景:Transformer,BERT模型
【我有疑问,7和6差不多啊,为何7就能用复杂模型】
OneCycleLR的lr_min=0的情况,不就和Warmup Decay一样嘛。但是Warmup Decay只是一个概念,公式只是举例。主要强调先升后降这种理论的。
总结:
我也看出来了,有些方法是论文里带的,有的是源码里的,有的社区分享的。那么多种,有的只是学习实验中用的,有的简单模型,有的复杂模型用的。多了解才能真正熟练掌握,才能创新