SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比

转载自:原文

第一节 SGD 随机梯度下降 Stochastic gradient descent

利用负梯度方向来更新权重W:



加入了动量momentum  μ后:

SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比_第1张图片


第二节 AdaDelta 

出自M. Zeiler - ADADELTA: An adaptive learning rate method.

用一阶导去估计海森矩阵的方法,但是是来源于Ada-Grad方法,具有5个优点:

1.自适应,省去了人工设定学习率的过程;

2.只用到一阶信息,计算开销小;

3.超参数不敏感性,其公式中额外增加的参数的选择对求解结果没有很大影响;

4.鲁棒性;

5.按维度分开计算学习率;

由于学习率在网络的训练过程中是应该逐渐减小的,这就是学习率的退火处理。

(1)学习率退货有两种:在合适的时候加快学习,在靠近局部最优时减慢学习。通常设计退火与迭代次数相关,因此也增加了一些权值衰减的超参数;

(2)基于一阶导的逐维学习率控制。由于启发式退火的学习率是全局学习率,而参数向量的每一维实际对学习骑着不同的作用,所以逐维学习可以抵消这种差异。引入动量(Momentum)是一种做法,Ada-Grad也可以。假设超参数平面如一条狭长的河谷,传统方法会在河谷两岸来回摆动,而加入了动量可以减轻这种摆动。Ada-Grad则是让每一维下降细化了,不会存在摆动的事情。其思想在于每一位参数遵循自己的动态变化。从梯度在训练中是递减的这样一个实际出发,我们知道当梯度变化得越多,变得越小了,说明学习进行得越久,学习率应该就越小,这样损失函数越靠近最小值。Ada-Grad对之前每次迭代的梯度做了累加,把这个累加值做分母,变化的越多就让其衰减越快。其形式:


(3)用二阶导处理,直接用海森矩阵的逆或者近似值去做。

Becker和LecCun的"Improving the convergence of back-propagation learning with second order methods"中提出了海森矩阵的对角阵方法,在普通SGD的两倍时间中求得diag(H),

Schaul的"No more pesky learning rates" 说明了完全自动选择学习率的方法,没有细看,有必要时可以再去研究。

AdeDelta 源自Ada-Grad,其重要两个思想(1)改进了Ada-Grad的梯度累加,学习率无穷小的问题;(2)近似海森矩阵。

细说(1),令,ρ是与动量相似的衰减常数。

计算均方根,因此改进了Ada-Grad,

对于(2),出发点是因为一阶计算时单位不统一,二阶计算时统一:

SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比_第2张图片

进一步定义


第三节 AdaGrad

之前第二节有顺带分析过,这个是能起到一个控制每维梯度方向的作用。

SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比_第3张图片



第四节 Adam

对于AdaGrad的泛化,其加入了:自适应时刻估计变量mt, μt 。

SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比_第4张图片


第五节 NAG

SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比_第5张图片


第六节 RMSprop

SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比_第6张图片


第四节到第六节这三个方法在体会完第二节的AdaDelta方法后,就能立刻理解了,简直小巫见大巫,但是也都有其巧妙之处。这里就摘自Caffe官方教程的中译本,谢谢Caffe社区,谢谢译本作者。

你可能感兴趣的:(SGD, AdaDelta, Ada-Grad, Adam, NAG, RMSprop 六种梯度下降方法横向对比)