Pytorch的几种常用优化器

news2024/12/23 6:18:47

文章目录

    • 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.coloradmin.cn/o/455364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot自动配置原理详解

1 前言 之前也写过一篇类似的文章,但是当时理解的并不是很深入,所以一直想重新写,但是一直没有时间,就拖到了现在。这篇文章可能会很长,因为在讲解自动配置的过程中还会衍生出其他一些重要的知识点,我也会…

2023文本定位模型选型调研

背景 时间点:2023年03月 场景:做一个通用型的多种证件解析服务 需求:调研一种又新又快的定位模型。要求:1)支持倾斜的文字,可以是4点定位或分割法后获取box,但不能是2点的定位;2&…

2023.4.23第五十次周报

目录 前言 文献阅读:基于ARIMA-WOA-LSTM模型的空气污染物预测 背景 ARIMA-WOA-LSTM模型 思路 主要贡献 积分移动平均自回归 (ARIMA) 鲸鱼优化算法 搜索超参数 CEEMDAN 结论 LSTM-Kriging 主要目标 理论猜想 问1&#xff1a…

如何申请百度地图开发者AK和基本使用,并解决Uncaught ReferenceError: BMapGL is not defined的错误

文章目录 1. 文章引言2. 申请AK3. 使用AK4. 解决BMapGL is not defined的错误5. 文末总结 1. 文章引言 今天在学习amis框架中的地理位置(LocationPicker)的组件,如下图所示: 关于amis的更多了解,可以参考博文:百度低代码amis框架的…

适合学生的平价蓝牙耳机有哪些?学生平价蓝牙耳机推荐

随着蓝牙耳机的使用越来越频繁,近几年也出现了很多优质的蓝牙耳机,不仅有着超高的性价比,而且使用体验也有了很大的突破。接下来,我来给大家推荐几款适合学生使用的平价蓝牙耳机,可以当个参考。 一、南卡小音舱Lite2蓝…

Java基础--->基础部分(1)

文章目录 Java语言特点JVM、JRE和JDK的关系什么是字节码?采用字节码的好处是什么?面向对象面向对象的三大特征:封装,继承,多态关键字抽象类和接口特点和区别和equals的区别String、StringBuffer、StringBuilder异常 Ja…

中医脉诊仪:结合传统与现代技术的诊断工具

一、引言 随着科技的不断发展,医学领域也取得了举世瞩目的进步。中医作为一种古老的医学体系,始终保持着其独特的魅力。脉诊作为中医诊断的重要方法之一,历经千年的发展和传承,如今在现代科技的助力下,诞生了中医脉诊…

PostgreSQL标准复制方案

集群拓扑 假设我们使用4单元的标准配置:主库,同步从库,延迟备库,远程备库,分别用字母M,S,O,R标识。 M:Master, Main, Primary, Leader, 主库,权威数据源。S: Slave, Secondary, Standby, Sync…

CTFSHOW web入门——web37

过滤了flag,即c中不能有flag字段。 include包含变量c,因此可以利用文件包含漏洞,让变量c变成php代码,然后通过include函数执行。可以使用data协议获取flag.php文件中的内容 data://协议 通常可以用来执行PHP代码 data://text/pl…

FFmpeg PCM 编码 AAC

1. 概要说明与流程图 1.1 概要: 1) FFmpeg 已经废弃了 AV_SAMPLE_FMT_S16 格式 PCM 编码 AAC,也就是说如果使用 FFmpeg 自带的 AAC 编码器,必须做音频的重采样(重采样为:AV_SAMPLE_FMT_FLTP),否则AAC编码是失败的。 2) 传输 PCM 数据时,采取截取缓存机制,解决接收数据包…

8 年开发告诉你,API 是什么?如何看懂 API 文档

API 指的是应用程序编程接口,它是应用程序之间通信的一种方式,允许应用程序之间相互交互和传输数据。 API 文档是编写 API 的开发人员所提供的用户使用说明,通常包括 API 的用途、参数、请求示例、返回格式等信息,以便开发人员使用…

使用ltp进行三元组提取的实战代码

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Bugzilla详解

Bugzilla详解 引言 Bugzilla是一种开源的缺陷管理系统,用于跟踪软件开发过程中的缺陷、错误和问题。它提供了一个集中化的平台,允许开发团队、测试团队和用户报告和跟踪软件中的缺陷,以便及时发现、修复和验证这些问题。 Bugzilla的作用和用…

前端学习--Ajax(2) form表单

一、form表单 组成&#xff1a;表单标签、表单域&#xff08;采集信息&#xff09;、表单按钮&#xff08;提交&#xff09; 1.1 <form>的属性 action -- 向何处发送表单数据 如果不写默认是当前页面url target -- 在何处打开action的url _blank 在新窗口打开 _self …

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

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

函函函函函函函函函函函数——one

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C知识系统分享》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;…

java: Compilation failed: internal java compiler error

问题描述&#xff1a; 今天学习一个新的框架 Jbolt-v3.0&#xff0c;然后将它通过 IDEA 导入&#xff0c;运行报错&#xff0c;如下显示&#xff1a; 接着我尝试了百度上的解决方案&#xff0c;依然没有解决&#xff0c;遂即记录一下。 原因分析&#xff1a; 出现这种报错的原…

聚观早报|飞猪:五一出游需求爆发;​特斯拉一季度盈利同比跌20%

今日要闻&#xff1a;飞猪&#xff1a;五一出游需求爆发&#xff1b;特斯拉一季度盈利同比暴跌20%&#xff1b;郑渊洁永远不再发表作品&#xff1b;KargoBot推出无人化自动驾驶卡车&#xff1b;中国6G通信技术研发取得重要突破 飞猪&#xff1a;五一出游需求爆发 4 月 19 日&a…

requests实现系统模拟登录

文章目录 requests模拟登录QWebEngine登录存储数据PySide2使用QWebEngineView报错extension_system_qt.cpp(122) failed to parse extension manifest requests模拟登录 使用requests发送post请求&#xff1b;获取响应头中的Set-Cookie的值&#xff1b;将该Cookie值存入浏览器…

图像ROI与mask掩码与图像几何变换

图像ROI与mask掩码与图像几何变换 感兴趣区域ROI: ⚫ ROI—(region of interest)—感兴趣区域 ⚫ 形状可有矩形&#xff0c;圆形&#xff0c;椭圆形等 ⚫ 能够确定分析重点&#xff0c;减少处理时间&#xff0c;提高精度 使用Rect起点终点范围 示例代码&#xff1a; import…