深度学习中多层全连接网络的梯度下降法及其变式

深度学习中多层全连接网络的梯度下降法及其变式

  • 1 梯度下降法
  • 2 梯度下降的变式
    • 1.SGD
    • 2.Momentum
    • 3.Adagrad
    • 4.RMSprop
    • 5.Adam
    • 6.小结

1 梯度下降法

  • 梯度下降法的更新公式如下。
    在这里插入图片描述
  • 现在通过实际理论证明这样更新参数能够达到最优的效果。
  • 希望求解下面这个方程。
    在这里插入图片描述
  • 也就是说,希望更新参数之后有下面的结果。
    在这里插入图片描述
  • 泰勒级数(Taylor Series):对于任何一个无限可微函数h(x),在一个点x=x0附近,有以下泰勒级数:
    深度学习中多层全连接网络的梯度下降法及其变式_第1张图片
  • 当x足够接近x0,有下面的近似:
    在这里插入图片描述
  • 对于多元泰勒级数,有以下公式:
    在这里插入图片描述
  • 同样当x和y足够接近x0和y0的时候,有以下近似:
    在这里插入图片描述

2 梯度下降的变式

1.SGD

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

2.Momentum

  • 第二种优化方法就是在随机梯度下降的同时,增加动量(Momentum)。这来自于物理中的概念,可以想象损失函数是一个山谷,一个球从山谷滑下来,在一个平坦的地势,球的滑动速度就会慢下来,可能会陷入一些鞍点或者局部极小值点。
    深度学习中多层全连接网络的梯度下降法及其变式_第2张图片
  • 这个时候给他增加动量,就可以让他从高处滑落时的势能转换为平地的动能,相当于惯性增加了小球在平地滑动的速度,从而帮其跳出鞍点或者局部极小点。
  • 动量的计算基于前面的梯度,也就是说参数更新不仅仅基于前面的梯度,也基于之前的梯度。
    深度学习中多层全连接网络的梯度下降法及其变式_第3张图片
  • 对于动量,还有一个变形即Nesterov。在更新参数的时候需要计算梯度,传统的动量方法是计算当前位置的梯度,但是Nesterov的方法是计算经过动量更新之后的位置的梯度。

3.Adagrad

  • 这是一种自适应学习率(adaptive)的方法,它的公式是:
    在这里插入图片描述
  • 学习率在不断变小,且受每次计算出来的梯度影响,对于梯度比较大的参数,它的学习率就会变得相对更小,里面的根号特别重要,没有这个根号算法表现非常差。
  • 自适应学习率的缺点就是在某些情况下,一直递减的学习率并不好,这样会造成学习过早停止。

4.RMSprop

  • 这是一个非常有效的自适应学习率的改进方法,公式如下。
    在这里插入图片描述
    在这里插入图片描述
  • RMSprop不再会将前面所有的梯度平方求和,而是通过一个衰减率将其变小,使用了一种滑动平均的方式,越靠前面的梯度对自适应的学习率影响越小,这样就能更加有效避免Adagrad学习率一直递减太多的问题,能够更快的收敛。

5.Adam

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

6.小结

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

你可能感兴趣的:(python,深度学习,算法)