优化算法 - 特点

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

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

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

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

-SGD

SGD实际就是min-batch的实现,为最基础的优化算法,当今大部分优化算法都是以SGD为基础实现的。详见 Deep Learning 最优化方法之SGD

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

  • Momentum
Momentum引入了动量v,以指数衰减的形式累计历史梯度,以此来解决Hessian矩阵病态问题 

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

2.加速学习

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

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

指数衰减平均, 以alpha为衰减力度,alpha越大,之前梯度对现在方向的影响也越大

$v \gets \alpha v - \epsilon g$

$\eta \gets \frac{ \epsilon \lVert g \rVert }{1-\alpha}$

  • Nesterov(牛顿动量)
Nesterov是对Momentum的变种。与Momentum不同的是,Nesterov先更新参数,再计算梯度 

1.Nesterov是Momentum的变种。

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

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

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

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

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

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

  • AdaGrad
学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同 

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

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

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

4.在某些模型上效果不错。
Karpathy做了一个这几个方法在MNIST上性能的比较,其结论是:
adagrad相比于sgd和momentum更加稳定,即不需要怎么调参。而精调的sgd和momentum系列方法无论是收敛速度还是precision都比adagrad要好一些。在精调参数下,一般Nesterov优于momentum优于sgd。而adagrad一方面不用怎么调参,另一方面其性能稳定优于其他方法。

  • RMSProp
AdaGrad算法的改进。
历史梯度平方和—>指数衰减的移动平均,以此丢弃遥远的过去历史。 

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

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

相比于AdaGrad的历史梯度: 

$r \gets r + g \odot g$

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

$r \gets \rho r + (1 - \rho) g \odot g$

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

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

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

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

4.学习率建议为0.001
算法8.7 Adam算法
Require:步长ε (建议默认为: 0.001 )
Require:矩估计的指数衰减速率,ρ1和ρ2在区间[0,1)内。( 建议默认为:分别:
为0.9和0.999)
Require:用于数值稳定的小常数δ ( 建议默认为: 10-8)
Require:初始参数θ
初始化- -阶和二阶矩变量s=0, r=0
初始化时间步t= 0
while没有达到停止准则do
从训练集中采包含m个样本{.).....},的小批量,对应目标为yi。
计算梯度: g←VoZ; L(f(x();0), y(
n
t←t+1
更新有偏一阶矩估计: s←p18+(1- A
P1)9
Momentum项
更新有偏二阶矩估计: r←pr+(1-ρ2)[email protected] 9RMSProp项
修正一阶矩的偏差: 8←
修正二阶矩的偏差:分←E
计算更新: 0θ=-∈房。
(逐元素应用操作)
应用更新: θ←θ+ Oθ
end while

二阶近似的优化算法

  • 牛顿法
牛顿法是基于二阶泰勒级数展开在某点附近来近似损失函数的优化方法。主要需要求得Hessian矩阵的逆。如果参数个数是k,则计算你所需的时间是O(k^3)由于在神经网络中参数个数往往是巨大的,因此牛顿法计算法消耗时间巨大。
  • 共轭梯度法
共轭梯度(CG)是通过迭代下降的共轭方向(conjugate directions)以有效避免Hessian 矩阵求逆计算的方法。
  • BFGS
Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法具有牛顿法的一些优点,但没有牛顿法的计算负担。在这方面,BFGS和CG 很像。然而,BFGS使用了一个更直接的方法近似牛顿更新。用矩阵Mt 近似逆,迭代地低秩更新精度以更好地近似Hessian的逆。
  • LBFGS
存储受限的BFGS(L-BFGS)通过避免存储完整的Hessian 逆的近似矩阵M,使得BFGS算法的存储代价显著降低。L-BFGS算法使用和BFGS算法相同的方法计算M的近似,但起始假设是M^(t-1) 是单位矩阵,而不是一步一步都要存储近似。

原文地址:https://www.cnblogs.com/suanec/p/11231638.html

时间: 2024-10-10 13:38:31

优化算法 - 特点的相关文章

深度解读最流行的优化算法:梯度下降

深度解读最流行的优化算法:梯度下降 By 机器之心2016年11月21日 15:08 梯度下降法,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法.本文旨在让你对不同的优化梯度下降法的算法有一个直观认识,以帮助你使用这些算法.我们首先会考察梯度下降法的各种变体,然后会简要地总结在训练(神经网络或是机器学习算法)的过程中可能遇到的挑战.(本文的中文版 PDF 下载地址) 目录: 梯度下降的各种变体 批量梯度下降(Batch gradient descent)

粒子群优化算法

2011-12-05 19:49:55 标签:群智能 休闲 蚁群优化 粒群优化 粒子群优化 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://nxlhero.blog.51cto.com/962631/734212 粒子群优化算法属于群智能(swarm intelligence)优化算法.群智能分两种,一种是粒群优化,另一种是蚁群优化. 群智能概念 假设你和你的朋友正在寻宝,每个人有个探测器,这个探测器可以知道宝藏到探测器的距离

量子粒子群优化算法

参考文献: 量子行为粒子群优化算法研究[D] ,孙俊,博士论文2.4节. #include <iostream> #include <math.h> #include <time.h> using namespace std; #define M 50 //群体数目50 #define N 4 //每个粒子的维数4 //测试类 class TestFunction { public: double resen(double x1,double x2,double x3,

基本粒子群优化算法(PSO)的matlab实现

粒子群优化算法是一种模拟鸟群社会行为的群体搜素算法.它分为全局最佳粒子优化和局部最佳粒子优化,对于全局最佳PSO,或者叫做gbest PSO,每个粒子的邻域都是整个群,其算法伪代码如下: 创建并初始化一个n维的粒子群 repeat for 每个粒子i=1,2,-n do //设置个体最佳位置 if f(i)<y then y=f(i); end //设置全局最佳位置 if y<Y then Y=y; end end for 每个粒子i=1,2,-n do 用速度方程更新速度 用位置方程更新位置

优化算法——拟牛顿法之DFP算法

一.牛顿法 在博文"优化算法--牛顿法(Newton Method)"中介绍了牛顿法的思路,牛顿法具有二阶收敛性,相比较最速下降法,收敛的速度更快.在牛顿法中使用到了函数的二阶导数的信息,对于函数,其中表示向量.在牛顿法的求解过程中,首先是将函数在处展开,展开式为: 其中,,表示的是目标函数在的梯度,是一个向量.,表示的是目标函数在处的Hesse矩阵.省略掉最后面的高阶无穷小项,即为: 上式两边对求导,即为: 在基本牛顿法中,取得最值的点处的导数值为,即上式左侧为.则: 求出其中的:

性能优化——算法优化

背景 由于某种原因,我们系统需要记录另一个系统中一个表里的id.但是,当我们记录完了以后,别人系统可能会删除那个表里的一些数据,这样的话,我们这边就多了一些无效数据,所以,我们必须的找到这些无效的id,然后将其删除. 开始,我们的实现是这样:我们将记录下来的所有id放在一个list里,然后传到另一个系统,他将他们已经删除的id返回.具体处理代码如下: <pre name="code" class="java">public String findDele

细菌觅食优化算法:理论基础,分析,以及应用(未完)

原作者:Swagatam Das,Arijit Biswas,Sambarta Dasgupta,和Ajith Abraham  [摘 要]细菌觅食优化算法(Bacterial foraging optimization algorithm[BFOA])已经被分布式优化和控制的同行们当作一种全局性的优化算法接受.BFOA是由大肠杆菌的群体觅食行为所启发而总结出来 的.BFOA已经吸引了足够多的研究者的注意,由于它出现在解决真实世界中一些应用领域上优化问题的高效性.E.coli 的群体策略的生物基

启发式优化算法

Xin-She Yang (可能音译:杨新社)是一个国际知名学者,他在剑桥大学创新的启发式优化算法包括:萤火虫算法(2008年).布谷鸟搜索算法(2009)和蝙蝠算法(2010).他是英国国家物理实验室的高级研究科学家.

百钱百鸡,用高中数学优化算法

背景介绍 学习算法的道路上总会有各种各样的感受,偶然间碰到一个源自我国的算法问题,百钱百鸡问题,貌似很经典的问题了,可是我才刚刚知道,感觉自己太LOW了.题目是出自古代的一本叫做算经的书,原文是文言文就不往出贴了,贴了也看不懂,说大家能听懂的话就是: 有公鸡,母鸡,小鸡三种鸡,公鸡5块钱一只,母鸡三块钱一只,小鸡一块钱三只,要求用一百块钱买上面三种鸡(都要有),并且三种鸡总数是一百只,要求所有的解法. 分析 在感叹古人物价的同时,思考题目,其实很简单,只需要满足两个条件: 公鸡 + 母鸡 + 小

机器学习优化算法之爬山算法小结

简言 机器学习的项目,不可避免的需要补充一些优化算法,对于优化算法,爬山算法还是比较重要的.鉴于此,花了些时间仔细阅读了些爬山算法的paper.基于这些,做一些总结. 目录 1. 爬山算法简单描述  2. 爬山算法的主要算法 2.1 首选爬山算法 2.2 最陡爬山算法 2.3 随机重新开始爬山算法 2.4 模拟退火算法(也是爬山算法) 3. 实例求解 正文 爬山算法,是一种局部贪心的最优算法. 该算法的主要思想是:每次拿相邻点与当前点进行比对,取两者中较优者,作为爬坡的下一步. 举一个例子,求解