记录下SGD优化时几种常见的学习率调整策略,方便后续使用


PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是

  • a. 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing。
  • b. 自适应调整:自适应调整学习率 ReduceLROnPlateau。
  • c. 自定义调整:自定义调整学习率 LambdaLR。

1 等间隔调整学习率 StepLR

等间隔调整学习率,调整倍数为 gamma 倍,调整间隔为 step_size。间隔单位是step。需要注意的是, step 通常是指 epoch,不要弄成 iteration 了。

torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

相关参数:
step_size(int)- 学习率下降间隔数,若为 30,则会在 30、 60、 90…个 step 时,将学习率调整为 lr*gamma。
gamma(float)- 学习率调整倍数,默认为 0.1 倍,即下降 10 倍。
last_epoch(int)- 上一个 epoch 数,这个变量用来指示学习率是否需要调整。当last_epoch 符合设定的间隔时,就会对学习率进行调整。当为-1 时,学习率设置为初始值。

2 按需调整学习率 MultiStepLR

按设定的间隔调整学习率。这个方法适合后期调试使用,观察 loss 曲线,为每个实验定制学习率调整时机。

torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

相关参数:
milestones(list): 一个 list,每一个元素代表何时调整学习率, list 元素必须是递增的。如 milestones=[30,80,120]
gamma(float):学习率调整倍数,默认为 0.1 倍,即下降 10 倍。

3 指数衰减调整学习率 ExponentialLR

按指数衰减调整学习率,调整公式: lr=lr∗gamma∗∗epochl r = l r ∗ g a m m a ∗ ∗ e p o c hlr=lr∗gamma∗∗epoch

torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)

相关参数:
gamma: 学习率调整倍数的底,指数为 epoch,即 gamma**epoch

4 余弦退火调整学习率 CosineAnnealingLR

以余弦函数为周期,并在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以 2 ∗ T m a x 2*Tmax 2∗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。

5 自适应调整学习率 ReduceLROnPlateau

当某指标不再变化(下降或升高),调整学习率,这是非常实用的学习率调整策略。
例如,当验证集的 loss 不再下降时,进行学习率调整;或者监测验证集的 accuracy,当accuracy 不再上升时,则调整学习率。

torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)

相关参数:
mode(str)- 模式选择,有 min 和 max 两种模式, min 表示当指标不再降低(如监测loss), max 表示当指标不再升高(如监测 accuracy)。
factor(float)- 学习率调整倍数(等同于其它方法的 gamma),即学习率更新为 lr = lr * factor
patience(int)- 忍受该指标多少个 step 不变化,当忍无可忍时,调整学习率。
verbose(bool)- 是否打印学习率信息, print(‘Epoch {:5d}: reducing learning rate of group {} to {:.4e}.’.format(epoch, i, new_lr))
threshold_mode(str)- 选择判断指标是否达最优的模式,有两种模式, rel 和 abs。
当 threshold_mode == rel,并且 mode == max 时, dynamic_threshold = best * ( 1 +threshold );
当 threshold_mode == rel,并且 mode == min 时, dynamic_threshold = best * ( 1 -threshold );
当 threshold_mode == abs,并且 mode== max 时, dynamic_threshold = best + threshold ;
当 threshold_mode == rel,并且 mode == max 时, dynamic_threshold = best - threshold;
threshold(float)- 配合 threshold_mode 使用。
cooldown(int)- “冷却时间“,当调整学习率之后,让学习率调整策略冷静一下,让模型再训练一段时间,再重启监测模式。
min_lr(float or list)- 学习率下限,可为 float,或者 list,当有多个参数组时,可用 list 进行设置。
eps(float)- 学习率衰减的最小值,当学习率变化小于 eps 时,则不调整学习率。

6 自定义调整学习率 LambdaLR

为不同参数组设定不同学习率调整策略。调整规则为lr=base_lr∗lmbda(self.last_epoch)lr=base\_lr∗lmbda(self.last\_epoch)lr=base_lr∗lmbda(self.last_epoch)
fine-tune 中十分有用,我们不仅可为不同的层设定不同的学习率,还可以为其设定不同的学习率调整策略

torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)

相关参数:
lr_lambda(function or list)- 一个计算学习率调整倍数的函数,输入通常为 step,当有多个参数组时,设为 list。


参考:PyTorch学习之六个学习率调整策略

深度学习之学习率退火的六种调整策略相关推荐

  1. 花书+吴恩达深度学习(二十)构建模型策略(超参数调试、监督预训练、无监督预训练)

    目录 0. 前言 1. 学习率衰减 2. 调参策略 3. 贪心监督预训练 4. 贪心逐层无监督预训练 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十 ...

  2. 花书+吴恩达深度学习(十九)构建模型策略(训练模型顺序、偏差方差、数据集划分、数据不匹配)

    目录 0. 前言 1. 调试模型顺序 2. 偏差方差的解决方法 3. 数据集的选取划分 4. 数据不匹配问题 5. 评估指标的选取 6. 贝叶斯最佳误差 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  3. 深度学习中学习率(lr:learn rate)和batchsize如何影响模型性能?

    引用自:学习率和batchsize如何影响模型的性能? 文章目录 1 为什么说学习率和batchsize 2 学习率如何影响模型性能? 2.1.初始学习率大小对模型性能的影响 2.2.学习率变换策略对 ...

  4. 深度学习中学习率和batchsize对模型准确率的影响

    本内容来自其他的人解析,参考链接在最后的注释. 1. 前言 目前深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降算法的原理如下: n是批量大小(batchsize),η是学习率(learn ...

  5. 【深度学习】 学习率lr(Learning Rate)对精度和损失值的影响

    学习率对精度和损失值的影响研究 1 问题 探究不同学习率对深度学习的精度和损失的影响. 2 探究 通过设置不同学习率(lr)发现,训练精度随着学习率的减小在模型训练次数较多的背景下渐趋平稳,逐渐稳定在 ...

  6. 深度学习的学习率调节实践

    作者|Luke Newman 编译|VK 来源|Towards Data Science 多层感知器 多层感知器(MLP)是由一个输入层.一个或多个隐藏层和一个称为输出层的最终层组成的人工神经网络(A ...

  7. 【深度学习】Cifar-10-探究不同的改进策略对分类准确率提高

    cifar10数据集上进行图片分类,基于tensorflow框架, 旨在探究不同的改进策略对分类准确率的影响,如何一步步得提高准确率 一.问题描述 当我们在处理图像识别或者图像分类或者其他机器学习任务 ...

  8. 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!

    推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...

  9. 深度学习之动态调整学习率LR

    深度学习之动态调整学习率LR 1 什么是学习率 2 为什么要动态调整学习率 3 动态调整学习率的几种常见方法 3.1 lr_scheduler.LambdaLR 3.2 lr_scheduler.St ...

最新文章

  1. python绘制函数怎么去掉原点_python – 更改绘图的原点
  2. sdutoj-3837-素数链表
  3. mysql 9.0创建数据库_PHP与MySQL学习笔记9:创建Web数据库
  4. 手持移动端特殊链接:打电话,发短信,发邮件
  5. 什么是51%算力攻击?——区块链系列学习笔记
  6. web.xml中的那些标签和意义
  7. IBASE change related BDOC generation
  8. 揭开 Python 内存分配时的小秘密!
  9. 【数据结构笔记12】平衡二叉树,AVL树,RR旋转/LL旋转/LR旋转/RL旋转,AVL树插入的代码实现
  10. 手机APP ~ MUI——创建页面方法
  11. 构建smaba服务器
  12. 汉诺塔问题(三柱及四柱)详解
  13. 安卓ps模拟器_用电脑玩安卓游戏!逍遥模拟器免安装版PC软件
  14. flv转mp4(ffmpeg)
  15. unity入门2.0
  16. GB28181设备接入实现web无插件多屏直播
  17. 汇编语言 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果
  18. [仿真]PMSM矢量控制——滑模速度环
  19. 小学生计算机课程的简报,《让故事动起来》——信息技术公开课简报
  20. 易语言- 定义一个系统范围的热键 RegisterHotKey UnregisterHotKey

热门文章

  1. Codeforces-Div312
  2. SharePoint 2013 Reporting Service 部署配置图文教程
  3. MC新手入门(十三)------ 添加游戏角色
  4. Redis 笔记之 Java 操作 Redis(Jedis)
  5. 【网络信息安全】网络安全基础
  6. 【嵌入式】Linux开发工具arm-linux-gcc安装及使用
  7. 【matplotlib笔记】在图表中使用中文信息作为标签
  8. 【网络安全面试题】——文件目录穿越实现特权文件读取
  9. hadoop基础----hadoop理论----Hadoop简介
  10. git提示(拷贝密钥问题)“Load key /home/devid/.ssh/id_rsa: bad permissions”