Stochastic Gradient Descent (SGD)

SGD的参数

在使用随机梯度下降(SGD)的学习方法时,一般来说有以下几个可供调节的参数:

  • Learning Rate 学习率
  • Weight Decay 权值衰减
  • Momentum 动量
  • Learning Rate Decay 学习率衰减

再此之中只有第一的参数(Learning Rate)是必须的,其余部分都是为了提高自适应性的参数,也就是说后3个参数不需要时可以设为0。

Learning Rate

学习率决定了权值更新的速度,设置得太大会使结果越过最优值,太小会使下降速度过慢。仅靠人为干预调整参数需要不断修改学习率,因此后面3种参数都是基于自适应的思路提出的解决方案。

wi←wi−η∂E∂wi

Weight decay

在实际运用中,为了避免模型的over-fitting,需要对cost function加入规范项,在SGD中我们加入−ηλwi这一项来对cost function进行规范化。

wi←wi−η∂E∂wi−ηλwi

这个公式的基本思路是减小不重要的参数对结果的影响,而有用的权重则不会受到Weight decay的影响,这种思路与Dropout的思路原理上十分相似。

Link 1
Link 2

Learning Rate Decay

一种提高SGD寻优能力的方法,具体做法是每次迭代减小学习率的大小。

  • initial learning rate η=η0
  • learning rate decay ηd
  • At each iteration s:
η(s)=η01+s⋅ηd

在许多论文中,另一种比较常见的方法是迭代30-50次左右直接对学习率进行操作(η←0.5⋅η)

Momentum

灵感来自于牛顿第一定律,基本思路是为寻优加入了“惯性”的影响,这样一来,当误差曲面中存在平坦区SGD可以一更快的速度学习。

wi←m⋅wi−η∂E∂wi

注意:这里的表示方法并没有统一的规定,这里只是其中一种

Link 1
Link 2
Link 3
Link 4

SGD优缺点

  • 实现简单,当训练样本足够多时优化速度非常快
  • 需要人为调整很多参数,比如学习率,收敛准则等

Averaged Stochastic Gradient Descent (ASGD)

在SGD的基础上计算了权值的平均值。
$$\bar{w}t=\frac{1}{t-t_0}\sum^t{i=t_0+1} w_t$$

ASGD的参数

在SGD的基础上增加参数t0

  • 学习率 η
  • 参数 t0

ASGD优缺点

  • 运算花费和second order stochastic gradient descent (2SGD)一样小。
  • 比SGD的训练速度更为缓慢。
  • t0的设置十分困难

Link 1

3. Conjugate Gradient(共轭梯度法)

介于最速下降法与牛顿法之间的一个方法,它仅仅需要利用一阶导数的信息,克服了GD方法收敛慢的特点。

Link 1

Limited-memory Broyden-Fletcher-Goldfarb-Shanno (LBFGS) (一种拟牛顿算法)

L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源。

Link 1
Link 2
Link 3

应用分析

不同的优化算法有不同的优缺点,适合不同的场合:

  • LBFGS算法在参数的维度比较低(一般指小于10000维)时的效果要比SGD(随机梯度下降)和CG(共轭梯度下降)效果好,特别是带有convolution的模型。
  • 针对高维的参数问题,CG的效果要比另2种好。也就是说一般情况下,SGD的效果要差一些,这种情况在使用GPU加速时情况一样,即在GPU上使用LBFGS和CG时,优化速度明显加快,而SGD算法优化速度提高很小。
  • 在单核处理器上,LBFGS的优势主要是利用参数之间的2阶近视特性来加速优化,而CG则得得益于参数之间的共轭信息,需要计算器Hessian矩阵。

Link 1

最新文章

  1. vue.js 接收url参数
  2. 上传图片shell绕过过滤的几种方法
  3. git 找回丢失的commit
  4. Codeforces 566 D. Restructuring Company
  5. MBean的学习
  6. [leetcode]_K Sum 问题
  7. Activity 的启动模式
  8. C++学习笔记-1-自增和自减运算符
  9. 静默安装ORACLE【weber出品必属精品】
  10. 【读书笔记】A Swift Tour
  11. Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信
  12. 手机端input[type=date]的placeholder不起作用
  13. web框架开发-路由控制
  14. php函数 array_combine
  15. oracle 11g log archive mode flashback
  16. 常用的 composer 命令
  17. excel2007自定义菜单项学习
  18. 使用Python的turtle(海龟)模块画图
  19. Ubuntu局域网下利用client联网
  20. 【代码审计】CmsEasy_v5.7 代码执行漏洞分析

热门文章

  1. Angular输入框内按下回车会触发其它button的点击事件的解决方法
  2. 原生 Ajax 封装 和 Axios 二次 封装
  3. Collection、泛型
  4. 求第 i 个素数 Meissel Lehmer Algorithm + 二分 【模板】
  5. Anniversary party (树形DP)
  6. 使用gulp构建工具
  7. OkHttp工具类
  8. java程序中路径问题
  9. POI 博客总结.....
  10. 禁止Asp.Net WebService 的Test页面功能