SGD,Momentum,AdaGrad,RMSProp,Adam等优化算法发展历程
2018-03-06 16:42
603 查看
各种优化算法层出不穷,看的眼花缭乱,如果不能理清楚其中他们的关系及发展历程,必然会记得很混乱及模糊
最开始做神经网络的时候大家更新参数的时候都是把所有数据计算一遍,求所以数据的平均梯度再进行参数调节,后来觉得这样太慢了,干脆就计算一条数据就调节一次,这就叫随机梯度下降了(SGD),随机两字的由来是因为每条数据可能调节的方向都不一样,下降的过程会很震荡。
这都是两个极端,后来就干脆折中一点,MIni batch进行一次调整,就是算出来了一个批次后调整一次,就是批梯度下降了。
然后可以想象一个石头落下山的时候肯定中间会收到阻力,忽而慢、忽而快,在我们这里就好比如,如果前面的批次都是朝着一个方向进行调整,突然有个异常数据方向完全相反或又差异,岂不是一种干扰,辛辛苦苦调整了半天又回去了,这个时候一个大神就想到了物理里面的动量,模拟石头下山的一个过程,一路顺畅则越下越快,有阻碍则减速,这就是动量下降法(Momentum)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/c943483e35b07242af3328548020266f)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/59a64737453b27f48809b282e7792a37)
但是如果都是一路顺畅,会下降的过快,在达到终点的时候可能会溢出,所以又改进了一点产生了牛顿动量法(Nesterov),其核心思想是:注意到
momentum 方法,如果只看
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/705c8ec0052d9c9ad24b55701c09e040)
项,那么当前的 θ经过 momentum 的作用会变成
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/4121c849b2501d98d6a4970983d54f9a)
。因此可以把
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/4121c849b2501d98d6a4970983d54f9a)
这个位置看做是当前优化的一个”展望”位置。所以,可以在
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/4121c849b2501d98d6a4970983d54f9a)
处求导, 而不是原始的θ。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/c13f6cfa4392582c74f81b89e361d597)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/8b83d67970d28704bfc63120c1dee79e)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/31cb131b23b5d67cd0cce1bd17ce134a)
在约束完梯度后,就开始对学习率进行改进了
AdaGrad 对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/774f46aa46527f0547697b47e4be4074)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/ca6332b82ddc44f26ed45e8efc08e8fe)
随着训练次数的增加
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/565002f3230217cf137f30f16d4fdaa6)
会越来越大,到后面会出现学习率为0的问题。为了使学习率下降的慢点,提出了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/8324fc18821a54deb19c6343749f4308)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/b34b4eef2bda17530dd431fb4f4a55c4)
前面是对梯度进行调节,后面是对学习率进行约束,把两者相结合就产生了Adam算法了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/3646eaaf15330828ca5c92a5914e0c95)
其中,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/cc6b8127cfa8d11637fe7b1977eef92c)
,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/99e6366b4054c0ff5f22d6ca536db14b)
分别是对梯度的一阶矩估计和二阶矩估计,可以看作对期望
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/6655ef410b16740817441dd22dd9d1f0)
,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/e196712f093b7743ce99ca62ca9fcb84)
的估计;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/5c5c3a2a2c4a04aa637a8d20b05e1db5)
,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/79f9621811240448f8c4fc0e0c538d08)
是对
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/cc6b8127cfa8d11637fe7b1977eef92c)
,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/99e6366b4054c0ff5f22d6ca536db14b)
的校正,这样可以近似为对期望的无偏估计,为什么要进行这么一个无偏估计呢,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/eb35a81041a0ff00ca283ca6373a9f2e)
是
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/92af7fbdbd580ab3f2c5be5384c36987)
求均值,为什么说是无偏估计呢,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/06/bd21381bfa295f2200fc8b259ae19530)
本身就是一种估计,估计了很多回以后,它本身也有一个分布,对它求均值,就基本上认为是准确的了,所以叫无偏估计。
最开始做神经网络的时候大家更新参数的时候都是把所有数据计算一遍,求所以数据的平均梯度再进行参数调节,后来觉得这样太慢了,干脆就计算一条数据就调节一次,这就叫随机梯度下降了(SGD),随机两字的由来是因为每条数据可能调节的方向都不一样,下降的过程会很震荡。
这都是两个极端,后来就干脆折中一点,MIni batch进行一次调整,就是算出来了一个批次后调整一次,就是批梯度下降了。
然后可以想象一个石头落下山的时候肯定中间会收到阻力,忽而慢、忽而快,在我们这里就好比如,如果前面的批次都是朝着一个方向进行调整,突然有个异常数据方向完全相反或又差异,岂不是一种干扰,辛辛苦苦调整了半天又回去了,这个时候一个大神就想到了物理里面的动量,模拟石头下山的一个过程,一路顺畅则越下越快,有阻碍则减速,这就是动量下降法(Momentum)
但是如果都是一路顺畅,会下降的过快,在达到终点的时候可能会溢出,所以又改进了一点产生了牛顿动量法(Nesterov),其核心思想是:注意到
momentum 方法,如果只看
项,那么当前的 θ经过 momentum 的作用会变成
。因此可以把
这个位置看做是当前优化的一个”展望”位置。所以,可以在
处求导, 而不是原始的θ。
在约束完梯度后,就开始对学习率进行改进了
AdaGrad 对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。
随着训练次数的增加
会越来越大,到后面会出现学习率为0的问题。为了使学习率下降的慢点,提出了
RMSprop算法 AdaGrad 是学习率除以梯度的平方和开根号,RMs则变为了求梯度平方和的平均数开根号(均方根)
前面是对梯度进行调节,后面是对学习率进行约束,把两者相结合就产生了Adam算法了
其中,
,
分别是对梯度的一阶矩估计和二阶矩估计,可以看作对期望
,
的估计;
,
是对
,
的校正,这样可以近似为对期望的无偏估计,为什么要进行这么一个无偏估计呢,
是
求均值,为什么说是无偏估计呢,
本身就是一种估计,估计了很多回以后,它本身也有一个分布,对它求均值,就基本上认为是准确的了,所以叫无偏估计。
相关文章推荐
- CS231n课程笔记6.1:优化迭代算法之SGD,Momentum,Netsterov Momentum,AdaGrad,RMSprop,Adam
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 神经网络优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam
- 优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 转:深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 梯度下降与优化方法(BGD & SGD & Momentum & AdaGrad & RMSProp & Adam)
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
- 深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
- CS231n作业笔记2.3:优化算法Momentum, RMSProp, Adam
- 【深度学习】深入理解优化器Optimizer算法(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
- 深度学习之momentum,RMSprop,Adam优化算法
- 【deeplearning.ai笔记第二课】2.2 优化算法(动量梯度下降,RMSprop,adam)
- SGD、Momentum、RMSprop、Adam区别与联系
- 各种优化方法总结比較(sgd/momentum/Nesterov/adagrad/adadelta)
- 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
- SGD,Adagrad,Adadelta,Adam等优化方法总结和比较