基于牛顿算法下的steffensen加速法_神经网络优化算法总结

前言


极大似然,反向传播,梯度下降
这仨都不了解的话,不要继续往下看了,搞懂了再来看。这些内容细写起来都是很长的。
推荐学习顺序 概率论(频率学派和贝叶斯区别搞清楚)->lr,softmax(极大似然)->反向传播。(极大似然从概率图来切入更深刻,lr这种判别式直接给定义的,理解很难深刻)

1 优化算法是什么


拿lr举例,极大似然公式如下

3b13f52f6956053553be4fefdb7d6e99.png

086434ea14fbe31edb6823fd72ded113.png


极大似然是把问题建模为概率分布P(w,b|x,y)(联合概率就是生成,条件概率就是判别式),也就是我们天天说的cost function(当然cost function也是可以写一篇文章的)。
所以,找到w,b让P(w,b|x,y)为极大值,(当然最小二乘就是极小值)的算法就是优化算法。

2 batch

2.1 batch是啥
拿lr的极大似然举例,如下为梯度的公式

b24440eb07fb3f8f262d3e317be50109.png


很明显,梯度需要所有样本来计算
现在神经网络动不动上百万训练样本,迭代一次计算量太夸张。
现在的主流方案就是一次取n(0<n<<N)个来计算,也就是我们天天说的batch。

2.2 为何能收敛
我们每次只取了一小部分样本,且训练样本中,往往noisy不少,计算的梯度是真的是全局最优,真的能收敛?
首先,收敛是在一定条件下才能收敛,而不是无条件收敛。(需要合理的学习率和batch大小)
具体的数学证明谁有兴趣就自己推吧,参看这三篇文章https://people.eecs.berkeley.edu/~brecht/cs294docs/week1/09.Nemirovski.pdfhttps://arxiv.org/abs/1606.04838https://www.zhihu.com/question/27012077/answer/122946984

2.3 碰到的问题(主要针对一阶求导)2.3.1 学习率的选择
随机取n个,计算的梯度往往不是最佳梯度。所以,学习率一旦过大,加上梯度本来就不是很准,会导致最终在极值点来回波动。2.3.2 不同的参数学习率往往不同
如上,最佳的学习率,不同的情况下,往往不一样,这就带来了一个问题,每次我们都要大量迭代来寻找一个最优学习率。2.3.3 很容陷入局部最小值
特别对于非凸问题,陷入局部最优就出不来了

3 无导数优化算法


这里简单提一嘴,业界主流都是对cost function一阶求导,然后梯度下降来找极值点。但事实上还是有无导数优化方法的。3.1 选点法 蒙特卡洛方法,黄金切割等3.2 子空间迭代法,如 JFNK算法等3.3 智能优选方法,如模拟退火,粒子群,遗传算法

4 一阶导数优化方法

顾名思义,对cost function求导,然后朝着梯度的方向前进。4.1 梯度下降法 (业界主流,也是本篇文章重点)
方法如下,看起来很多,但抽象起来也就几种,这里重点介绍和adam相关的算法(因为这种算法大部分情况下用起来效果最好)

6a3f5e5542f9009b5f5c54b84a6c7e38.png


所有的方法都是基于如下公式来优化的,这个公式我就不介绍内容了,看不懂参看前言。

7d51f7df9c2739914a291df994420f9e.png

4.1.1 动量(Momentum)——exponential moving average

c09010ac1b2f7da7551995d192c33518.png

a33128c72af6ee08680e8d0b74ca2f83.png


从公式可以看到,这个方法是用历史积累的梯度和现在的梯度来更新。
当β=0,基础公式没啥区别了。β常用的取值为0.9
优点——sgd往往计算的梯度不是全局最优,且因为noisy的存在,梯度甚至会跟最优梯度有很大差距,导致震荡。考虑历史积累的梯度能保证迭代的平缓。

缺点——很明显,学习率还是需要我们自己设定初始值

4.1.2 Adagrad

0c590742e6deefacaf389a8378f42bbf.png

96229c303b4022bc8e2b7db7b36d9c46.png


S初始化为0,

= 0.001,
=0.9,
=10⁻⁶

很明显,一开始S值较小,学习率高,随着迭代S累积值越大,学习率变得越来越小。以及用平方(二阶矩类似L2,L2能够对数值起到平滑的效果) 优点——快速接近极值点。迭代多了梯度开始变小,此时理论上已经接近极值点了,小学习率更能找到极值点。 问题——什么时候理论上接近极值点不可控,可能离极值点很远,学习率已经衰减的的非常厉害了
这里不介绍的两种优化方法,窗口方和牛顿法 https:// blog.csdn.net/XiangJiao Jun_/article/details/83960136

4.1.3 RMSprop
针对Adagrad的问题的优化,公式如下

f7c822c8eac1a1be2ab5c3cc3b8a853b.png

fe3198fd7caa82dbbed3b5e2d6896323.png

核心区别在于S不是累加而是借鉴了动量的思路,S的波动更合理

4.1.4 Adam
adam是对RMSprop和Momentum的一个结合,公式如下。

b21c0c46a5732ba6898268fc57fc6063.png

90bf611947056995afa45e5b6409f0cc.png

cdcbef3a534d5ab1c7a21736e175f7d8.png


优点自然是结合了两种算法的优点,V和S都初始化为0,

= 0.001,
=0.9,
=0.999,
=10⁻⁸。

4.1.4 Nesterov梯度加速法
与Momentum类似,但使用的V为投影梯度(projected gradients)的exponential moving average。
具体细节自己了解吧——
[On the importance of initialization and momentum in deep learning](On the importance of initialization and momentum in deep learning)

4.1.5 LAMB

467cd8a0ddcd542c9ba300815b2952e1.png

这个算法的提出的是针对大batch的训练的优化方案,有多大。google用这个算法从512扩展到65536.

以及,你肯定忍不住想问个问题,扩大batch会导致什么问题,导致需要针对大batch做一个算法。

这里有两篇paper研究过。

第一,如果batch过小,那么肯定batch之间的梯度差别很大,会导致不利于收敛。但是如果batch过大,每次梯度差别不大,一路就到最底部了,看着很好,但这样容易陷入局部最优。

第二,我们的训练样本量级是固定的,batch大了自然步数就变小了,且这个时候learning rate还更准了。所以下降的梯度整体变少了。

详情参看这个回答——https://www.zhihu.com/question/32673260/answer/675161450

特别链式传播,越是底层,往往梯度越小(因为连续乘,梯度消失)。所以,lamb在adam的基础上,还考虑了当前优化的参数的信息。

https://zhuanlan.zhihu.com/p/86529347

4.2 坐标下降法随机梯度下降法等,对于大规模问题减小梯度法的计算量

4.3 次梯度法,次梯度投影法等,用于次可微函数

4.4 拟牛顿法,PFP法,BFGS法,L-BFGS法等,近似Hessian矩阵减少计算量,用于大规模问题

4.5 共轭梯度法,复杂度只有O(n),用于大规模问题

4.6 椭球法,用于拟凸函数问题

4.7 罚函数法拉格朗日乘子法,把约束条件当做惩罚项或考虑鞍点问题,用于约束优化问题

5 二阶导数优化方法


不常用,因为二阶导数算起来麻烦,不过有模拟二阶算法的思路。
5.1 牛顿法
5.2 序列二次规划法(SQP),用于约束优化问题
5.3 内点法,用于约束优化问题,也有内点法属于一阶优化算法

6 其他(机器学习不常见的传统优化领域算法)


6.1 信赖域法,与以上的线搜索方法不同的思路
6.2 线性规划方法,单纯形法,最大流与最小割算法
6.3 半定规划方法(SDP),与上述算法有很多结合
6.4 组合优化方法
6.5 量子优化方法,量子退火,量子半定规划(QSDP),量子逼近优化算法(QAOA)
结论,可以看到优化算法非常多,但实际上深度学习用的就那么一小块内容。并且公式其实也很简单。

参考文章

什么是梯度下降法? - 陈琛的回答 - 知乎 https://www.zhihu.com/question/305638940/answer/770984541
一文看懂各种神经网络优化算法:从梯度下降到Adam方法 - 量子学园的文章 - 知乎 https://zhuanlan.zhihu.com/p/27449596

机器学习与运筹优化(七)常见优化算法小结 - 量子星图-蜜汁酱的文章 - 知乎 https://zhuanlan.zhihu.com/p/43909822

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值