深度学习中常用优化器(SGD, Momentum, Nesterov Momentum, AdaGrad, RMS Prop, Adam)的伪代码和对比

8 篇文章 1 订阅
订阅专栏

在深度学习中,优化器是其重要组成部分,本文来介绍一下常用优化器(SGD, Momentum, Nesterov Momentum, AdaGrad, RMS Prop, Adam)的伪代码并对他们进行对比。

1. SGD

SGD的伪代码如下:

SGD的梯度更新公式简单,采样用的是小样本,训练速度快,但由于是成之字形下降,在一些情况下效率很低。

2. (SGD with) Momentum

伪代码如下:

和SGD相比,带动量的SGD主要是借助物理学中动量的概念,在下降时保留一部分之前的方向和速度,以此来抑制震荡。若当前的梯度方向与累积的历史梯度方向一致,当前梯度就会被加强,使得这一步的下降幅度变大,反之也成立。具体到代码,就是新引入了一个变量v,这个v就是累计的历史梯度,以这个作为参数更新的值。下图就是一个带动量的SGD的梯度下降示意图:

3. Nesterov Momentum

对于带动量的SGD,我们可以想象成是一个小球沿着斜坡左歪右撞地盲目滚下,如果想让这个小球变得不那么盲目一点,Nesterov Momentum应运而生。

 对比于带动量的SGD,该方法加了一个校正因子,在求梯度的时候,考虑进了预估的下一个位置,如下图所示:

4. AdaGrad:

之前的几种方法的学习率是始终不变的,以下的几种方法主要是通过更新学习率来起到优化的目的。AdaGrad的伪代码如下:

相比于前面的优化方法,AdaGrad的改动主要是在标绿部分。我们知道,学习率小的时候下降的步子小,学习率大的时候下降的步子大, AdaGrad引入了累计因子r,用平方梯度来作累积,并将它的开根号作为学习率的除数,这么做的目的是为了在梯度较为平缓的时候(此时平方梯度较小),可以获得比较大的学习率,走的快一些,以此来提高效率,但是在日常使用中,会发现这种方法有的时候会使得学习率在一段时间的迭代后变得过小,因此还需要继续改进。

5. The RMS Prop Algorithm

伪代码如下:

针对AdaGrad中提到的问题,RMS Prop进行了划绿处的改进,通过添加一个衰减系数,来控制历史信息获得的多少,从而使得学习率的减小变得可控。

此外,还可以将RMS Prop和Nesterov Momentum结合起来,伪代码如下图:

6. Adam

Adam类似于将RMSprop和momentum相结合,利用了二者的优点,伪代码如下:

 其中标绿处为相比之前有改动的地方,Adam属于一个比较成熟的优化器,在很多情况下都可以适用。

Momentum优化器原理与代码实例讲解
禅与计算机程序设计艺术
05-20 784
1. 背景介绍 1.1 梯度下降算法的局限性 梯度下降算法机器学习深度学习常用的优化算法之一,它通过迭代地调整模型参数来最小化损失函数。然而,传统的梯度下降算法存在一些局限性,例如: 收敛速度慢: 当损失函数的梯度变化缓慢时,梯度
人工智能伪代码.rar
07-08
人工智能四种搜索算法的C++伪代码 作为参考学习资源
《神经网络与深度学习算法伪代码汇总
热门推荐
weixin_46178977的博客
07-21 1万+
《神经网络与深度学习算法伪代码
吴恩达Deep Learning代码笔记(伪代码).第二周
m0_52935007的博客
12-03 685
文章目录 学习目标: 学习内容: 学习目标: 1、m个样本的梯度下降(非向量化) 2、m个样本的梯度下降(向量化) 3、python的broadcasting 学习内容: 0、步骤示意图 1、m个样本的梯度下降(非向量化) J=0;dw1=0;dw2=0;db=0; for i = 1 to m z(i) = wx(i)+b; a(i) = sigmoid(z(i)); J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));..
机器学习实践指南(五)—— GD/SGD/MSGD 伪代码演示
05-18 3831
GDwhile True: loss = f(params) d_loss_wrt_params = ... params -= eta * d_loss_wrt_params if <stopping condition met>: return paramsSGD逐样本训练:for x_i, y_i in training_data: lo
优化器SGD with Momentum
wekings的博客
03-25 1364
(1)指数加权平均:一种近似求平均的方法,公式如下: 代表局部的平均值。代表第t个数据的值。是可调节超参。可近似为前个数据的的平均值。 举例说明,设,则近似代表近10个数据的平均值: 指数递减的加权的移动平均,越近期的数据加权越大。对原始数据做了平滑,降低了原始数据的震荡成都,怎么看是前多少个数据的平均值呢,n通过得到。 (2)SGD with Momentum 采用上述指数加权平均的思路,在SGD增加动量的概念,使得前几轮的梯度也会加入到当前的计算(会有一定衰减),通过对前面一部分梯
SGDAdam优化器在卷积神经网络上的结果对比实验 文档+代码整理
01-28
# SGDAdam优化器在卷积神经网络上的结果对比实验 文档+代码整理 1. 使用ResNet18进行实验,研究了batch size、学习率和权重初始化对图像分类任务的影响; 2. 针对LeNet、AlexNet、ResNet18三种卷积神经网络,比较...
基于NumPy实现的(伪)深度学习包,包括常用优化器SGDAdam,常用损失函数.zip
02-06
更有深度学习机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。 【期待与您同行】 我们真诚地邀请您下载并使用...
tensorflow2 5种优化器 SGD,SGDM,ADAGRAD,RMSPROP,ADAM 在鸢尾花数据集的对比.docx
05-01
tensorflow2 5种优化器 SGD,SGDM,ADAGRAD,RMSPROP,ADAM 在鸢尾花数据集的对比,word 文档。
收藏 _ 深度学习优化算法:从SGDAdamW原理和代码解读1
08-04
可打印版本附pdf下载链接本思想来下这篇佬的章:Juliuszh:个框架看懂优化算法之异同 SGD/AdaGrad/Adam主要是对深度学习各种优化器 (从SG
Matlab代码,里面包括五种常见神经网络优化算法的对比 包括SGDSGDM、AdagradAdaDelta、Adam
最新发布
03-02
SGDSGDM、AdagradAdaDelta 和 Adam 的简介: SGD(Stochastic Gradient Descent,随机梯度下降)是神经网络最基本的优化算法之一。它通过随机选择一小部分样本进行训练,并基于这些样本的梯度来更新模型参数...
实验伪代码
01-06
该篇文章讲述了论文实验部分的伪代码,该实验采用python语言编写,框架采用深度学习框架keras,整体实验分为一下几个部分: 1 第一次训练(first.py) 功能实现: 根据输入的数据文件,处理数据后,切割为训练集和测试集,并在本地生成对应的文件。对整体数据,使用CountVectorizer对邮件文本进行向量化,并且生成了一个字典。用词袋模型将训练集的邮件文本数据转化为词袋特征,并用这些特征训练模型,将该模型生成本地文件。最后,加载训练集文件对模型进行评估,自此该文件运行完毕。 输入: 第一次训练的数据文件(trec06.csv) 输出: 字典文件 第一次训练的训练集和测试集 第一次训
Adam优化算法原理详解(吴恩达深度学习笔记)
01-06
在介绍Adam之前首先介绍一下momentumRMSprop优化算法。 一、momentum 1、指数加权平均数 指数加权平均数不仅考虑了当前数值也涵盖了以前的数据对现在的影响。 解释指数加权平均值名称的由来: 指数加权平均值的应用: 使用这种方法进行数据的估计可能不是最精确的,但是这种方法计算简单,节省内存。 指数加权平均数因为设置的第0个值为0,所以对于前几个数都会出现严重的偏差,所以引入了偏差修正。 2.指数加权平均数的偏差修正 3.momentum算法算法是梯度下降算法的一种改进,在神经网络的反向传播过程,不再只依赖当前参数的下降梯度进行参数的更新,也依赖以前几轮的参数和参数
深度学习的优化算法之带MomentumSGD
网络资源是无限的
05-08 3276
之前在https://blog.csdn.net/fengbingchun/article/details/123955067介绍过SGD(Mini-Batch Gradient Descent(MBGD),有时提到SGD的时候,其实指的是MBGD)。这里介绍下带动量(Momentum)的SGDSGD(Stochastic Gradient Descent)难以导航沟壑(SGD has trouble navigating ravines),即SGD在遇到沟壑时容易陷入震荡。 ...
深度学习(九) 深度学习最全优化方法总结比较(SGDMomentumNesterov MomentumAdagradAdadelta,RMSprop,Adam)...
weixin_30609331的博客
01-16 360
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x(权重),使得f(x)的值最小。 本文以下内容假设读者已经了解机器学习基本知识,和梯度下降的原理。 SGD SGD指stochastic gradient descent,即随机梯度下降。是梯度下降的batch版本。 对于训练数据集,我们首先将其分成n个batch,每个batch包含m个样本。我们每次更新都...
RMSProp/Momentum/Adam/AdamW,多种优化器详解及伪代码实现
谁谓荼苦,其甘如荠
07-09 5215
多种梯度更新方法——都是对Gradient Descent的优化 传统GD x = x - lr * grad_x AdaGrad——不同方向的梯度应该是可以不一样的 为了解决不同方向上梯度涨落速度不一致的情况,所以相当于给每个方向不同的learning_rate。 具体每个方向的lr大小要怎么拟定?——之前该方向上grad大的,就给小lr——即梯度变化幅度缓慢,那么就拉开步子大胆走。如上图的公式,历史grad总量和lr大小成反比,即该方向的总grad越小,则lr就越大。 但该方法解决不了,在该方向上
深度学习优化器的原理总结(SGD/SGD with momentum/Adagrad/AdaDelta/RMSProp/Adam/Nadam)
cyy2learn的博客
04-24 3433
优化器的框架: 目标函数关于当前参数的梯度 ; 根据历史梯度计算一阶动量与二阶动量: ; ; 计算当前时刻的下降梯度: ​​​​​​​; 根据更新参数: ​​​​​​​; 现在我们来一个个分析现有的优化器,如何套入以上的框架。 简单来说,它们的区别就在于和的定义。 SGD 特点:没有使用动量...
理论篇3:深度学习之----Momentum优化器(2)
xp_fangfei的博客
08-14 838
有一种算法叫做Momentum,或者叫做动量梯度下降法,运行速度几乎总是快于标准的梯度下降算法,简而言之,Momentum算法在原有的梯度下降法引入了动量。基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新权重。引入动量比起普通梯度下降法主要能够增加两个优点。首先,引入动量能够使得物体在下落过程,当遇到一个局部最优的时候有可能在原有动量的基础上冲出这个局部最优点;......
SGD优化器Momentum的理解
weixin_43120290的博客
05-23 6815
一、介绍     在深度学习Momentum(动量)优化算法是对梯度下降法的一种优化, 它在原理上模拟了物理学的动量,已成为目前非常流行的深度学习优化算法之一。在介绍动量优化算法前,需要对 指数加权平均法 有所了解,它是动量优化算法的理论基础,可参见本人另外一篇博文:深度学习: 指数加权平均。 物理学动量的定义: 设物体的质量为 ,速度为...
分别使用SGDMomentumAdaGradAdam优化算法来进行优化
06-01
好的,针对使用SGDMomentumAdaGradAdam优化算法来进行优化的问题,我可以给出如下回答: (1)SGD(随机梯度下降):SGD是最基本的优化算法,其每次迭代只使用一个样本更新参数。由于每次迭代只使用一个样本,SGD在训练过程的收敛速度相对较慢,而且容易陷入局部最优解。但是SGD的计算量较小,在对大规模数据进行训练时,SGD是一种较为常用的优化算法。 (2)Momentum(动量法):Momentum算法是在SGD算法的基础上引入了动量项,用于加速收敛速度。Momentum算法能够有效地解决SGD算法在参数更新出现的震荡现象,使得参数更新更加平滑。Momentum算法的核心思想是在参数更新时加入上一次更新的动量,避免梯度方向变化过快导致的震荡现象。 (3)AdaGrad(自适应梯度算法):AdaGrad算法是一种自适应学习率算法,其主要思想是对每个参数的学习率进行自适应调整。AdaGrad算法能够根据不同参数的梯度大小自动调整学习率,使得梯度较大的参数学习率较小,梯度较小的参数学习率较大。这样能够有效地解决SGD算法在训练过程学习率过大或过小的问题。 (4)Adam(自适应矩估计算法):Adam算法是一种自适应学习率算法,其主要思想是基于梯度的一阶矩估计和二阶矩估计来更新参数。Adam算法能够自适应地调整每个参数的学习率,并且具有较好的收敛性能。相比于AdaGrad算法Adam算法能够更加准确地估计每个参数的梯度,从而更加有效地调整学习率。 以上就是使用SGDMomentumAdaGradAdam优化算法来进行优化的回答,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • pandas输出csv不带自动添加的行和列的序号 12395
  • 【神经网络-数据分类】利用卷积神经网络(CNN)对数据进行分类 6409
  • C++ 读取csv文件(复制即可用) 6346
  • PyTorch中激活函数GELU、Swish、Mish函数的实现 4976
  • 深度学习中常用优化器(SGD, Momentum, Nesterov Momentum, AdaGrad, RMS Prop, Adam)的伪代码和对比 4551

分类专栏

  • 神经网络 8篇
  • 数据挖掘 7篇
  • 日常小技巧 6篇
  • 力扣做题 5篇
  • 踩坑笔记 1篇
  • 数据库 1篇

最新评论

  • C++ 读取csv文件(复制即可用)

    Ex-Monster: 如果有一个单元格里面有逗号,那以逗号分割好像就有问题

  • C++ 读取csv文件(复制即可用)

    飞行小菜鸟: 牛,完美解决我的问题

  • C++ 读取csv文件(复制即可用)

    ZhuojunChen: 这个是文件路径

  • C++ 读取csv文件(复制即可用)

    m0_71355525: 引用「D:\\aa\\bb.csv」 这个路径是怎么找到的

  • “FindPython3.cmake“找不到的解决方案

    君子傲つ九夏青枫醉三冬。: 感谢 非常棒!

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • C++ 读取csv文件(复制即可用)
  • PyTorch中激活函数GELU、Swish、Mish函数的实现
  • PyTorch中Module类的使用方法,模型中参数的添加与获取以及保存与载入模型
2022年4篇
2021年18篇
2020年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码广州关键词按天计费南澳阿里店铺运营横岗关键词排名包年推广南澳百度关键词包年推广坪山seo网站优化光明网络营销西乡模板推广坪山网站关键词优化布吉网站关键词优化木棉湾网站seo优化观澜网站推广系统荷坳模板网站建设观澜网站改版大鹏英文网站建设坪地网站排名优化深圳关键词按天扣费大芬标王坪地网站排名优化大运seo网站优化同乐外贸网站制作沙井seo网站优化广州seo排名木棉湾标王沙井网站设计模板横岗网站搜索优化丹竹头外贸网站制作双龙SEO按天收费坪地网络营销大浪网页设计横岗网站定制歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化