网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 网站优化 » 正文

神经网络关于优化器的选择问题(Optimizer)

2019-8-2 16:34:13 | 作者:老铁SEO | 0个评论 | 人浏览

  其实机器学习训练过程中的本质就是在最小化损失,而在我们定义了损失函数后,优化器就派上了用场,在深度学习中,我们通常就是对于梯度优化,优化的目标就是网络模型里的参数θ(是一个集合,θ1、θ2、θ3 ……)。

  批量梯度下降法,也是梯度下降法最基础的形式,算法的思想是在更新每个参数的时,都使用所有样本进行更新:

  上述也说到了,批量梯度下降每迭代一步,是需要用到训练集的所有数据,如果样本数目很大,速度就会很慢,所有随机梯度下降(SGD)也就顺理成章的引入。

  优点:全局最优解;易于并行实现;从跌代次数上来说,BGD
的迭代次数比较少。

  随机梯度下降法(SGD),与SGD相比,SGD每次更新时对每个样本进行梯度更新,数学表达如下:

  随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的线次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

  缺点:准确度下降,并不是全局最优;不易于并行实现。从迭代次数来看,SGD迭代次数较多,在解空间的搜索过程看起来很盲目。

  小批量梯度下降法,是中和了BGD,SGD二者的优缺点,即算法的训练过程较快,而且也要保证最终参数的准确率,MBGD在每次更新参数时候,使用b个样本(b一般为50~256)

  优点:收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

  缺点:关于学习率的选择,如果太小,收敛速度就会变慢,如果太大,loss function就会在极小值处不停的震荡甚至偏离。

  1.不过 Mini-batch gradient descent 不能保证很好的收敛性,learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。(有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。)对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。(会在鞍点或者局部最小点震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。)

  2.SGD对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。LR会随着更新的次数逐渐变小。

  momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力。

  Momentum中包含以下参数(学习速率 ϵ, 初始参数 θ, 初始速率v, 动量衰减参数α)

  Momentum最好情况下能够将学习速率加速1/(1−α)倍.一般α的取值有0.5,0.9,0.99这几种,分别表示最大速度2倍,10倍,100倍于SGD的算法。.当然,也可以让α的值随着时间而变化,一开始小点,后来再加大.不过这样一来,又会引进新的参数.

  特点: 
 - 前后梯度方向一致时,能够加速学习 
 - 前后梯度方向不一致时,能够抑制震荡

  具体实现需要:学习速率 ϵ, 初始参数 θ, 初始速率v, 动量衰减参数α

  从训练集中的随机抽取一批容量为m的样本{x1,…,xm},以及相关的输出yi

  注意在估算梯度g的时候,参数变成了θ+αv而不是之前的θ,与Momentum唯一区别就是,计算梯度的不同,Nesterov先用当前的速度v更新一遍参数,在用更新的临时参数计算梯度。

  蓝色是 Momentum 的过程,会先计算当前的梯度,然后在更新后的累积梯度后会有一个大的跳跃。而 NAG 会先在前一步的累积梯度上(brown vector)有一个大的跳跃,然后衡量一下梯度做一下修正(red vector),这种预期的更新可以避免我们走的太快。

  Adagrad可以自动变更学习速率,只是需要设定一个全局的学习速率ϵ,但是这并非是实际学习速率,实际的速率如下公式所示:

  所以Adagrad可以对低频的参数做较大的更新,对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性

  从训练集中的随机抽取一批容量为m的样本{x1,…,xm},以及相关的输出yi

  优点: 能够实现学习率的自动更改。如果这次梯度大,那么学习速率衰减的就快一些;如果这次梯度小,那么学习速率衰减的慢一些。对于每个参数,随着其更新的总距离增多,其学习速率也随之变慢。

  缺点: 任然要设置一个变量ϵ ,经验表明,在普通算法中也许效果不错,但在深度学习中,深度过深时会造成训练提前结束。

  rmsprop算法不再孤立地更新学习步长,而是联系之前的每一次梯度变化情况,具体如下。

  rmsprop算法给每一个权值一个变量MeanSquare(w,t)用来记录第t次更新步长时前t次的梯度平方的平均值。然后再用第t次的梯度除上前t次的梯度的平方的平均值,得到学习步长的更新比例。根据此比例去得到新的学习步长。如果当前得到的梯度为负,那学习步长就会减小一点点;如果当前得到的梯度为正,那学习步长就会增大一点点。

  这些算法并不能完全解决局部最小值问题,只是使得参数收敛的速度更快。针对是否能收敛到全局最优解,还与模型的初始化有关。

  这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值:

  如果 mt 和 vt 被初始化为 0 向量,那它们就会向 0 偏置,所以做了偏差校正,通过计算偏差校正后的 mt 和 vt 来抵消这些偏差:

  优化器总结机器学习中,有很多优化方法来试图寻找模型的最优解。比如神经网络中可以采取最基本的梯度下降法。梯度下降法(GradientDescent)梯度下降法是最基本的一类优化器,目前主要分为三种梯度下...博文来自:SanFancsgo的博客

  本篇博客主要介绍几种加速神经网络训练的方法。我们知道,在训练样本非常多的情况下,如果一次性把所有的样本送入神经网络,每迭代一次更新网络参数,这样的效率是很低的。为什么?因为梯度下降法参数更新的公式一般...博文来自:Jaster_wisdom的专栏

  Adam的优点现在很多深度网络都优先推荐使用Adam做优化算法,我也一直使用,但是对它的参数一知半解,对它的特性也只是略有耳闻,今天我终于花时间看了一下论文和网上的资料。整理如下。Adam是从2个算法...博文来自:weixin_33860737的博客

  神经网络中的各种优化方法大家耳熟能详的优化方法有梯度下降法(GradientDescent)、随机梯度下降法(StochasticGradientDescent)、Adam方法等等。虽然很多听过甚至用...博文来自:autocyz

  最近在用tensorflow做一个二分类,迭代次数为10000,不知道为什么会出现时而收敛时而不收敛的情况,所以想到要调整参数,比如优化器,学习率之类的,这一篇是关于网上的优化器选择的帖子,用于备忘!...博文来自:m0_37652515的博客

  一句话,用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数E(x)...博文来自:的博客

  欠拟合与过拟合问题是机器学习中的经典问题,尽管相关的讨论和预防方法非常多,但目前在许多任务中仍经常会出现过拟合等问题,还没有找到一个十分通用、有效的解决方法。不过总体上看,现在人们常用的一些很简洁的方...博文来自:Xwei1226的博客

  如下笔记根据moocTensorFlow笔记整理而得,自己将其中代码重新实现了一遍,加固记忆一、激活函数与交叉熵神经元模型:用数学公式表示为: f(∑ixiwi+b),,f为激活函数。神经网络是以神经...博文来自:bxg1065283526的博客

  keras中神经网络优化算法SGD,Adam等如何选择。博文来自:ybdesire的专栏

  GradientDescent(BatchGradientDescent,BGD)梯度下降法是最原始,也是最基础的算法。它将所有的数据集都载入,计算它们所有的梯度,然后执行决策。(即沿着梯度相反的方向...博文来自:Aliz_

  神经网路越复杂,数据量越大,训练网络所需要的时间就越多。有时候为了解决复杂的问题,复杂的网络跟庞大的数据是不可缺少的。所以寻找了一些方法,加速神经网络的训练。1.SGD(StochasticGradi...博文来自:Gloria_Song的博客

  博文内容转载至:优化算法解决优化问题,有很多算法(最常见的就是梯度下降),这些算法也可以用于...博文来自:我是一个菜鸟,虚心学习的菜鸟。

  前言本文仅对一些常见的优化方法进行直观介绍和简单的比较,各种优化方法的详细内容及公式只好去认真啃论文了,在此我就不赘述了。SGD此处的SGD指mini-batchgradientdescent,关于b...博文来自:fengchao03的博客

  三种梯度下降法:若是样本很多,用标准梯度法会很慢,用随机梯度会很快,但是由于每个样本都会用来更新权重,会有噪声的引入,会产生更新错误。Momentum:因此训练速度会有一定的加快。NAG(Nester...博文来自:yuanCruise

  之前在tensorflow上和caffe上都折腾过CNN用来做视频处理,在学习tensorflow例子的时候代码里面给的优化方案默认很多情况下都是直接用的AdamOptimizer优化算法,如下:op...博文来自:Camaro的专栏

  想提高一个深层神经网络的训练效率,需从各个方面入手,优化整个运算过程,同时预防其中可能发生的各种问题。本文涉及优化深层神经网络中的数据划分,模型估计,预防过拟合,数据集标准化,权重初始化,梯度检验等内...博文来自:Pyrohjewel

  在很多机器学习和深度学习的应用中,我们发现用的最多的优化器是Adam,为什么呢?下面是TensorFlow中的优化器,博文来自:g11d111的博客

  前言这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理。Mybatis【持久化框架】Mybatis简介与原...博文来自:笔头先生

  作者:不会停的蜗牛CSDNAI专栏作家在很多机器学习和深度学习的应用中,我们发现用的最多的优化器是Adam,为什么呢?下面是TensorFlow中的优化器,博文来自:qunnie_yi的博客

  什么是优化算法?给定一个具有参数θ的目标函数,我们想要找到一个w使得目标函数取得最大值或最小值。优化算法就是帮助我们找到这个θ的算法。在神经网络中,目标函数f就是预测值与标签的误差,我们希望找到一个θ...博文来自:庞琳卓的博客

  Batchgradientdescent每次更新我们需要计算整个数据集的梯度,因此使用批量梯度下降进行优化时,计算速度很慢,而且对于不适合内存计算的数据将会非常棘手。批量梯度下降算法不允许我们实时更新...博文来自:weixin_34387468的博客

  转载:梯度下降框架给定优化的模型参数θ∈Rdθ∈Rd和目标函数J(θ)J(θ)后,算法沿着梯度...博文来自:的博客

  什么是优化方法  优化方法,是通过某种训练模式最小化误差(损失)函数的算法。  损失函数度量基于模型参数的模型预测值与真实值之间的偏差程度,在神经网络中是基于w(权重)和b(偏置)的函数。我们通过优化...博文来自:时光机 °的博客

  摘自莫烦python中关于TensorFlow的讲解传统的参数更新方式如下,传统的参数W的更新是把原始的W累加上一个负的学习率(learningrate)乘以校正值(dx).这种方法可能会让学习过程曲...博文来自:闲逸的炫鹰

  优化器作用:求出让损失函数最小化的参数1、Adam关联所有样本的梯度,便于求解全局最优解,始终含有前面梯度的信息,把前面的梯度传到后面优点:自动调节学习率,速度快,梯度传导optimizer=tf.t...博文来自:ZHANGHUIHUIA的博客

  转自在很多机器学习和深度学习的应用中,我们发现用的最多的优化器是Adam,为什么呢?下面是TensorFlow中的优化器,h...博文来自:weixin_39034980的博客

  tensorflow详解优化器的选择1.什么是优化器2.梯度下降算法1.什么是优化器要型对各种优化的选择游刃有余,得先理解什么是优化器。深度学习的目标是通过不断改变网络参数,使得参数能够对输入做各种非...博文来自:锦小年的博客

  各种优化器的对比下图是损失曲面的轮廓和不同优化算法的时间演化。我们的目的是设计一个优化器让其能够最快达到目标值。在神经网络中,每训练一次代表优化算法迭代了一次,对应图上则是点往前移动了一步,当优化器可...博文来自:二毛的博客

  本博客介绍了神经网络训练过程中的常见优化策略,并进行了分析和对比,包括梯度下降、小批量梯度下降、动量梯度下降、RMSProp、Adam等。下面贴出的代码地址能帮助读者更详细地理解各优化器的实现过程,原...博文来自:的博客

  在暑假闲着的时候,突然想着去做一款游戏,脑子里游戏大概的模样都想得差不多了,就差怎么去敲代码了,在之前接触过一款图形库Easyx,也看到很多人用它做出了各种各样的小游戏,因为计算机图形老师叫做实验,实...博文来自:独钓寒江雪

  神经网络及优化步骤实现1.神经元神经网络的基础是一种被称作“感知机”的人工神经元,或许你在支持向量机的概念里也见到过。 感知机的工作模式相当简单,其接受多个二进制输入,,并产生一个二进制输出: ⽰例中...博文来自:法相的博客

  查询优化器是指生成查询计划的子系统,该子系统通常完全处于服务器端,根据要参与连接(join)的表、数据读取方式(所殷读取或表扫描)和索引选择等因素制定查询计划。以基于开销的优化器为例,数据库查询优化器...博文来自:Wake_me_Up123的博客

  红色石头的个人网站:器学习中,如果参数过多,模型过于复杂,容易造成过拟合(overfit)。即模型在训练样本数据上表现的很好,但在实际测试样本上表现的较差,不具备良好...博文来自:weixin_34121304的博客

  几乎所有的机器学习中,都面临着减少模型预测值和数据之间误差的问题,这类问题一般都转换成求目标函数的最小值问题,称为优化问题如上图优化问题就是找最小值的问题。1常见几种优化器首先来看一下梯度下降最常见的...博文来自:的博客

  在很多机器学习和深度学习的应用中,我们发现用的最多的优化器是Adam,为什么呢?下面是TensorFlow中的优化器,博文来自:junchengberry的博客

  介绍一些深度学习的优化器参考覃秉丰教程梯度下降法则标准梯度下降法:计算所有样本汇总误差,根据总误差来更新权值随机梯度下降法:先随机抽取一个样本来计算误差,再根据这个误差来更新权值批量梯度下降法:从总样...博文来自:tonydandelion2014的博客

  正则化(Regularization)机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1-norm和ℓ2-norm,中文称作L1正则化和L2正则化,或者L1...博文来自:panghaomingme的博客

  “把人工智能在机构中用起来”——OReilly人工智能大会正在征集讲师议题,查看具体要求请点击这里,截止日期11月7日。编者注:想进一步了解神经进化,可以查看旧金山人工智能大会上KennethSta...博文来自:OReillyData

  学习笔记内容来源:《NeuralNetworksandDeepLearning》作者:MichaelNielsen第一部分:更好的代价函数的选择1.二次代价函数的由来在说明之前我先解释下什么是代价函数...博文来自:阿鹏的摇滚小站

  一、keras优化器类别二、算法详解2.1SGD这里的随机梯度下降,从严格意义上说应该是Mini-batch梯度下降,即每次用一小批样本进行计算,这样一方面具有梯度下降更新参数时低方差的特性,同时也兼...博文来自:ice_actor的博客

  反正是要学一些API的,不如直接从例子里面学习怎么使用API,这样同时可以复习一下一些基本的机器学习知识。但是一开始开始和以前一样,先直接讲类和常用函数用法,然后举例子。这里主要是各种优化器,以及使用...博文来自:木东的博客

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:网络优化  
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。