优化器和学习率调整策略

pytorch-优化器和学习率调整
这个链接关于优化器和学习率的一些基础讲得很细,还有相关实现代码

优化器

前向传播的过程,会得到模型输出与真实标签的差,我们称之为损失, 有了损失,我们会进入反向传播过程得到参数的梯度,接下来就是优化器干活,优化器(梯度下降)要根据我们的这个梯度去更新参数,使得损失不断的减低。
各种优化器的优缺点
optim.SGD: 随机梯度下降法
optim.Adagrad: 自适应学习率梯度下降法
optim.RMSprop: Adagrad的改进
optim.Adadelta: Adagrad的改进
optim.Adam: RMSprop结合Momentum
optim.Adamax: Adam增加学习率上限
optim.SparseAdam: 稀疏版的Adam
optim.ASGD: 随机平均梯度下降
optim.Rprop: 弹性反向传播
optim.LBFGS: BFGS的改进

SGD:选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate.我们常用的mini-batch SGD训练算法,然而虽然这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊。另一个缺点就是这种算法需要我们挑选一个合适的学习率,当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点

SGD+Momentum:基于梯度的移动指数加权平均解决mini-batch SGD优化算法更新幅度摆动大的问题,同时可以使得网络的收敛速度更快(注意:使用Momentum时偏差修正可用可不用–吴恩达深度学习)

Momentum原理:积累之前的动量来替代真正的梯度,计算梯度的指数加权平均数,并利用该梯度更新权重,相关方向加速SGD,抑制振荡,从而加快收敛。

RMSprop:积累之前的动量来替代真正的梯度对梯度计算微分平方加权平均数,进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度.(对学习率加了一定的约束,但事实上仍依赖于人工设置的一个全局学习率

Adam:将Momentum算法和RMSProp算法结合起来使用的一种算法,表现比前两种更好,所以它也是解决摆动幅度过大,加快函数的收敛速度;同时利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,实现学习率自适应。(注意:在Adam中Momentum的偏差修正是必须使用的!)
详情参考-深度学习优化算法解析

学习率调整策略

学习率是深度学习优化器中的一个重要的超参,直接控制了参数更新步伐的大小,整个训练当中,学习率也不是一成不变的,一般而言网络训练刚开始学习率要大(但似乎在网络最开始训练要有一个预热,学习率较小?),然后减小使损失收敛到最小值。

为什么要调整学习率:学习率是可以控制更新的步伐的。 我们在训练模型的时候,一般开始的时候学习率会比较大,这样可以以一个比较快的速度到达最优点的附近,然后再把学习率降下来, 缓慢的去收敛到最优值。

为什么需要warm up(学习率预热):由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳
warm up

深度学习实战(八)——如何设置学习率
学习率调整方案
常用的学习率调整策略(pytorch):
StepLR-等间隔调整学习率
MultiStepLR- 按给定间隔调整学习率
ExponentialLR-按指数衰减调整学习率
CosineAnnealingLR-余弦周期调整学习率
ReduceLRonPlateau-监控指标, 当指标不再变化则调整, 这个非常实用。可以监控loss或者准确率,当不在变化的时候,会自动去调整。
LambdaLR-自定义调整
自定义我们的学习率更新策略,告诉程序我们想怎么改变学习率。并且还可以对不同的参数组设置不同的学习率调整方法,所以在**模型的finetune(迁移)**中非常实用

总结
有序调整: Step、MultiStep、 Exponential和CosineAnnealing, 这些得事先知道学习率大体需要在多少个epoch之后调整的时候用
自适应调整: ReduceLROnPleateau, 这个非常实用,可以监控某个参数,根据参数的变化情况自适应调整
自定义调整:Lambda, 这个在模型的迁移中或者多个参数组不同学习策略的时候实用

YOLOv5-优化器和学习率调整策略

YOLOv5使用的优化器?
yolov5使用自定义的优化器分组方式,分别对**权重(使用权重衰减)、偏置、BN层(使用SGD)**使用不同的优化方式,详情见链接。
yolov5的学习率和优化器代码部分

YOLOv5为什么使用余弦退火学习率?
使用梯度下降算法来优化目标函数的时候,当越来越接近Loss值的全局最小值时,学习率应该变得更小来使得模型尽可能接近这一点,而余弦退火(Cosine annealing)可以通过余弦函数来降低学习率。余弦函数中随着x的增加余弦值首先缓慢下降,然后加速下降,再次缓慢下降。这种下降模式能和学习率配合,产生很好的效果(因为我们希望在网络开始阶段,以一个较小的学习率学习,慢慢变大,直到网络参数的稳定,然后加速训练,到达最优值的附近,这时又需要减小学习率的更新,慢慢接近最优解?)。

周期余弦退火:我们的目标优化函数可能是多峰的,除了全局最优解之外还有多个局部最优解。在训练时梯度下降算法可能陷入局部最小值,此时可以通过突然提高学习率(周期循环),来“跳出”局部最小值并找到通向全局最小值的路径。

YOLOv5-优化器和学习率调整策略相关推荐

  1. 系统学习Pytorch笔记七:优化器和学习率调整策略

    Pytorch官方英文文档:https://pytorch.org/docs/stable/torch.html? Pytorch中文文档:https://pytorch-cn.readthedocs ...

  2. 【详解】模型优化技巧之优化器和学习率调整

    目录 PyTorch十大优化器 1 torch.optim.SGD 2 torch.optim.ASGD 3 torch.optim.Rprop 4 torch.optim.Adagrad 5 tor ...

  3. Pytorch模型训练实用教程学习笔记:四、优化器与学习率调整

    前言 最近在重温Pytorch基础,然而Pytorch官方文档的各种API是根据字母排列的,并不适合学习阅读. 于是在gayhub上找到了这样一份教程<Pytorch模型训练实用教程>,写 ...

  4. pytorch优化器学习率调整策略以及正确用法

    优化器 optimzier优化器的作用:优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用. 从优化器的作用出发,要使得优化器能够起作用,需要主要两个东西: ...

  5. pytorch优化器与学习率设置详解

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 小新 来源 | https://a.3durl.cn/Yr ...

  6. 【深度学习】图解 9 种PyTorch中常用的学习率调整策略

    learning rate scheduling 学习率调整策略 01 LAMBDA LR 将每个参数组的学习率设置为初始lr乘以给定函数.当last_epoch=-1时,将初始lr设置为初始值. t ...

  7. PyTorch框架学习十四——学习率调整策略

    PyTorch框架学习十四--学习率调整策略 一._LRScheduler类 二.六种常见的学习率调整策略 1.StepLR 2.MultiStepLR 3.ExponentialLR 4.Cosin ...

  8. Pytorch —— 学习率调整策略

    1.为什么要调整学习率 学习率控制梯度更新的快慢,在训练中,开始时的学习率比较大,梯度更新步伐比较大,后期时学习率比较小,梯度更新步伐比较小. 梯度下降:wi+1=wi−g(wi)w_{i+1}=w_ ...

  9. 图像语义分割实践(五)优化器与学习率

    概述 在数据制作环节中,提到minibatch思想用于数据批次量获取,是一种优化器思想,而该文则是对各种优化器进行介绍. 优化器:最小化损失函数算法,把深度学习当炼丹的话,优化器就是炉子,决定火候大小 ...

最新文章

  1. python文本分类特征选择_文本挖掘之特征选择(python 实现)
  2. 2021吉林市高考成绩查询系统,吉林省教育考试院高考成绩查询系统入口2021
  3. python locust 能压测数据库_Locust 教程
  4. add(1)(2)(3) add(1,2)(3)
  5. 又是别人家的公司!华为人才房价格曝光:1万/㎡ 带装修
  6. 小程序监听android返回键,微信小程序左上角返回按钮触发事件
  7. 智能一代云平台(九):EclipseLink返回Object转为实体的分析
  8. npm报错core-js@2.6.12: core-js@<3 is no longer maintained and not recommended for usage due to the num
  9. XILINX-DDR3IP核的使用
  10. 我与51CTO的战争之值得尊敬的对手
  11. 多Tab点击切换效果实现
  12. 求最大公约数 最大公因数 语言实现输出一个整数的最大公约数(因数),四种算法实现
  13. w ndows摄像头驱动怎么安,电脑中如何安装摄像头驱动
  14. (半)自动批量添加QQ好友
  15. Centos 7 环境实现内网服务访问
  16. 获取windows用户密码——Jhon
  17. Install failed. Installation failed a href='rerun'Rerun/a
  18. 如何关闭笔记本自带键盘
  19. elclipse tptp的安装使用
  20. 渣基础:比照Hawstein学Cracking the coding interview(1)

热门文章

  1. 互信息(Mutual Information)的介绍
  2. 华东,聚集中国最多的女药代
  3. java 动态线程池_线程池的参数动态调整
  4. android 开机设置向导
  5. 深入了解 JavaScript 内存泄露
  6. 进口吲哚菁绿活化脂,ICG-NHS ester,Indocyanine Green - Activated Lipid
  7. 《提问的智慧》 - 懒人的脑图
  8. 华为q1设置虚拟服务器,华为路由Q1的上网设置教程
  9. Pytorch实战2:Carvana Image Masking使用UNet
  10. html中scr作用,可控硅的作用是什么