图解OneFlow的学习率调整策略

本文详细介绍了OneFlow中的学习率调整策略,包括ConstantLR、LinearLR、ExponentialLR、StepLR、MultiStepLR、PolynomialLR、CosineDecayLR、CosineAnnealingLR、CosineAnnealingWarmRestarts等,并通过可视化工具展示学习率变化过程。此外,还探讨了组合调度策略如LambdaLR、SequentialLR和WarmupLR。实践部分提供了一个CIFAR-100实例,以感受不同策略的差异。
摘要由CSDN通过智能技术生成

f97107322ae3664607639857c38c26df.png

撰文|李佳

1

背景

学习率调整策略(learning rate scheduler),其实单独拎出每一个来看都不难,但是由于方法较多,上来就看文档容易一头雾水, 以OneFlow v0.7.0为例,oneflow.optim.lr_scheduler模块中就包含了14种策略。

有没有一种更好的方法来学习呢?比如可视化出学习率的变化过程,此时,我脑海中突然浮现出Convolution Arithmetic这个经典项目,作者将各种CNN卷积操作以gif形式展示,一目了然。

ffb0d135c824f47dbb7776164e381bbc.png

所以,就有了这篇文章,将学习率调整策略可视化出来,下面是两个例子(ConstantLR和LinearLR):

55f03b15687052f28374572df4fdad8b.gif

6ed4fedb48495849dff8b04de7c9bf22.gif

我将可视化代码分别托管在Hugging Face Spaces和Streamlit Cloud,大家可以任选一个链接访问,然后自由调节参数,感受学习率的变化过程。

  • https://huggingface.co/spaces/basicv8vc/learning-rate-scheduler-online

  • https://share.streamlit.io/basicv8vc/scheduler-online

2

学习率调整策略

学习率可以说是训练神经网络过程中最重要的参数(之一),目前大家都已接受用动态学习率调整策略来代替固定学习率,各种学习率调整策略层出不穷,下面我们就以OneFlow v0.7.0为例,学习下常用的几种策略。

基类LRScheduler

LRScheduler(optimizer: Optimizer, last_step: int = -1, verbose: bool = False)是所有学习率调度器的基类,初始化参数中last_step和verbose一般不需要设置,前者主要和checkpoint相关,后者则是在每次step() 调用时打印学习率,可以用于 debug。LRScheduler中最重要的方法是step(),这个方法的作用就是修改用户设置的初始学习率,然后应用到下一次的Optimizer.step()。

有些资料会讲LRScheduler根据epoch或iteration/step来调整学习率,两种说法都没问题,实际上,LRScheduler并不知道当前训练到第几个epoch或第几个iteration/step,只记录了调用step()的次数(last_step),如果每个epoch调用一次,那就是根据epoch来调整学习率,如果每个mini-batch调用一次,那就是根据iteration来调整学习率。以训练Transformer模型为例,需要在每个iteration调用step()。

简单来说,LRScheduler根据调整策略本身、当前调用step()的次数(last_step)和用户设置的初始学习率来得到下一次梯度更新时的学习率。

ConstantLR

oneflow.optim.lr_scheduler.ConstantLR(
    optimizer: Optimizer,
    factor: float = 1.0 / 3,
    total_iters: int = 5,
    last_step: int = -1,
    verbose: bool = False,
)

ConstantLR和固定学习率差不多,唯一的区别是在前total_iters,学习率为初始学习率 * factor。

注意:由于factor取值[0, 1],所以这是一个学习率递增的策略。

7d68f3c67e2f4b54277532b0dfc2a5f5.gif

ConstantLR

LinearLR<

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值