当前位置: 首页 > news >正文

【chapter30】【PyTorch】[动量与学习率衰减】

前言:

    SGD的不足

 ①呈“之”字型,迂回前进,损失函数值在一些维度的改变得快(更新速度快),在一些维度改变得慢(速度慢)- 在高维空间更加普遍

②容易陷入局部极小值和鞍点

 ③对于凸优化而言,SGD不会收敛,只会在最优点附近跳来跳去 

       这里面主要讲解一下梯度更新的两个技巧,在训练的时候

应用比较多.

目录:

  1.        momentum
  2.        learn rate decay

一  momentum

 

     正常的梯度更新公式:

     w^{t+1}=w^t-\alpha \bigtriangledown f(w^t)

    

     通过动量更新梯度公式:

     z^{t+1}=\beta z^t+ \bigtriangledown f(w^t)

    w^{t+1}=w^t-\alpha z^{t+1}

   当前的梯度更新方向 由当前的梯度和历史梯度叠加组成的。

 

Momentum算法的优点:

当某个参数在最近一段时间内的梯度方向不一致时,其真实的参数更新幅度变小;

相反,当在最近一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速作用。

一般而言,在迭代初期,梯度方向都比较一致,动量法会起到加速作用,可以更快地到达最优点。在迭代后期,梯度方向会取决不一致,在收敛值附近震荡,动量法会起到减速作用,增加稳定性。从某种角度来说,当前梯度叠加上部分的上次梯度,一定程度上可以近似看作二阶梯度


PyTorch  里面的API 函数

torch.optim.SGD(net.parameters(), lr=lr, momentum=0.9,weight_decay=wd)

对于ADM 这类优化器,是内部自带的,不需要手动设置。


二    learn rate decay

       学习率衰减

   现有问题:

    1 学习率太小,长时间无法到达最优点

     2 学习率太大,参数激烈震荡,无法收敛

   默认的学习率是1e-3,1e-4

解决方案:

 learn rate decay

  每训练一些batch 后,学习率逐渐降低,如下图

 如下图,随着训练的batch 增加,学习率降低,降低了

参数震荡,能够快速的朝一个方向收敛

 

 

PyTorch方案1

   通过观测loss 是否减少,来动态调整学习率

  • 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)

  •  

     

PyTorch方案2:

如下图,每训练30次

\alpha=0.1*\alpha

 

参考:

课时59 动量与学习率衰减_哔哩哔哩_bilibili

https://www.cnblogs.com/shiliuxinya/p/12261966.html

pytorch 中ReduceLROnPlateau 的使用_pytorch的reducelronplateau_zx66zx的博客-CSDN博客

【pytorch 优化器】ReduceLROnPlateau详解_reducelronplateau参数_devil_son1234的博客-CSDN博客

http://www.lryc.cn/news/65521.html

相关文章:

  • 【键入网址到网页显示】
  • Nacos配置中心、配置热更新、及配置共享的记录
  • MATLAB | 绘图复刻(八) | 堆叠柱状图+哑铃图
  • Scala之集合(2)
  • 【图像分割】视觉大模型SEEM(Segment Everything Everywhere All at Once)原理解读
  • Linux: command: ibstat; infiniband
  • UML简介与类图详解
  • 【每日一题】1994.好子集的数目
  • 坚持伙伴优先,共创数据存储新生态
  • 树形结构的三级分类如何实现?
  • SSM整合完整流程
  • 虹科方案 | 助力高性能视频存储解决方案-2
  • java版深圳 工程管理系统软件 自主研发,工程行业适用 软件源码
  • 云原生Istio架构和组件介绍
  • 吹爆,全网第一个手把手教你从零开始搭建Spring Cloud Alibaba的笔记
  • 企业短信遭疯狂盗用,可能是没配置验证码
  • 【UE】直升机沿样条线移动
  • GaussDB_200_6.5.1部署安装
  • 软件工具 | Python调用运筹优化求解器(一):以CVRPVRPTW为例
  • 如何在JAVA中实现网络编程?
  • 【redis】redis的缓存过期淘汰策略
  • ASP.NET动态Web开发技术第8章
  • 【旋转编码器如何工作以及如何将其与Arduino一起使用】
  • Tre靶场通关过程(linpeas使用+启动项编辑器提权)
  • java多线程下
  • 使用无标注的数据训练Bert
  • 《Netty》从零开始学netty源码(五十二)之PoolThreadCache
  • 放弃40k月薪的程序员工作,选择公务员,我来分享一下看法
  • 【MybatisPlus】高级版可视化、可配置 自动生成代码
  • 【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现