Deep Learning 之 最优化方法

2017年05月21日 22:18:40

阅读数:5910

写在前面本文主要是对Deep Learning一书最优化方法的总结,具体详细的算法,另起博文展开。

整个优化系列文章列表:

Deep Learning 之 最优化方法

Deep Learning 最优化方法之SGD

Deep Learning 最优化方法之Momentum(动量)

Deep Learning 最优化方法之Nesterov(牛顿动量)

Deep Learning 最优化方法之AdaGrad

Deep Learning 最优化方法之RMSProp

Deep Learning 最优化方法之Adam

深度学习中,经常需要用到优化方法,来寻找使得损失函数最小的最优解。

先上一些结论:

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

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

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

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

在这里将这些优化方法分为三类,详见对应的blog:

一.最基本的优化算法

1.1SGD

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

1.2Momentum(动量)

Momentum引入了动量v,以指数衰减的形式累计历史梯度,以此来解决Hessian矩阵病态问题
详见Deep Learning 最优化方法之Momentum(动量)

1.3Nesterov(牛顿动量)

Nesterov是对Momentum的变种。与Momentum不同的是,Nesterov先更新参数,再计算梯度
详见Deep Learning 最优化方法之Nesterov(牛顿动量)

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

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

2.1AdaGrad

学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同
详见Deep Learning 最优化方法之AdaGrad

2.2RMSProp

AdaGrad算法的改进。
历史梯度平方和—>指数衰减的移动平均,以此丢弃遥远的过去历史。
详见Deep Learning 最优化方法之RMSProp

2.3Adam

Adam算法可以看做是修正后的Momentum+RMSProp算法
详见Deep Learning 最优化方法之Adam

三.二阶近似的优化算法

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

3.1牛顿法

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

具体更新公式如下:

3.2共轭梯度法

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

3.3BFGS

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

3.4L-BFGS

存储受限的BFGS(L-BFGS)通过避免存储完整的Hessian 逆的近似矩阵M,使得BFGS算法的存储代价显著降低。L-BFGS算法使用和BFGS算法相同的方法计算M的近似,但起始假设是M^(t-1) 是单位矩阵,而不是一步一步都要存储近似。
  • 1
  • 2
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BVL10101111/article/details/72614711

最新文章

  1. 解决报错 ora-00704 ora-00604 ora-00942 启动不了数据库问题
  2. ORACLE 自动增长通过封装函数,方便调用
  3. 如何自行处理写好的eclipse插件安装不生效
  4. gridview自定义排序
  5. cat hesA/Models/score_tgt.sc| awk '{ print $2,$19}' | sort -n -k 1
  6. LayoutTransition实现显示、隐藏动画
  7. 5月18日 HTML 个人简历
  8. Socket连接
  9. CoreGraphics之CGContext绘图
  10. 关于javascript
  11. js 非IE火狐插件检测
  12. __autoload函数
  13. Xamarin.Forms(一) Visual Studio 连接安卓模拟器(逍遥安卓)
  14. /MD、/MT、/LD( 使用 多线程版本 运行时库的C runtime library)
  15. Windows添加.NET Framework 3.0 NetFx3 失败 - 状态为:0x800f0950
  16. scrapy流程图
  17. swift 字体自适应,宽高自适应
  18. eclipse查看方法被那些代码调用open call hierarchy
  19. POJ 1011 Sticks(dfs+剪枝)
  20. MOD13A1: MODIS/Terra Vegetation Indices 16-Day L3 Global 500 m SIN Grid V006

热门文章

  1. hdu-2197 本原串---枚举因子+容斥定理
  2. Android(java)学习笔记7:多线程程序练习
  3. LA 4987 背包
  4. 百度提供的LBS服务
  5. eclipse properties 文件查看和编辑插件
  6. axios简单了解
  7. Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作
  8. 12 个强大的 Chrome 插件扩展
  9. html基础用法(上)
  10. 2017-09-26 发布 SpringBoot多模块项目实践(Multi-Module)