Optimizer神经网络中各种优化器介绍

1. SGD

1.1 batch-GD

每次更新使用全部的样本,注意会对所有的样本取均值,这样每次更新的速度慢。计算量大。

1.2 SGD

每次随机取一个样本。这样更新速度更快。SGD算法在于每次只去拟合一个训练样本,这使得在梯度下降过程中不需去用所有训练样本来更新Theta。BGD每次迭代都会朝着最优解逼近,而SGD由于噪音比BGD多,多以SGD并不是每次迭代都朝着最优解逼近,但大体方向是朝着最优解,SGD大约要遍历1-10次数据次来获取最优解。

但是 SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

1.3. MBGD(Mini-batch Gradient Descent)

MBGD有时候甚至比SGD更高效。MBGD不像BGD每次用m(所有训练样本数)个examples去训练,也不像SGD每次用一个example。MBGD使用中间值b个examples
经典的b取值大约在2-100。例如 b=10,m=1000。

2. Momentum

SGD存在的一个主要问题是:在沟壑处无法正常收敛的问题。如果初始化不好不幸陷入沟壑区,则会出现下面左图的震荡问题:即在一个方向上梯度很大,且正负交替出现。而momentum会加上前面的一次迭代更新时的梯度。让与上一次同方向的值更大,反方向的更小,如下面右图所示。momentum公式为:
在这里插入图片描述

v t = γ v t − 1 + η Δ θ J ( θ ) θ = θ − v t \begin{align} v_t&=\gamma v_{t-1}+\eta\Delta_\theta J(\theta)\\ \theta &= \theta-v_t \end{align} vtθ=γvt1+ηΔθJ(θ)=θvt

  • 下降初期时,使用上一次参数更新,下降方向一致,乘上较大的 μ \mu μ能够进行很好的加速。
  • 下降中后期时,在局部最小值来回震荡的时候, g r a d i e n t → 0 gradient\to 0 gradient0 μ \mu μ使得更新幅度增大,跳出陷阱。
  • 在梯度改变方向的时候, μ \mu μ能够减少更新 总而言之,momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛。
    正确的方向上让他更快,错误的方向上让他更慢。如果上次的momentum(v)与这次的负梯度方向是相同的,那这次下降的幅度就会加大,从而加速收敛。
    momentum的更新方式为:
    在这里插入图片描述

momentum设置太小动量效果不明显,设置太大容器使得本来收敛很好的地方震动太大,特别是训练的后期,一般取0.9。

3. NAG(Nesterov accelerated gradient)

动量法每下降一步都是由前面下降方向的一个累积和当前点的梯度方向组合而成。于是一位大神(Nesterov)就开始思考,既然每一步都要将两个梯度方向(历史梯度、当前梯度)做一个合并再下降,那为什么不先按照历史梯度往前走那么一小步,按照前面一小步位置的“超前梯度”来做梯度合并呢?如此一来,小球就可以先不管三七二十一先往前走一步,在靠前一点的位置看到梯度,然后按照那个位置再来修正这一步的梯度方向。如此一来,有了超前的眼光,小球就会更加”聪明“, 这种方法被命名为Nesterov accelerated gradient 简称 NAG。

NAG的更新方式为:
在这里插入图片描述

与momentum不同的是,NAG是先往前走一步,探探路,用超前的梯度来进行修正。
更新公式为:
在这里插入图片描述

实现证明,比momentum更快。

4. AdaGrad

SGD+Momentum的问题是:

  • 设置初始的学习率比较难
  • 所有的参数都使用相同的学习率
    Adam采用累加前面梯度的平方和的方式。能够对每个参数自适应不同的学习速率。因此对于稀疏特征,学习率会大一点。对非稀疏特征,学习率会小一点。因此次方法适合处理稀疏特征。公式为:
    θ t + 1 , i = θ t , i − η G t , i + ϵ g t , i \theta_{t+1, i}=\theta_{t, i}-\frac {\eta}{\sqrt{G_{t,i}+\epsilon}}g_{t,i} θt+1,i=θt,iGt,i+ϵ ηgt,i

其中 g t , i g_{t,i} gt,i同样是当前的梯度,连加和开根号都是元素级别的运算。 η \eta η是初始学习率,由于之后会自动调整学习率,所以初始值就不像之前的算法那样重要了。 ϵ \epsilon ϵ是一个比较小的数,用来保证分母非0。

其含义是,对于每个参数,随着其更新的总距离增多,其学习速率也随之变慢。

g t g_t gt从1到t进行一个递推形成一个约束项, ϵ \epsilon ϵ保证分母非0。
G t , i = ∑ r = 1 t ( g r , i 2 ) G_{t, i}=\sum_{r=1}^t(g_{r,i}^2) Gt,i=r=1t(gr,i2)
G t , i G_{t, i} Gt,i为前面的参数的梯度平方和。特点为:

  • 前期梯度较小的时候,叠加的梯度平方和也比较小,能够加快梯度。
  • 后期梯度叠加项比较大,梯度也会变小,能够以小步幅更新。
  • 对于不同的变量可以用不同的学习率。
  • 适合处理稀疏的数据。

缺点:

  • 依赖一个全局学习率
  • 中后期,梯度的平方和累加会越来越大,会使得 g r a d i e n t → 0 gradient\to 0 gradient0,使得后期训练很慢,甚至接近0。

5. AdaDelta

Adadelta是对于Adagrad的扩展。最初方案依然是对学习率进行自适应约束,但是进行了计算上的简化。 Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项(Adagrad需要存储),并且也不直接存储这些项,仅仅是近似计算对应的平均值。即:
E [ g 2 ] t = γ E [ g 2 ] t − 1 + ( 1 − γ ) g t 2 Δ θ t = − η E [ g 2 ] t + ϵ g t \begin{align} E[g^2]_t&=\gamma E[g^2]_{t-1}+(1-\gamma)g_t^2\\ \Delta\theta_t&=-\frac{\eta}{\sqrt{E[g^2]_t+\epsilon}}g_t \end{align} E[g2]tΔθt=γE[g2]t1+(1γ)gt2=E[g2]t+ϵ ηgt

因为AdaDelta需要计算 R [ g t − w : t ] R[g_t-w:t] R[gtw:t],需要存储前面 w w w个状态,比较麻烦。因此AdaDelta采用了类似momtemum的平均化方法,如果 γ = 0.5 \gamma=0.5 γ=0.5,则相当于前面的均方根RMS。其中Inception-V3的初始化建议为1。

此处AdaDelta还是依赖于全局学习率,因此作者做了一定的处理来近似:
经过二阶海森矩阵近似之后,得到 Δ x ∼ x \Delta x\sim x Δxx
Δ x t = − ∑ r = 1 t − 1 Δ x r 2 E [ g 2 ] t + ϵ \Delta_{x_t}=-\frac{\sqrt{\sum_{r=1}^{t-1}\Delta x_r^2}}{\sqrt{E[g^2]_t+\epsilon}} Δxt=E[g2]t+ϵ r=1t1Δxr2
这样的话,AdaDelta已经不依赖于全局学习率了。

  • 训练初中期,加速效果不错,很快
  • 训练后期,反复在局部最小值附近抖动

6. RMSProp

RMSProp是AdaDelta的一种扩展。当 γ = 0.5 \gamma=0.5 γ=0.5的时候就变成了RMSProp。但是RMSProp仍然依赖于全局学习率。效果介于AdaGrad和AdaDelta之间。

7. Adam

Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。公式如下:
g t = Δ θ J ( θ t − 1 ) m t = β 1 m t − 1 + ( 1 − β 1 ) g t v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 m ^ t = m t 1 − β 1 t v ^ t = v t 1 − β 2 t θ = θ − α m ^ t v ^ t + ϵ \begin{align} g_t&=\Delta_\theta J(\theta_{t-1})\\ m_t&=\beta_1m_{t-1}+(1-\beta_1)g_t\\ v_t&=\beta_2 v_{t-1}+(1-\beta_2)g_t^2\\ \hat m_t&=\frac{m_t}{1-\beta_1^t}\\ \hat v_t&=\frac{v_t}{1-\beta_2^t}\\ \theta&=\theta-\alpha \frac{\hat m_t}{\sqrt{\hat v^t}+\epsilon} \end{align} gtmtvtm^tv^tθ=ΔθJ(θt1)=β1mt1+(1β1)gt=β2vt1+(1β2)gt2=1β1tmt=1β2tvt=θαv^t +ϵm^t
然后对 m t m_t mt v t v_t vt进行无偏估计。因为 m 0 m_0 m0 v 0 v_0 v0初始化都是0,我们希望能够快点从0中跳出来。因为如果 β \beta β比较大的话,原来的 m t m_t mt可能会跳不出来。因此进行无偏估计后能够放大。 β 1 \beta_1 β1 β 2 \beta_2 β2两个超参数一般设置为0.9和0.999。:
m ^ t = m t 1 − β 1 t \hat m_t=\frac{m_t}{1-\beta_1^t} m^t=1β1tmt
接下来更新参数,初始的学习率 α \alpha α(默认0.001)乘以梯度均值与梯度方差的平方根之比。由表达式可以看出,对更新的步长计算,能够从梯度均值及梯度平方两个角度进行自适应地调节,而不是直接由当前梯度决定。

直接对梯度的矩进行估计对内存没有额外的要求,而且可以根据梯度进行动态调整。而且后面的一项比值可以对学习率形成一个动态约束,因为它是有范围的。

目前来讲,效果最好的是Adam。但是经典的论文搞上去的方式都是先用Adam,然后再用SGD+momentum死磕上去。

Adam看作是Momentum+RMSProp的结合体。

形成一个动态约束,因为它是有范围的。

目前来讲,效果最好的是Adam。但是经典的论文搞上去的方式都是先用Adam,然后再用SGD+momentum死磕上去。

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

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

相关文章

阿里云通用算力型u1云服务器配置性能评测及价格参考

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

C++经典面试题目(十六)

1、什么是类的构造函数?它有什么作用? 类的构造函数是一种特殊的成员函数,用于初始化类的对象。它在对象被创建时自动调用,可以用于执行对象的初始化工作,如分配内存、初始化成员变量等。构造函数的作用在于确保对象在…

002 HTML元素

文章目录 HTML的元素元素的属性 注释快捷键根元素head元素meta元素 body元素h元素p元素img元素src属性alt属性 路径分隔符a元素href属性target属性锚点链接 iframe元素div与span不常用元素HTML全局属性字符实体URL和URISEO字符编码 官方文档:https://www.w3.org/TR/ HTML的元素…

【数据结构】括号匹配问题你学会了吗?来刷刷题检验一下吧!!!

栈在括号问题中的应用 导言一、有效的括号——栈、字符串——简单1.1 题目要求与分析1.2 代码实现 二、 最长有效括号——栈、字符串、动态规划——困难2.1 题目要求与分析2.2 问题解析2.2.1 如何计算有效括号的个数2.2.2 如何记录了连续括号的长度2.2.3 如何寻找最长的子串 2.…

STM32 GPIO输入检测——按键

前言 在嵌入式系统开发中,对GPIO输入进行检测是一项常见且关键的任务。STM32微控制器作为一款功能强大的处理器,具有丰富的GPIO功能,可以轻松实现对外部信号的检测和处理。在本文中,我们将深入探讨如何在STM32微控制器上进行GPIO…

二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

接上次博客:二十四种设计模式与六大设计原则(二):【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义…

linux redis 快速安装

选择合适的版本 以下是在Linux系统上安装Redis的步骤: 1、下载Redis: wget http://download.redis.io/releases/redis-7.2.0.tar.gz 2、解压缩Redis: tar xzf redis-7.2.0.tar.gz 3、编译Redis: cd redis-7.2.0 make 4、…

C语言——内存函数

前言&#xff1a; C语言中除了字符串函数和字符函数外&#xff0c;还有一些函数可以直接对内存进行操作&#xff0c;这些函数被称为内存函数&#xff0c;这些函数与字符串函数都属于<string.h>这个头文件中。 一.memcpy&#xff08;&#xff09;函数 memcpy是C语言中的…

维修贝加莱4PP420.1043-B5触摸屏Power Panel 400工业电脑液晶

深圳捷达工控维修为贝加莱、HMI 显示电源面板 400 4PP420.1043-B5 提供专业电子维修。在 深圳捷达工控维修&#xff0c;我们拥有及时且经济高效地维修 B&R 、HMI Display Power Panel 400 4PP420.1043-B5 的经验。我们为发送给我们工厂维修的贝加莱 HMI 显示面板 400 4PP42…

【智能算法】霜冰优化算法(RIME)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;H Su等人受到自然界霜冰生长机制启发&#xff0c;提出了霜冰优化算法&#xff08;Rime Optimization Algorithm, RIME&#xff09;。 2.算法原理 2.1算法思想 RIME模拟软霜颗粒…

css去除滑动框

css去除滑动框 要在CSS中去除滑动条&#xff0c;可以使用overflow属性。如果你想要在特定的元素上去除滑动条&#xff0c;可以将该元素的overflow属性设置为hidden&#xff0c;这样内容如果超出了元素的尺寸&#xff0c;就不会显示滑动条。 例如&#xff0c;如果你想要在一个…

【Laravel】06 数据库迁移工具migration

【Laravel】06 数据库迁移工具migration 1.migration文件目录2. 举例 1.migration文件目录 2. 举例 (base) ➜ example-app php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_crea…

QT(6.5) cmake构建C++编程,c++与python进行通信(命名管道)

QT(6.5) cmake构建C编程&#xff0c;c与python进行通信&#xff08;命名管道&#xff09; 首先&#xff0c;c端编写命名管导通信代码 #include <QDebug> #include <windows.h>bool fifp_cpp(){// 创建命名管道&#xff08;用于读写&#xff09;HANDLE hPipe;hPip…

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f; HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接改善了短连接造成的性能开销。支持管道网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&#xff0c…

0基础学习Mybatis系列数据库操作框架——最小Demo

大纲 数据库Mybatis目录结构配置代码 代码/配置结构配置结构依赖库配置SQL配置Mybatis配置数据库配置SQL映射配置 完整配置 代码结构映射类Mybatis逻辑从 XML 中构建 SqlSessionFactory从 SqlSessionFactory 中获取 SqlSession通过mapper中的namespace和id执行SQL 完整逻辑和代…

nginx的https与动态负载均衡

nginx的https 证书可以根据你的域名和服务器服务商去进行签发 , 比如 : 阿里云 腾讯云 百度云 华为云等 这里使用的是腾讯云 : 下载证书 : 选择 nginx: 下载之后传递到服务器上。 下面开始配置nginx的https: 1. 解压下载的证书包 cd /etc/ssl unzip xxcc.dwa_nginx.zip mv…

2024/3/31学习总结

才不是今天没有学大知识才学这个。等我下周我发个大的。最近在读mysql的innodb底层&#xff0c;到时候给大家总结大的用自己的话&#xff0c;应该是缓慢更新吧 一、上午 1.1 icpc西部赛 酣畅淋漓的环节。主办方没有活硬整&#xff0c;就a,c,d,h可以做。a&#xff0c;h还题目意…

基于知识图谱的个性化学习推荐系统的设计与实现(论文+源码)_kaic

摘 要 Abstract 1 绪 论 1.1 研究背景及意义 1.2 国内外现状研究 1.3 研究工作和论文结构 2 相关技术 2.1 HTML 语言 2.2 Python 语言 2.3 数据库技术 2.4 Django 框架 3 系统分析 3.1 需求概述 3.2 系统可行性分析 3.2.1 技术可行性 3.2.2 经济可行性 3.2.3 操作可行性 3.3 功…

Spring-事务管理

1、事务管理 1.1、回滚方式 默认回滚方式&#xff1a;发生运行异常时异常和error时回滚&#xff0c;发生受查(编译&#xff09;异常时提交。不过&#xff0c;对于受查异常&#xff0c;程序员也可以手工设置其回滚方式 1.2、事务定义接口 1.2.1、事务隔离级别常量 这些常量…

EXCEL-VB编程实现自动抓取多工作簿多工作表中的单元格数据

一、VB编程基础 1、 EXCEL文件启动宏设置 文件-选项-信任中心-信任中心设置-宏设置-启用所有宏 汇总文件保存必须以宏启动工作簿格式类型进行保存 2、 VB编程界面与入门 参考收藏 https://blog.csdn.net/O_MMMM_O/article/details/107260402?spm1001.2014.3001.5506 二、…