Deep Learning之优化方法

转自:http://blog.csdn.net/BVL10101111/article/details/72614711

 

先上一些结论:

1.选择哪种优化算法并没有达成共识

2.具有自适应学习率(以RMSProp 和AdaDelta 为代表)的算法族表现得相当鲁棒,不分伯仲,但没有哪个算法能脱颖而出。

3.对于当前流行的优化算法包括括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaDelta 和Adam而言,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)

4.基本不用二阶近似优化算法

一.最基本的优化算法

1.1SGD

在这里SGD和min-batch是同一个意思,抽取m个小批量(独立同分布)样本,通过计算他们平梯度均值。后面几个改进算法,均是采用min-batch的方式。

先上一些结论:

1.SGD应用于凸问题时,k次迭代后泛化误差的数量级是O(1/sqrt(k)),强凸下是O(1/k)。

2.理论上GD比SGD有着更好的收敛率,然而[1]指出,泛化误差的下降速度不会快于O(1/k)。鉴
于SGD只需少量样本就能快速更新,这远超过了缓慢的渐进收敛,因此不值得寻找使用收敛快O(1/k)。

3.可能由于SGD在学习中增加了噪声,有正则化的效果

4.在某些硬件上使用特定大小的数组时,运行时间会更少。尤其是在使用GPU时,通常使用2 的幂
数作为批量大小可以获得更少的运行时间。一般,2 的幂数的取值范围是32 到256,16 有时在尝试大模型时使用。

5.如果批量处理中的所有样本可以并行地处理(通常确是如此),那么内存消耗和批量大小会
正比。对于很多硬件设施,这是批量大小的限制因素

再看看算法: 
这里写图片描述

没啥太大难度,需要注意的是有必要随迭代步数,逐渐降低学习率。一种常见从做法是线性衰减学习率,直到这里写图片描述次迭代: 

这里写图片描述


其中这里写图片描述 在这里写图片描述 之后,学习率一般保持常数

1.2Momentum(动量)

先上结论:

1.动量方法主要是为了解决Hessian矩阵病态条件问题(直观上讲就是梯度高度敏感于参数空间的某些方向)的。

2.加速学习

3.一般将参数设为0.5,0.9,或者0.99,分别表示最大速度2倍,10倍,100倍于SGD的算法。

4.通过速度v,来积累了之间梯度指数级衰减的平均,并且继续延该方向移动: 

这里写图片描述

 

再看看算法: 
这里写图片描述

动量算法直观效果解释:

  如图所示,红色为SGD+Momentum。黑色为SGD。可以看到黑色为典型Hessian矩阵病态的情况,相当于大幅度的徘徊着向最低点前进。 
  而由于动量积攒了历史的梯度,如点P前一刻的梯度与当前的梯度方向几乎相反。因此原本在P点原本要大幅徘徊的梯度,主要受到前一时刻的影响,而导致在当前时刻的梯度幅度减小。 
  直观上讲就是,要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。 

这里写图片描述

 

从另一个角度讲:

  要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。 
  假设每个时刻的梯度g总是类似,那么由这里写图片描述我们可以直观的看到每次的步长为: 

这里写图片描述 


即当设为0.5,0.9,或者0.99,分别表示最大速度2倍,10倍,100倍于SGD的算法。

 

1.3Nesterov(牛顿动量)

先上结论:

1.Nesterov是Momentum的变种。

2.与Momentum唯一区别就是,计算梯度的不同,Nesterov先用当前的速度v更新一遍参数,在用更新的临时参数计算梯度。

3.相当于添加了矫正因子的Momentum。

4.在GD下,Nesterov将误差收敛从O(1/k),改进到O(1/k^2)

5.然而在SGD下,Nesterov并没有任何改进

具体算法如下所示: 
这里写图片描述

 

二.自适应参数的优化算法

这类算法最大的特点就是,每个参数有不同的学习率,在整个学习过程中自动适应这些学习率。

2.1AdaGrad

先上结论:

1.简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同

2.效果是:在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小)

3.缺点是,使得学习率过早,过量的减少

4.在某些模型上效果不错。

具体见算法: 
这里写图片描述

 

2.2RMSProp

先上结论

1.AdaGrad算法的改进。鉴于神经网络都是非凸条件下的,RMSProp在非凸条件下结果更好,改变梯度累积为指数衰减的移动平均以丢弃遥远的过去历史。

2.经验上,RMSProp被证明有效且实用的深度学习网络优化算法。

相比于AdaGrad的历史梯度: 

这里写图片描述

RMSProp增加了一个衰减系数来控制历史信息的获取多少: 

这里写图片描述

 


再看原始的RMSProp算法: 
这里写图片描述


再看看结合Nesterov动量的RMSProp,直观上理解就是: 
RMSProp改变了学习率,Nesterov引入动量改变了梯度,从两方面改进更新方式。 
这里写图片描述

 

2.3Adam

先上结论:

1.Adam算法可以看做是修正后的Momentum+RMSProp算法

2.动量直接并入梯度一阶矩估计中(指数加权)

3.Adam通常被认为对超参数的选择相当鲁棒

4.学习率建议为0.001

再看算法:其实就是Momentum+RMSProp的结合,然后再修正其偏差。 
这里写图片描述

 

 

 

三.二阶近似的优化算法

二阶近似作为早期处理神经网络的方法,在此并不另起blog展开细讲。

3.1牛顿法

牛顿法是基于二阶泰勒级数展开在某点附近来近似损失函数的优化方法。主要需要求得Hessian矩阵的逆。如果参数个数是k,则计算你所需的时间是O(k^3)由于在神经网络中参数个数往往是巨大的,因此牛顿法计算法消耗时间巨大。

具体更新公式如下: 

这里写图片描述

 

3.2共轭梯度法

共轭梯度(CG)是通过迭代下降的共轭方向(conjugate directions)以有效避免Hessian 矩阵求逆计算的方法。

3.3BFGS

Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法具有牛顿法的一些优点,但没有牛顿法的计算负担。在这方面,BFGS和CG 很像。然而,BFGS使用了一个更直接的方法近似牛顿更新。用矩阵Mt 近似逆,迭代地低秩更新精度以更好地近似Hessian的逆。

3.4L-BFGS

存储受限的BFGS(L-BFGS)通过避免存储完整的Hessian 逆的近似矩阵M,使得BFGS算法的存储代价显著降低。L-BFGS算

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Deep Learning Toolbox是MATLAB的一个工具箱,主要用于深度学习领域的研究与开发。该工具箱提供了各种各样的函数和算法,可以帮助用户快速构建神经网络模型、训练网络、测试网络以及应用网络。 要下载Deep Learning Toolbox,首先需要安装MATLAB。如果你还没有MATLAB,你可以在MathWorks官网上下载免费试用版或购买订阅版。一旦安装好MATLAB,就可以使用MATLAB的Addon Explorer来下载Deep Learning Toolbox。 步骤如下: 1. 打开MATLAB,点击左上角的“Addon Explorer”按钮。 2. 在Addon Explorer中搜索“Deep Learning Toolbox”。 3. 点击“Deep Learning Toolbox”图标,可以看到该工具箱的简介以及安装选项。 4. 点击“Install”按钮,等待下载和安装过程完成即可。 需要注意的是,Deep Learning Toolbox是一个收费的工具箱,如果你没有订阅版MATLAB的话,需要先购买Deep Learning Toolbox的许可证。此外,Deep Learning Toolbox对计算机硬件要求比较高,建议使用性能较强的计算机来进行深度学习的研究和开发。 ### 回答2: Deep Learning Toolbox是MATLAB提供的一套深度学习工具箱,包括了各种深度学习算法与模型,如神经网络和卷积神经网络等。用户可以使用这些模型进行分类、回归、对话、文本分析等任务。此外,该工具箱还提供了训练模型、调整网络参数、优化神经网络、验证和测试网络模型的功能。本工具箱极大地简化了深度学习的过程,无需深度学习专家的知识,甚至可以直接使用预训练模型进行迁移学习。 要下载Deep Learning Toolbox,首先需要安装MATLAB R2016b或更高版本。用户可以通过访问MathWorks网站下载并安装MATLAB,然后通过MATLAB App Store下载Deep Learning Toolbox。下载后,用户可以从应用集成界面中直接启动Deep Learning Toolbox,并随时开始操作。该工具箱不仅易于操作,还可以与各种硬件和云服务集成使用。 总之,Deep Learning Toolbox是一款功能齐全、易用便捷的深度学习工具模块,包括了各种功能强大的模型、算法和工具,可以帮助用户进行深度学习研究和应用。下载该工具箱,既可以简化深度学习的过程,又可以满足用户对不同深度学习任务的需求。 ### 回答3: Deep Learning Toolbox是Matlab中的一个工具箱,用于开发和实现深度学习算法。要下载该工具箱,首先需要安装Matlab软件。Matlab提供了一种免费的试用版本,用户可以先试用该版本,了解并体验Matlab和Deep Learning Toolbox。 下载Deep Learning Toolbox的步骤如下: 1. 打开Matlab软件,点击“Add-Ons”按钮; 2. 在“Add-On Explorer”界面中搜索“Deep Learning Toolbox”; 3. 选择“Deep Learning Toolbox”并点击“Install”按钮; 4. 等待下载和安装完成。 下载完成后,就可以在Matlab中使用Deep Learning Toolbox开发和实现深度学习算法了。用户可以通过Deep Learning Toolbox中提供的各种工具创建和训练深度神经网络,对数据进行分类、回归、聚类等处理,实现机器学习和人工智能应用。 总之,下载Deep Learning Toolbox非常简单,只需安装Matlab软件后,在Add-On Explorer中搜索并安装即可。通过使用Deep Learning Toolbox,用户可以更轻松地进行深度学习的开发和实现。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值