深度学习之optimizer 优化方法

BGD

batch gradient descent,batch梯度下降。在训练中,每一步迭代都使用训练集的所有内容。用全量数据集去计算梯度,迭代参数。

优点: 
由于每一步都利用了训练集中的所有数据,因此当损失函数达到最小值以后,能够保证此时计算出的梯度为0,换句话说,就是能够收敛.因此,使用BGD时不需要逐渐减小学习速率

缺点: 
由于每一步都要使用所有数据,因此随着数据集的增大,运行速度会越来越慢.

SGD

stochastic gradient descent, 即随机梯度下降。随机抽取一批样本,用于迭代参数。

优点: 

训练速度快,参数收敛快。

缺点: 

抽样数据,计算的梯度有噪,所以学习速率最好逐渐减小。

一般采用线下衰减学习速率:

 

其中ϵ0是初始学习率, ϵτ是最后一次迭代的学习率. τ自然代表迭代次数.一般来说,ϵτ 设为ϵ0的1%比较合适.而τ一般设为让训练集中的每个数据都输入模型上百次比较合适.那么初始学习率ϵ0怎么设置呢?书上说,你先用固定的学习速率迭代100次,找出效果最好的学习速率,然后ϵ0设为比它大一点就可以了.

Momentum

即冲量or动量,前几次的梯度也会参与运算.为了表示动量,引入了一个新的变量v(velocity).v是之前的梯度的累加,但是每回合都有一定的衰减.。Momentum方法可以比较好的缓解,每次迭代计算的梯度含有比较大噪音的问题,尤其是在面对小而连续的梯度但是含有很多噪声的时候,可以很好的加速学习。

优点: 

前后梯度方向一致时,能够加速学习 
前后梯度方向不一致时,能够抑制震荡

Nesterov Momentum

对之前的Momentum的一种改进,大概思路就是,先对参数进行估计,然后使用估计后的参数来计算误差。

AdaGrad

AdaGrad可以自动变更学习速率,只是需要设定一个全局的学习速率ϵ,但是这并非是实际学习速率,实际的速率是与以往参数的模之和的开方成反比的。

优点: 
能够实现学习率的自动更改。如果这次梯度大,那么学习速率衰减的就快一些;如果这次梯度小,那么学习速率衰减的就满一些。

缺点: 
任然要设置一个变量ϵ 
经验表明,在普通算法中也许效果不错,但在深度学习中,深度过深时会造成训练提前结束。

RMSProp

RMSProp通过引入一个衰减系数,让r每回合都衰减一定比例。

优点: 
相比于AdaGrad,这种方法很好的解决了深度学习中过早结束的问题 
适合处理非平稳目标,对于RNN效果很好

缺点: 
又引入了新的超参,衰减系数ρ 
依然依赖于全局学习速率

RMSProp with Nesterov Momentum

将RMSProp和Nesterov Momentum结合起来的,先对参数进行估计,然后使用估计后的参数来计算误差。

Adam

Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

 

posted on 2017-08-08 19:51  csw_trying  阅读(255)  评论(0编辑  收藏  举报

导航