神经网络梯度下降算法综述
来源:互联网 发布:文明5美丽新世界 mac 编辑:程序博客网 时间:2024/05/19 05:38
本文主要参考(大部分翻译)自论文《An Overview of Gradient Descent Optimization Algorithm》
3.Challenge
通常来说,mini-batch gradient descent算法在应用的时候,会有以下一些问题需要考虑:
1. 如何选择一个合适的学习率
2. 如何在训练的时候调整学习率
3. 所有的参数能不能不要都用相同的学习率更新
4. 如何逃避局部最优以及鞍点
4. Gradient descent optimization algorithms
下面介绍几种神经网络中常用的梯度下降方法,来解决之前第三节提到的challenge.对于那些不适用于神经网络的的方法,比如一些二阶优化的方法(牛顿法),这里就不做介绍了。
4.1. Momentum[1]
SGD在经过峡谷(navigating ravines)时候会碰到问题。这里ravine的意思是说,画出object function的等值面,那些在某些方向上的梯度很大,在其他方向上的梯度很小的地方,就叫做ravine。在这些点上,SGD算法在收敛到局部最优点的过程中容易产生振荡。如下图(a)所示:
(a)图上面靠近椭圆等值面的长轴附近的区域应该就是上面说的ravine,在这些区域短轴方向梯度比较大,长轴方向梯度比较小,在用SGD算法的时候,容易造成振荡。虽然可能也能收敛到local optimal,但是收敛的速度会比较慢。
Momentum的方法
普通SGD的梯度更新策略如下式:
加上momentum项的梯度更新策略如下式:
也就是说,当前时刻权重的变化量和当前时刻的梯度以及前一时刻的权重的变化量相关。ituitively来说,设置momentum项的原因在于,当目标函数的surface存在一个长而狭窄的vally的时候,梯度的方向几乎总是和长轴的方向垂直。系统因此不断地沿着短轴的方向在震荡,沿着长轴方向的速度很慢。而momentum项能够部分抵消当前时刻沿长轴方向的梯度分量,增大沿短轴方向的分量。这样可以加快收敛。
4.2. Nesterov accelerated gradient[2]
Nesterov accelerated gradient(NAG)的思想是,前面momentum方法里面,在还没有求当前位置梯度的情况下,其实我们是已经知道一部分权重的增量
那么我们干脆先让权重改变这么多增量,然后再求改变之后位置的梯度。具体的公式如下:
权重更新的示意图如下所示:
蓝线表示momentum的更新过程,短蓝线表示当前的梯度,长蓝线表示前一时刻的梯度增量。红线表示NAG的梯度更新过程,NAG首先根据前一时刻的梯度增量向前更新一大步,然后在新的位置计算梯度进行校正。这种方法在训练RNN的时候表现比较好。
4.3. Adagad[3]
Adagrad的思想是:对于原来不怎么更新的参数,提高它们的学习率,对于原来经常更新的参数,降低它们的学习率。我们前面介绍的梯度更新策略是对于所有的参数的学习率设置成一样。Adagrad的策略不太一样,假设
SGD对于每一个参数
Adagrad对于每一个参数的学习率设置取决的这个参数在t时刻之前梯度的累积量:
其中
4.4. Adadelta[4]
Adadelta的提出是为了解决Adagrad中参数学习率在不断衰减的问题。相比于累加t时刻之前所有的梯度平方和,Adadelta限制累加的时间范围为w。为了计算方便,Adadelta采用了decaying average的方法来计算w时长的梯度平方和。假设在t时刻梯度的平方和为
所以Adadelta的更新策略是:
注意到分母其实就是均方差RMS,因此可以把
作者在论文中提到SGD,momentum以及前面的Adagrad都存在mismatch of units。而二阶导的形式才是增量值和原值match的:
为此有
因为
有趣的是,Adadelta这么设计,可以使得它完全不需要设置base learning rate
4.5. RMSprop
RMSprop是一个未发表的,自适应调节每一个参数学习率的方法,其实就是Adadelta的一种特殊情况
4.6. Adam[5]
Adaptive Moment Esitimation(Adam)是另外一种自适应计算每一个参数学习率的方法。相比之前的Adagrad和RMSprop保存了之前时刻梯度平方的running average
接下来就是用这里的g的一阶估计量和二阶估计量替换前面方法中的对应项,如下式所示:
4.7.Visulization of algorithms
上面两张图显示了之前介绍的几种优化算法在实际应用中的情况。第一张图是各个算法在loss function surface上的更新情况。可以看到,Adagrad,Adadelta和RMSprop直接朝向最优点,momentum和NAG一开始跑偏了,但是还能纠正回来,SGD更新的很慢。
第二张图表示各个算法在应对鞍点时候的表现,可以看到,SGD一直在鞍点附近震荡,其他的算法最后都能逃离鞍点,就是速度上有快慢之分。
4.8优化方法的选择
如果输入数据是稀疏的,那么最好用之前提到的几种adaptive learning rate的方法,这些方法的另外一个好处是,没有太多需要调节的参数,仅有的几个参数保持默认值可能就能得到很好的结果。
总的来说,RMSprop是Adagrad的拓展,缓解了Adagrad学习率在不断降低的问题,它和Adadelta差不多,除了Adadelta对于分子也采用了RMS更新策略。Adam相比RMSprop,只是将
- 神经网络梯度下降算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- 梯度下降优化算法综述
- BP神经网络梯度下降算法
- 梯度下降优化算法综述(翻译)
- 梯度下降优化算法综述(转载)
- 如何实现按两次退出的效果
- Semaphore详解2
- Update Arch Linux ARM on Raspberry 3 Model B
- 【python实验报告】用urllib来爬取网站页面中的图片和视频
- Android AIDL实例
- 神经网络梯度下降算法综述
- 神经网络在tensorflow的简单应用
- leetcode [Intersection of Two Linked Lists]//待整理多种解法
- linux常用命令
- 每一个有理想的程序员都应该读的一本书-《rework》
- 算法设计与应用基础:第六周
- rabbitmq的用户管理
- JSP九大内置对象
- 【Leetcode】Jump Game