ccc-New Optimizers for Deep Learning-Chung Ming Chien(3)

news/2024/5/3 18:55:49/文章来源:https://blog.csdn.net/liubi32326/article/details/128959308

不会涉及到Optimizers 的数学证明!

文章目录

        • Some Notations
        • Different Optimizers
          • SGD
          • SGD with Momentum(SGDM)
          • Adagrad
          • RMSProp
          • Adam
        • Optimizers: Real Application
        • Adam vs SGDM
        • Towards Improving Adam
          • AMSGrad
          • AdaBound
        • Towards Improving SGDM
          • LR range test
          • Cyclical LR
          • SGDR
          • One-cycle LR
          • 基于warm-up改进的RAdam
        • RAdam vs SWATS
        • k step forward, 1 step back
          • Lookahead
        • Can we look into the future?
          • Nesterov accelerated gradient (NAG)
          • Adam in the future:Nadam&SGDM
        • Do you really know your optimizer?
          • A story of L2 regularization…
          • AdamW & SGDW with momentum
        • Something helps optimization…
        • learned &Advices

Some Notations

  • θt:\theta_t:θt时间步长t的模型参数
  • ▽L(θt)orgt:\triangledown L(\theta_t)or \ g_t:L(θt)or gt:θt\theta_tθt处的梯度(loss),用于计算θt+1\theta_{t+1}θt+1
  • mt+1:m_{t+1}:mt+1:从第0步累计到第t步的动量(压缩),用于计算θt+1\theta_{t+1}θt+1

神经网络架构:On-line
在这里插入图片描述
神经网络架构:Off-line
在这里插入图片描述

Different Optimizers

SGD

在这里插入图片描述
首先计算θ0\theta_{0}θ0的gradient,由于要最小的L,所以是往反方向走,依次重复这个步骤直到t时刻▽L(θt)\triangledown L(\theta_t)L(θt)计算达到设定阈值

SGD with Momentum(SGDM)

在这里插入图片描述
引入动量Momentum后,每次除了计算当前点的梯度外,还要将上一次移动的方向考虑进来,这样可以学习接触的范围更大,不一定会卡在局部最低点,形象图表示如下:
在这里插入图片描述

Adagrad

wt+1←wt−ηtσtgtw^{t+1}\leftarrow w^t-\frac{\eta^t}{\sigma^t}g^twt+1wtσtηtgt
其中,ηt\eta^tηt一般选择ηt+1\frac{\eta}{\sqrt{t+1}}t+1η,σt\sigma^tσt表示参数w之前偏导数(gig^igi)的均方根,所以可以化简:
wt+1←wt−ηt+11t+1∑i=0t(gi)2gt=wt−η∑i=0t(gi)2gtw^{t+1}\leftarrow w^t-\frac{\frac{\eta}{\sqrt {t+1}}}{\sqrt{\frac{1}{t+1}\sum_{i=0}^{t}(g^i)^2}}g^t\\ =w^t-\frac{\eta}{\sqrt{\sum_{i=0}^{t}(g^i)^2}}g^twt+1wtt+11i=0t(gi)2t+1ηgt=wti=0t(gi)2ηgt
这里两位老师对算法的说法有一点点区别,这里说明一下:

  • 李宏毅老师上节课用二次函数的最佳间隔分子应该是二次微分举例,让分子为∑i=0t(gi)2\sqrt{\sum_{i=0}^{t}(g^i)^2}i=0t(gi)2是在不改变计算量的情况下作为二次微分的估计提高效率
  • 这节课的老师表达的是,当之前的偏导计算小的时候增强增加效率,计算大的时候削弱防止错过
RMSProp

wt+1←wt−ηvtgtw^{t+1}\leftarrow w^t-\frac{\eta}{\sqrt v_t}g^twt+1wtvtηgt
其中,v1=g02v_1=g_0^2v1=g02,vt=αvt−1+(1−α)(gt−1)2v_t=\alpha v_{t-1}+(1-\alpha)(g_{t-1})^2vt=αvt1+(1α)(gt1)2。目的是解决Adagrad算法中如果开始求的微分很大导致计算特别缓慢的问题

Adam

在这里插入图片描述
mt1−β1t\frac {m_t}{1-\beta_1^t}1β1tmtvt1−β2t\frac {v_t}{1-\beta_2^t}1β2tvt的计算是为了de-biasing

Optimizers: Real Application

市面上几乎所有的模型都被ADAM和SGDM占有了,具体的有

  • ADAM:Tacotron、Transformer、BER、Big-Gan、MAML…
  • SGDM:Mask R-CNN、YOLO、ResNe…

实际上,自从2014年Adam问世之后,几乎没有更加优秀的Optimizers出现,市场也可以体现这个问题,接下来就重点关注这两个算法!

Adam vs SGDM

在这里插入图片描述
在这篇文章中通过实验证明SGDM并不逊色Adam,通常认为二者特点如下:

  • Adam:fast training, large generalization gap, unstable
  • SGDM:stable, little generalization gap, better convergence

当然,有人尝试先使用收敛快的Adam再切换成稳定的SGDM,称作SWATS算法,简单示意图如下
在这里插入图片描述
但是作者并没有清楚的解释实际优化多少,但也是不错的尝试

Towards Improving Adam

从它的公式中β2\beta_2β2=0.999与梯度相乘可以得出,vtv_tvt的记忆可以持续1000步。所以如果训练的某个阶段大多数梯度计算都较小,如果突然出现较大的梯度会导致从移动的不够快。基于这个问题有两个改进的算法:

AMSGrad

θt=θt−1−ηv^t+εmtv^t=max(v^t−1,vt)\theta_t=\theta_{t-1}-\frac{\eta}{\sqrt {\hat v_t}+\varepsilon}m_t \\ \hat v_t=max(\hat v_{t-1},v_t)θt=θt1v^t+εηmtv^t=max(v^t1,vt)
特点:

  • 减少非信息梯度的影响
  • 学习率单调递减
  • 只解决了large learning rates 的问题
AdaBound

θt=θt−1−Clip(ηv^t+ε)m^tClip(x)=Clip(x,0.1−0.1(1−β2)t+1,0.1+0.1(1−β2)t)\theta_t=\theta_{t-1}-Clip(\frac{\eta}{\sqrt {\hat v_t+\varepsilon}})\hat m_t \\ Clip(x)=Clip(x,0.1-\frac{0.1}{(1-\beta_2)t+1},0.1+\frac{0.1}{(1-\beta_2)t})θt=θt1Clip(v^t+εη)m^tClip(x)=Clip(x,0.1(1β2)t+10.1,0.1+(1β2)t0.1)
特点:

  • 工程向,不够优美
  • 抽象难懂

Towards Improving SGDM

对它的改进就是加速它收敛的速率,下面介绍几种改进方式:

LR range test

在这里插入图片描述
简单的说就是调整learning rate

Cyclical LR

在这里插入图片描述
周期性的改变learning rate

SGDR

在这里插入图片描述
同上,但是变法略不同

One-cycle LR

在这里插入图片描述
learning rate的变化只有一个cycle,分三个阶段

warm-up的影响
在这里插入图片描述
实验表明,开始的10步没有warm-up会受到较大的扰乱。形象图表示如下:
在这里插入图片描述

基于warm-up改进的RAdam

在这里插入图片描述
训练初期的时候,切换到SGD + Momentum进行预热

RAdam vs SWATS

在这里插入图片描述

k step forward, 1 step back

Lookahead

在这里插入图片描述
可以使用 Lookahead 加强已有最优化方法的性能,Lookahead 首先使用内部循环中的 SGD 等标准优化器,更新 k 次「Fast weights」,然后以最后一个 Fast weights 的方向更新「slow weights」
在这里插入图片描述

  • Lookahead 向高曲率方向振荡时,fast weights 更新在低曲率方向上快速前进,slow weights 则通过参数插值使振荡平滑
  • fast weights 和 slow weights 的结合改进了高曲率方向上的学习,降低了方差,使得 Lookahead 在实践中实现更快的收敛
  • Lookahead 提升收敛效果。当 fast weights 在极小值周围慢慢探索时,slow weight 更新促使 Lookahead 激进地探索更优的新区域,从而使测试准确率得到提升

Can we look into the future?

Nesterov accelerated gradient (NAG)

计算“超前梯度”更新冲量项

Adam in the future:Nadam&SGDM

在这里插入图片描述

Do you really know your optimizer?

A story of L2 regularization…

在这里插入图片描述
是否需要最后面的正则项?

AdamW & SGDW with momentum

在这里插入图片描述
实验证实去掉后效果更好

Something helps optimization…

在这里插入图片描述在这里插入图片描述在这里插入图片描述

learned &Advices

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

设计模式:建造者模式教你创建复杂对象

一、问题场景 当我们需要创建资源池配置对象的时候&#xff0c;资源池配置类里面有以下成员变量: 如果我们使用new关键字调用构造函数&#xff0c;构造函数参数列表就会太长。 如果我们使用set方法设置字段值&#xff0c;那minIdle<maxIdle<maxTotal的约束逻辑就没地方…

数据分析实战项目3:RFM用户分群

目录1、RFM模型介绍2、Excel实际RFM划分案例3、RFM案例3.1 数据加载和基本信息查看3.2 数据预处理和RFM的初始值计算3.3 RFM区间和划分和分值计算3.4 RFM计算结果保存3.4.1 保存到excel3.4.2 保存到数据库3.5 RFM计算结果可视化3.6 结果分析&#xff08;营销建议&#xff09;3.…

干货|PCB板上的丝印位号与极性符号的组装性设计

PCB板上的字符很多&#xff0c;那么字符在后期起着那些非常重要的作用呢&#xff1f;一般常见的字符:“R”代表着电阻&#xff0c;"C”代表着电容&#xff0c;“RV”表示的是可调电阻&#xff0c;“L”表示的是电感&#xff0c;“Q”表示的是三极管&#xff0c;“D”表示的…

Linux系列文章 —— 进程概念(图解PCB、进程的描述、状态、创建、组织、查看详解)

系列文章目录 文章目录系列文章目录前言一、冯诺依曼体系结构二、操作系统三、进程概念进程概念描述进程&#xff08;PCB&#xff09;组织进程查看进程创建进程&#xff08;fork&#xff09;进程队列进程状态运行状态 - R睡眠状态 - S停止状态 - T僵尸进程 - Z孤儿进程进程优先…

Tomcat构建高负载WEB服务器(一)

前言Tomcat部署Tomcat多实例 1.前言 1.1什么是JAVA虚拟机 所谓虚拟机&#xff0c;就是一台虚拟的计算机。他是一款软件&#xff0c;用来执行一系列虚拟计算机指令。大体上&#xff0c;虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的VisualBox、VMware就属于系统虚拟机。他们…

Vue - 驼峰和短横线分割命名注意事项

Vue - 驼峰和短横线分割命名注意事项一. 驼峰和短横线分割命名注意事项1.1 组件注册命名1.2 父子组件数据传递时命名1.3 父子组件函数传递一. 驼峰和短横线分割命名注意事项 我们一般定义组件的方式有两种&#xff1a; 短横线分隔命名&#xff1a;kebab-case。首字母大写命名…

PyQt5常用控件大全(详尽方法 + 实例操作,持续更新中…)

1. Label&#xff1a;标签控件 1.1 简介 标签控件主要用于显示用户不能编辑的文本&#xff0c;标识窗体上的对象&#xff08;例如&#xff1a;给文本框、列表框添加&#xff0c;描述信息等&#xff09;。它对应PyQt5中的QLabel类&#xff0c;Label控件在本质上是QLabel类的一个…

进阶技术:Linux Arm32是如何调用C Main的

前言&#xff1a; Linux x64通过qemu的rdinit方式调用的C Main&#xff0c;实际上是通过load_elf_binary(加载和解析elf)和start_thread(设置Ip和sp)&#xff0c;用缺页异常来调用。关于这点可以看这篇文章&#xff1a;点击查看。那么Arm32里面是如何调用C Main的呢&#xff1f…

BGP 属性分类及路由优先级选择

BGP 属性分类及路由优先级选择一、常见BGP属性类型1、公认必遵属性&#xff08;所有BGP路由器必须遵守的原则&#xff09;2、公认可遵属性&#xff08;所有路由器都能识别但不一定遵守&#xff09;3、可选传递属性&#xff08;不是所有BGP路由器都能识别&#xff0c;但是所有BG…

Dubbo3简单使用

Dubbo3简单使用 &#x1f449; 使用Spring Boot实现Dubbo3&#xff0c;请参见以下地址。 # Dubbo3官网地址 https://cn.dubbo.apache.org/zh/# 使用SpringBoot实现Dubbo3的地址 https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/# 该项目的git地址…

【Spark分布式内存计算框架——Spark Core】3. RDD 创建、RDD函数(上)

2.4 RDD 分区数目 在讲解 RDD 属性时&#xff0c;多次提到了分区&#xff08;partition&#xff09;的概念。分区是一个偏物理层的概念&#xff0c;也是 RDD 并行计算的核心。数据在 RDD 内部被切分为多个子集合&#xff0c;每个子集合可以被认为是一个分区&#xff0c;运算逻…

ChatGPT使用

ChatGPT使用1使用全局模式2无痕模式3日期4短信平台5注册6使用ChatGPT1使用全局模式 因为后面注册时候的号码是印度尼西亚&#xff0c;所以这里我也选择印度尼西亚。 2无痕模式 打开浏览器无痕模式 由于后面网易都是英文&#xff0c;可以在无痕模式里面使用插件 3日期…

mycat学习

安装部署下载1&#xff1a;mycat2-install-template-1.21.zip下载2&#xff1a;mycat2-1.21-release-jar-with-dependencies.jar解压mycat2-install-template-1.21.zipunzip mycat2-install-template-1.21.zip把mycat2-1.21-release-jar-with-dependencies.jar放在mycat/lib中修…

Python列表的元素比较

在用python处理多个列表元素时&#xff0c;需要处理的信息一般比较多且杂。这时运用Python列表元素比较的方法&#xff0c;就能快速处理列表信息&#xff0c;能更轻松访问每个元素。1 问题如何运用Python列表的元素比较解决问题。2 方法方法一 for循环&#xff0c;此情况是list…

车道线检测-Eigenlanes 论文学习笔记

论文&#xff1a;《Eigenlanes: Data-Driven Lane Descriptors for Structurally Diverse Lanes》 代码&#xff1a;https://github.com/dongkwonjin/Eigenlanes 核心&#xff1a;在 Eigenlane Space 中检测车道线 创新点 Eigenlane&#xff1a;数据驱动的车道描述符&#xff…

VHDL语言基础-组合逻辑电路-基本逻辑门电路

数字电路中的四种基本操作是与、或、非及触发器操作&#xff0c;前三种为组合电路&#xff0c;后一种为时序电路。与非 、或非和异或的操作仍然是与、或、非的基本操作。与、或、非、与非、或非和异或等基本逻辑门电路为常用的门电路。 二输入与非门是一种常用的简单逻辑电路&a…

RabbitMQ 部署指南

RabbitMQ 部署指南RabbitMQ部署指南1.单机部署1.1.下载镜像1.2.安装MQ2.安装DelayExchange插件2.1.下载插件2.2.上传插件2.3.安装插件3.集群部署2.1.集群分类2.2.获取cookie2.3.准备集群配置2.4.启动集群2.5.测试2.5.1.数据共享测试2.5.2.可用性测试4.镜像模式4.1.镜像模式的特…

ant-design V4升级V5记录(成功篇)

官方文档&#xff1a;https://ant.design/docs/react/migration-v5-cn 1、安装运行工具之前&#xff0c;提交本地修改内容&#xff1b; 2、工具运行完&#xff0c;根据提示修改文件问题&#xff1b; 3、移除config文件中module&#xff0c; [import,{libraryName:antd, libr…

OpenResty(5):Openresty 模板渲染

1 导入lua-resty-template 下载 http://luarocks.org/modules/bungle/lua-resty-template 将template.lua文件复制到openresty/lualib/resty/目录下 2 示例 2.1 修改nginx.conf 设置模板路径&#xff1a;set $template_root /usr/local/openresty/nginx/html/templates; 设…

windows 重启redis的方法

目录打开本地的文件夹选中文件的路径输入cmd在cmd命令窗口中输入以下的指令指令的内容以及对应的命令含义前言&#xff1a;最近在本地搭建redis环境&#xff0c;突然发现本地的redis启动失败了&#xff0c;使用reids的启动命令也不行&#xff0c;于是找了不少的方法&#xff0c…