常用lr_scheduler总结

0 前言

学习率(learning rate)是网络训练中最重要的超参数之一, 学习率可以控制模型的训练速度, 甚至影响模型的收敛性。 因此一个好的学习率设置是非常重要的。 深度学习炼丹师们日常工作的一部分就包含调试一个好的超参数。
实践中, lr一般很少是固定的,因为在模型训练的不同阶段,对学习率的敏感性不同, 设置一个固定的并不太科学。 比如, 一般开始阶段lr可以稍大一些, 让模型快速学习, 到后面阶段, lr要小一些, 避免振荡。 也有些场景, 一开始需要做一些warmup, 等等。 总之, lr的改变可以有很多策略, 不同场景下需要的最优策略也不同。
这些设置一般也很难有理论的保障,一般都是根据实际经验进行设置。

1 恒定lr

这是最简单的一种形式了, 也就是学习率从始至终始终保持不变。

2 分段lr

顾名思义,就是学习率是一个分段函数, 在不同阶段采用不同的学习率。
常用的有2种, StepLR 和MutiStepLR。 StepLR只能均匀的变化, 也就是固定的step(或epoch)后学习率固定变化。 MutiStepLR则灵活一些,可以在指定的步长的位置改变学习率。 但是控制参数也更多一些。
实际上, StepLR可以看做MutiStepLR的一种特殊形式。

比如, 下图中StepLR策略为每30个epoch, 学习率降低10倍。
在这里插入图片描述
下图中的MutiStepLR策略为在30和80个 epoch的位置, 学习率降低10倍。
在这里插入图片描述

3 指数lr

学习率以指数规律变化(一般是降低)。
在这里插入图片描述

4 CosineAnnealingLR

学习率以正弦规律变化。一般情况下, 只取半个或一个周期。 半个周期一般都是从最大到最小, 一个周期一般都是从最小到最大, 再到最小。
在这里插入图片描述

5 CyclicLR

顾名思义, 就是学习率以某种规律循环变化, 变化的规律可以有很多(如下图中就是一种线性变化)。 其实上面的CosineAnnealingLR在取多个周期的时候也是一种CyclicLR。
在这里插入图片描述

6 OneCycleLR

其实有了上面的CycleLR, 理解OneCycleLR就非常简单了。OneCycleLR其实就是只取CycleLR的一个周期。
在这里插入图片描述

7 WarmupLR

所谓warmup, 就是指在一开始的时候学习率较小, 然后逐步变大。
这个策略经常和其他LR的策略结合使用。 如warmupLR + StepLR, 就是lr先从lr_min增加到lr_max, 然后再以StepLR的策略逐步变小。 再比如, warmupLR +CosineAnnealingLR, 就是学习率r先从lr_min增加到lr_max, 然后再以余弦规律下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值