常见优化方法有哪些

常见优化方法有:1、SGD;2、Momentum;3、Nesterov;4、Adagrad;5、Adadelta;6、RMSprop;7、Adam;8、Adamax。SGD是指,随机梯度下降,多用于支持向量机、逻辑回归(LR)等凸损失函数下的线性分类器的学习。

1、SGD

随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归(LR)等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。SGD既可以用于分类计算,也可以用于回归计算。

SGD算法是从样本中随机抽出一组,训练后按梯度更新一次,然后再抽取一组,再更新一次,在样本量及其大的情况下,可能不用训练完所有的样本就可以获得一个损失值在可接受范围之内的模型了。(重点:每次迭代使用一组样本。)所谓随机是指每次迭代过程中,样本都要被随机打乱,这个也很容易理解,打乱是有效减小样本之间造成的参数更新抵消问题。

对于权值的更新不再通过遍历全部的数据集,而是选择其中的一个样本即可。一般来说其步长的选择比梯度下降法的步长要小一点,因为梯度下降法使用的 是准确梯度,所以它可以朝着全局优异解(当问题为凸问题时)较大幅度的迭代下去,但是随机梯度法不行,因为它使用的是 近似梯度,或者对于全局来说有时候它走的也许根本不是梯度下降的方向,故而它走的比较缓,同样这样带来的好处就是相比于梯度下降法,它不是那么容易陷入到局部优异解中去。

2、Momentum

在深度学习中,Momentum(动量)优化算法是对梯度下降法的一种优化, 它在原理上模拟了物理学中的动量,已成为目前非常流行的深度学习优化算法之一。该算法将一段时间内的梯度向量进行了加权平均,分别计算得到梯度更新过程中 w 和 b 的大致走向,一定程度上消除了更新过程中的不确定性因素(如摆动现象),使得梯度更新朝着一个越来越明确的方向前进。

特点:

  • 下降初期时,使用上一次参数更新,下降方向一致,乘上较大的mu(动量因子)能够进行很好的加速
  • 下降中后期时,在局部最小值来回震荡的时候,gradientto0mu(动量因子)使得更新幅度增大,跳出陷阱
  • 在梯度改变方向的时候,mu(动量因子)能够减少更新总而言之,momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛

3、Nesterov

Nesterov动量优化算法是Momentum优化算法的一种改进。比较这两个算法的算法步骤,基本都一样,差别就在于应用临时更新这一句即先用当前的速度v先更新一遍参数,这样做后,Nesterrov算法比Momentum算法更新更快,因为在每一次更新的时候都是基于当前速度和梯度的更新,那我在求梯度之前就先进行一次对于当前速度的更新,就会加快收敛速度。nesterov项在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。

4、Adagrad

Adagrad是解决不同参数应该使用不同的更新速率的问题,Adagrad自适应地为各个参数分配不同学习率的算法。Adagrad算法中有自适应调整梯度的意味(adaptive gradient),学习率需要除以一个东西,这个东西就是前n次迭代过程中偏导数的平方和再加一个常量最后开根号。该优化算法与普通的sgd算法差别就在于标黄的哪部分,采取了累积平方梯度。简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同。

5、Adadelta

Adadelta一种自适应学习率方法,是AdaGrad的扩展,建立在AdaGrad的基础上,旨在减少其过激的、单调递减的学习率。Adadelta不是积累所有过去的平方梯度,而是将积累的过去梯度的窗口限制为某个固定大小。使用Adadelta,我们甚至不需要设置默认学习率这一超参数,因为它已从更新规则中消除,它使用参数本身的变化率来调整学习率。

Adadelta可被认为是梯度下降的进一步扩展,它建立在AdaGrad和RMSProp的基础上,并改变了自定义步长的计算(changes the calculation of the custom step size),进而不再需要初始学习率超参数。 Adadelta旨在加速优化过程,例如减少达到优异值所需的迭代次数,或提高优化算法的能力,例如获得更好的最终结果。

6、RMSprop

针对 AdaGrad 算法每个元素的学习率在迭代过程中一直在降低(或不变),在迭代后期由于学习率过小,可能较难找到一个有用的解。为解决这一问题,RMSProp 算法对 AdaGrad 算法做了一点小小的修改。RMSProp优化算法和AdaGrad算法少数的不同,就在于累积平方梯度的求法不同。RMSProp算法不是像AdaGrad算法那样暴力直接的累加平方梯度,而是加了一个衰减系数来控制历史信息的获取多少。

7、Adam

Adam是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。Adam最开始是由OpenAI的DiederikKingma和多伦多大学的JimmyBa在提交到2015年ICLR论文(Adam:AMethodforStochasticOptimization)中提出的。

Adam与经典的随机梯度下降法是不同的。随机梯度下降保持一个单一的学习速率(称为alpha),用于所有的权重更新,并且在训练过程中学习速率不会改变。每一个网络权重(参数)都保持一个学习速率,并随着学习的展开而单独地进行调整。该方法从梯度的名列前茅次和第二次矩的预算来计算不同参数的自适应学习速率。

8、Adamax

是梯度优化算法的扩展,基于无穷范数的Adam的变体(a variant of Adam based on the infinity norm)。此算法对学习率的上限提供了一个更简单的范围,并可能对某些问题进行更有效的优化。AdaMax与Adam区别:本质上前者是将L2范数推广到L-infinity范数。AdaMax与Adam最终公式中仅分母的计算方式不同,AdaMax使用公式24,Adam使用公式20。

延伸阅读

Adam优化算法在非凸优化问题中的优势

  1. 直截了当地实现
  2. 高效的计算
  3. 所需内存少
  4. 梯度对角缩放的不变性(第二部分将给予证明)
  5. 适合解决含大规模数据和参数的优化问题
  6. 适用于非稳态(non-stationary)目标
  7. 适用于解决包含很高噪声或稀疏梯度的问题
  8. 超参数可以很直观地解释,并且基本上只需极少量的调参

文章标题:常见优化方法有哪些,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/34648

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW站长
上一篇 2023年1月6日 下午3:21
下一篇 2023年1月6日 下午3:51

相关推荐

  • 各种常见的编程语言较广泛应用的领域分别是什么

    各种常见的编程语言较广泛应用的领域分别是:1、C语言的主要应用领域是操作系统、嵌入式和服务器这三块;2、Java主要用于企业级应用开发、网站平台开发、移动领域的手机游戏和移动android开发等。其中,C语言是一门强大的被广泛运用于底层的高级语言。 一、C语言 C语言的主要应用领域是操作系统、嵌入式…

    2023年3月19日
    73200
  • 数之联方育柯:技术的意义在于成就他人

     文| babayage 编辑 |笑 笑 江湖传闻,拔尖高手交锋,拼的不是招式,而是信念,拳有意,剑有道。方育柯的技术拳意,是成就他人。 泡沫幻灭期入场大数据 2006年,本科攻读数学专业的方育柯考入电子科大研究生,摆在面前的两个进修方向:其一是应用数学,另一个是计算机智能+神经网络分析,方育柯选择…

    2022年3月20日
    26000
  • Rust所宣称的zero-costabstractions是什么

    所谓zero-costabstractions指的是在构建一个抽象的时候这个抽象不会造成额外的负担,典型的对比是 struct 和 Java 的 class。zero-costabstractions是指Rust中抽象用到的类型和Trait信息不会保留到运行时,虽然做出了抽象,但是并没有为抽象支付成…

    2023年2月22日
    12600
  • mac可以用哪个项目管理软件?

    mac可以用的项目管理软件有:一、OmniFocus;二、Things 3;三、Asana;四、Trello。OmniFocus 是一款功能强大的项目管理工具,它能够帮助你更好地跟踪任务和项目进度。OmniFocus 具有优秀的界面和易用性,你可以轻松地将任务和项目分类。 一、OmniFocus O…

    2023年3月31日
    52600
  • 实时数据库是什么

    实时数据库(RTDB-Real Time DataBase)是数据库系统发展的一个分支,是数据库技术结合实时处理技术产生的,可直接实时采集、获取企业运行过程中的各种数据,并将其转化为对各类业务有效的公共信息。 一、实时数据库是什么 实时数据库(RTDB-Real Time DataBase)是数据库…

    2023年7月22日
    21700
  • 大数据与数据库是什么联系

    大数据本身代表一个庞大的技术体系结构,从技术体系结构来划分,涉及到数据的采集、整理、存储、安全、分析和呈现等一系列技术标准,而数据库仅仅是大数据技术体系中的一个环节,主要用于数据的存储,以及部分数据管理任务。 一、大数据与数据库是什么联系 大数据本身代表一个庞大的技术体系结构,从技术体系结构来划分,…

    2023年6月7日
    17500
  • 为什么C语言用int*a来声明指针变量,而不是int&a声明

    应该是写法造成的误解。建议写成 int* a = &b;就清楚多了。a的类型是int*,值是&b,C语言连续声明指针变量的时候又有点问题写成int* a, b, c;结果只有a是指针,b和c就是简单的整形变量了。 应该是写法造成的误解。建议写成 int* a = &b;就清楚…

    2023年2月22日
    10000
  • 团队管理中如何做好目标管理

    团队管理中做好目标管理的方法:1、目标制定;2、目标执行;3、目标复盘。其中,在制定目标的时候,也要让团队成员能够清晰的知道团队的目标是什么,自己在团队的总目标之下个人需要完成的目标是什么。这样就不至于个人目标与团队目标脱离。

    2023年1月1日
    19700
  • 计算机网络技术和移动应用开发有哪些区别

    计算机网络技术和移动应用开发区别有:1、技术特点;2、平台和设备;3、应用场景;4、技能要求。计算机网络技术涉及到在计算机之间传输数据和信息的技术。计算机网络技术涉及到在计算机之间传输数据和信息的技术。 一、技术特点 二、平台和设备 三、应用场景 四、技能要求 延伸阅读 边缘计算和移动应用开发的结合…

    2023年7月30日
    16800
  • 代码管理工具有哪些

    代码管理工具有:1、CVS;2、SVN;3、Git;4、VisualSourceSafe;5、ClearCase;6、Mercurial;7、Perforce;8、GitLab。CVS(Concurrent Versions System)是代码管理工具诞生以来最早出现的一名成员。 1、CVS CV…

    2023年3月31日
    1.6K00

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部