多层全连接神经网络(六)---各种优化算法的变式

梯度下降算法原理此处不做过多说明

梯度下降法的变式

1. SGD

        随机梯度下降法是梯度下降法的一个小变形,就是每次使用一批(batch)数据进行梯度的计算,而不是计算全部数据的梯度,因为现在深度学习的数据量都特别大,所以每次都计算所有数据的梯度是不现实的,这样会导致运算时间特别长,同时每次都计算全部的梯度还失去了一些随机性,容易陷入局部误差,所以使用随机梯度下降法可能每次都不是朝着真正最小的方向,但是这样反而容易跳出局部极小点。

2. Momentum

        第二种优化方法就是在随机梯度下降的同时,增加动量(Momentum)。这来自于物理中的概念,可以想象损失函数是一个山谷,一个球从山谷滑下来,在一个平坦的地势,球的滑动速度就会慢下来,可能陷入一些鞍点或者局部极小值点,如图3.22所示。

        这个时候给它增加动量就可以让它从高处滑落时的势能转换为平地的动能,相当于惯性增加了小球在平地滑动的速度,从而帮助其跳出鞍点或者局部极小点 。

        动量怎么计算呢?动量的计算基于前面梯度,也就是说参数更新不仅仅基于当前的梯度,也基于之前的梯度,可以用图3.23来简单地说明。

        记住我们更新的是梯度的负方向,红色表示梯度,蓝色表示更新方向,图中绿色的虚线就是动量,可以看到也就是之前一次梯度的负方向。(因为我看到的是黑白图片,所以大家凑合看吧) 

        除此之外,对于动量还有一个变形,即 Nesterov。我们在更新参数的时候需要计算梯度,传统的动量方法是计算当前位置的梯度,但是 Nesterov 的方法是计算经过动量更新之后的位置的梯度。

3. Adagrad

        这是一种自适应学习率 (adaptive) 的方法,它的公式是:

w^{t+1}\leftarrow w^{t}-\frac{\eta }{\sqrt{\sum_{i=0}^{t}(g^{i})^{2}}+\epsilon }g^{t}

通过公式,我们可以看到学习率在不断变小,且受每次计算出来的梯度影响,对于梯度比较大的参数,它的学习率就会变得相对更小,里面的根号特别重要,没有这个根号算法表现非常差。同时\epsilon是一个平滑参数,通常设置为10^{-4} \sim 10^{-8},这是为了避免分母为0。

        自适应学习率的缺点就是在某些情况下一直递减的学习率并不好,这样会造成学习过早停止。

4. RMSprop

        这是一种非常有效的自适应学习率的改进方法,它的公式是:

 

这里多了一个a,这是一个衰减率,也就是说 RMSprop 不再会将前面所有的梯度平方求和,而是通过一个衰减率将其变小,使用了一种滑动平均的方式,越靠前面的梯度对自适应的学习率影响越小,这样就能更加有效地避免 Adagrad 学习率一直递减太多的问题,能够更快地收敛。

5. Adam

        这是一种综合型的学习方法,可以看成是 RMSprop 加上动量 (Momentum) 的学习方法,达到比 RMSProp 更好的效果。

        以上介绍了多种基于梯度的参数更新方法,实际中我们可以使用 Adam 作为默认的优化算法,往往能够达到比较好的效果,同时 SGD+Momentum 的方法也值得尝试。

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值