Pytorch的几种常用优化器

news/2024/3/29 20:14:30/文章来源:https://blog.csdn.net/qq_36102055/article/details/130314876

文章目录

    • Adagrad
    • SGD
    • RMSprop
    • Adam
    • AdamW

Adagrad

Adagrad是一种可以自动调节每个参数更新的梯度的优化器,也可以做到在梯度平缓时走的步长大,在梯度小时走的步长小,从而防止loss出现剧烈震荡的情况。这里默认你已知道了他的原理了,如果不知道可以看李宏毅老师的课。以下优化器也同理。

先看Adagrad的Pytorch的计算公式:
在这里插入图片描述
t表示时间,也就是step的次数。可以看到,学习率 γ \gamma γ是会随着t的增加而越来越小的,也就是学习率会逐渐地衰减。
然后就是 g t g_t gt的计算,可以发现他加上了一项 λ θ t \lambda \theta_t λθt这就是L2正则项了,也就是Weight Decay。需要注意的是偏置 b b b是不用计算weight decay的
然后就是 s t a t e _ s u m t state\_sum_{t} state_sumt就是正常的计算,他计算就是以前+现在每一时刻梯度平方和。
最后计算时分母上加了一个 ϵ \epsilon ϵ就是eps了,这是为了防止分母为0出现无穷大。

在这里插入图片描述
接下来说主要的参数,上面其实也已经标明了

  1. params:网络的所有参数
  2. lr: 初始学习率
  3. lr_decay: 学习率随step衰减速度,越小衰减越慢,如果等于0,则不衰减。
  4. weight_decay: L2正则权重,越大的话,正则惩罚力度越大
  5. eps: 计算自适应梯度时分母上的平滑项,防止梯度趋于无穷
  6. maximize: 如果设置为True,就会变成梯度上升,而不是梯度下降(其实给loss加个负号也能实现)

SGD

SGD是最经典的优化器,也就是随机梯度下降
在这里插入图片描述
我们来看Pytorch的计算公式

  1. 首先计算梯度 g t g_t gt
  2. 然后加上L2正则 λ θ t \lambda \theta_t λθt
  3. 然后计算momentum,也就是 b t b_t bt,其中τ的作用是控制对动量的依赖
  4. 然后判断是否要计算Nesterov 动量
  5. 最后判断是否为梯度上升,还是梯度下降
    在这里插入图片描述
    1 . params:网络的所有参数
    2 . lr: 初始学习率
    3 . momentum: 控制对动量的依赖程度,如果越大,则动量参与的权重也就越大
    4 . dampening: 控制梯度的参与程度,如果越大,梯度参与的越少
    5 . nesterov: 计算nesterov 动量详情见文章
    6 .maximize: 如果设置为True,就会变成梯度上升,而不是梯度下降

RMSprop

在这里插入图片描述
RMSprop修改了求自适应梯度的算法,Adagrad在求梯度时平等的考虑了所有历史的梯度,但是这可能会影响后续的计算所以RMSprop又给加了一个权重,用于削弱太久远的梯度对最近梯度的影响。
在这里插入图片描述
其中上图的 α \alpha α就是用来削弱这个影响的,其余的计算都大同小异
alpha: 平滑常数,越大话月考虑以往的梯度对梯度自适应的影响
momentum: 设置动量的影响, 越大的话动量的影响程度越大
weight_decay : L2正则系数,同上

Adam

在这里插入图片描述
Adam在RMSprop上新增了梯度平滑和偏差修正。
这里的梯度平滑看起来很像momentum,但其实不是,因为momentum是不需要除以平方和开根号项的
请添加图片描述
所以这里其实是和把以往梯度和现在的梯度做了一个平均化,也有类似momentum的效果。
然后平方和向 v t v_t vt和RMSprop一样,然后就是两个偏差修正
在这里插入图片描述
这两个是为了防止一开始梯度为0的情况出现,因为 β 1 , β 2 \beta_1,\beta_2 β1,β2是比较接近于1的。
betas :即上述的两个beta
amsgrad :用于计算ams梯度,如果启用的话,每次都会使用历史平方和最大的那个作为分母

AdamW

在这里插入图片描述
AdamW与Adam基本类似,但它的效果一般更好,他做出了一个比较重要的改变,那就是吧weight decay给抽离出来,不让其参加自适应grad和平均梯度的计算,因为weight decay提供的信息与梯度无关,会造成干扰。
所以直接单独吧weight decay减到 θ \theta θ上即可
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102703.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离散数学-考纲版-01-命题逻辑

文章目录 1. 命题逻辑的等值演算与推理演算参考1.1 命题1.2 常用联结词1.3 命题公式命题公式的分类-重言式-矛盾式-可满足式等价关系式-逻辑等价 logically equivalent 1.4 命题的等值演算与推理基本等价式逻辑蕴涵重言式 logically implication重言蕴涵推到归结法 1.5 命题公式…

机器学习——SVM的易错题型

问:支持向量机仅可以用于处理二分类任务 答:错误。支持向量机可以用于处理多分类任务,通过使用一对多或一对一的方法,将多个类别分别与其他类别做二分类。也可以使用多类支持向量机算法,直接将多个类别一起纳入训练和…

3、Typescript中补充的六个类型

1、元组 元组可以看做是数组的拓展,它表示已知元素数量和类型的数组。确切地说,是已知数组中每一个位置上的元素的 类型,来看例子: let tuple: [string, number, boolean]; tuple ["a", 2, false]; tuple [2, "…

网络设备发现工具

什么是网络设备发现 网络设备发现是识别和映射网络基础架构(如路由器、交换机、集线器、防火墙、无线接入点、服务器、虚拟机等)中存在的设备和接口的过程。网络发现是网络管理的第一步,也是成功监控解决方案的关键。该过程不仅涉及发现网络…

LINUX SVN 新建项目

从第三方代码创建代码库: 1、通过客户端进入服务端 2、在对应的目录创建新的项目/目录 在对应的目录右击 :creat folder... 例:创建testSvn 3、在客户端checkout(co) testSvn 4、将第三方源码(srcTest)拷贝到客户端下的对应路径 防止L…

Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层

Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层 遇到问题初始化底图初始化高程(监听载入完成事件,开启关闭高程)初始化 3dtile在线示例 Cesium 最新版(1.104.0&#…

DIN11系列 大电流输出信号隔离模块线性驱动器0~100mA/0~500mA/0~2A/0-4A

主要特性 精度、线性度误差等级: 0.1、0.2、0.5 级4-20mA/0-5V/0-10V 等标准信号输入0~100mA/0~500mA/0~1A/0-5A 等电流信号输出0~1V(max 5A)/0~10V/0-24V(max 5A) 等电压信号输出信号输入/信号输出 3000VDC 隔离辅助电源:12V、15V 或 24V 直流单电源供…

NeRFStudio系列 Part 1:PipeLines概述

前言:Why NeRFStudio? NeRF社区是近两年来计算机领域最活跃的学术社区之一,各种具有milestone意义的算法层出不穷,各位作者的开源工作也做得非常扎实,非常多的工作都自带了code、data、project page。 但是后继者想要在这些伟大的…

jenkins自动化部署配置

文章目录 1. jenkins 插件安装2. 配置2.1 全局工具配置2.2 全局配置2.2.1 gitee 配置 3. 创建任务添加gitee ssh jenkins 开机自启动 1. jenkins 插件安装 ant Build Failure AnalyzerBuild Monitor ViewBuild Timeout dockerEmail Extension Plugin giteegithubgradle javama…

Python科研数据可视化

在过去的20 年中,随着社会产生数据的大量增加,对数据的理解、解释与决策的需求也随之增加。而固定不变是人类本身,所以我们的大脑必须学会理解这些日益增加的数据信息。所谓“一图胜千言”,对于数量、规模与复杂性不断增加的数据&…

广域通信网 - 流量控制(停等协议、滑动窗口协议)

文章目录 1 概述2 流量控制协议2.1 停等协议2.2 滑动窗口协议 1 概述 #mermaid-svg-c9cNIYsOvLpoO4AV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-c9cNIYsOvLpoO4AV .error-icon{fill:#552222;}#mermaid-svg-c9c…

跳槽必备,全面总结Android面试知识点

在最近的 Android 开发(社招)面试中总结的 Android 基础知识点,已经拿到心仪的offer,回馈同学们,感谢其他大佬的分享。 Android中大厂面试都很重视基础知识的考察,面试前不仅要熟悉这些知识点,…

设计模式之访问者模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、访问者模式是什么? 访问者模式是一种行为型的软件设计模式,表示一个作用于某对象结构中的各元素的操作…

智能家居代码架构---简单工厂模式

(11条消息) 智能家居 (10) ——人脸识别祥云平台编程使用(编译libcurl库支持SSL,安装SSL依赖库libssl、libcrypto)openssl 依赖库行稳方能走远的博客-CSDN博客 看上面这个博客的往期文章 代码设计经验的总结,稳定,拓展性更强。一系列编程思…

DAX:概述ALL函数

简单的说,当ALL用作表函数时,忽略应用到表上的任何过滤器,并返回数据表;当ALL用作CALCULATE和CALCULATETABLE函数中修饰器时,ALL函数从扩展表中移除已经应用的过滤上下文。 注意自动存在(auto-eixist)对ALL()函数的影响…

选址-路径问题(Location-Routing Problem, LRP)

今天为大家介绍的是选址-路径问题(Location-Routing Problem, LRP),首先上目录 目录 问题简介 基础模型、扩展问题及应用 算法 参考文献 1 问题简介 为了更好地了解这个问题,我们不妨当一波老板。 想象一下我们是经营一家口罩生产企业的老板&am…

案例——数据表的基本操作

目录 案例目的: 创建表: 创建offices: 创建employees表: 修改表: 将 employees 的 mobile 字段移动到 officeCode 字段后: 将 birth 字段名称改为 employee_birth: 修改 sex 字段,数据类…

Vue的路由实现:hash模式 和 history模式原理及区别

目录标题 1、hash模式2、history模式 Vue-Router有两种模式: ** hash 模式和 history**模式。默认的路由模式是hash模式。 1、hash模式 简介:hash模式是开发中默认的模式,它的URL带着一个#,例如:http://www.abc.com/#/vue,它的…

Facebook、Google、亚马逊,谁将成为跨境电商的营销宠儿?

跨境电商在全球范围内的发展日益迅猛,而营销渠道的选择也变得越来越多样化。在众多的广告平台中,Facebook、Google和亚马逊被公认为是跨境电商卖家们最主要的营销平台。那么,这三个平台中哪个会成为跨境电商的营销宠儿呢? 一、Fac…

【GIT】git push后长时间没反应

方向一 查看是否添加ssh 打开git bash cd ~/.ssh看是否成功,能成功说明之前生成过,看文件夹下是否有id_rsa.pub和id_rsa文件,有的话跳过生成步骤3 输入 ssh-keygen -t rsa -C ‘your_emailexample.com’(注:your_emailexample.c…