1.梯度下降
神经网络最基本的算法是反向传播算法加上梯度下降算法。通过梯度下降算法使得网络参数不断收敛到全局(或局部)的最小值,但是由于神经网络层数太多,需要通过反向传播算法把误差一层一层地从输出传到输入,逐渐地更新网络参数。由于梯度方向是函数值变大的最快的方向,因此负梯度方向则是函数值变小的最快的方向。沿着负梯度方向一步一步迭代,便能快速收敛到函数最小值。这就是梯度下降法的基本思路。
梯度下降法的迭代公式如下:
其中:w是待训练的网络参数,α是学习率,是一个常数,dw是梯度。
2.LSGD
随机梯度下降是梯度下降的一个小变形,就是每次使用一个batch的数据进行梯度的计算,而不是全部数据的梯度,因为深度学习的数据量比较大,所以每次使用全量数据进行梯度计算不先生,会导致计算时间特别长,且每次都计算全部的梯度还失去了一些随机性,容易陷入局部误差,所以使用LSGD可能每次都不是朝着真正的最小的方向,但这样反而容易跳出局部极小点。
3.Momentum
Momentum算法又叫做冲量算法, 就是在随机梯度下降的同时,增加动量 (Momentum) 。这来自于物理中的概念, 可以想象损失函数是一个山谷,一个球从山谷滑下来 ,在一个平坦的地势,球的滑动速度就会慢下来,可能陷入一些鞍点或者局部极小值点, 这个时候给它增加动量就可以让它从高处滑落时的势能转换为平地的功能,相当于惯性增加 f小球在平地滑动的速度,从而帮助其跳出鞍点或者局部极小点 。
其迭代更新公式如下:
dw是我们计算出来的原始梯度,v则是用指数加权平均计算出来的梯度。这相当于对原始梯度做了一个平滑,然后再用来做梯度下降。
4.Adagrad
Adagrad是一种自适应学习率的方法,它的公式是:
我们可以看到学习率在不断变小, 且受每次计算出来的梯度影响 ,对于梯度比较大的参数,它的学习率就会变得相对更小 ,里面的根号特别重要,没有这个根号算法表现非常差 。同时 E 是一个平滑参数,通常设置为 10- 4 ~10 - 8 ,这是为了避免分母为 0。自适应学习 率的缺点就是在某些情况下一直递减的学习率并不好,这样会造成学习过早停止。
5. RMSprop
RMSprop是一种改进的自适应学习率的方法,它的公式是:
这里多了一个 α ,这是一个衰减率,也就是说 RMSprop 不再会将前面所有的梯度平方求和,而是通过一个衰减率将其变小,使用了一种滑动平均的方式,越靠前面的梯度对
自适应的学习率影响越小,这样就能更加有效地避免 Adagrad 学习率一直递减太多的问题,能够更快地收敛 。
5.Adam
这是一种综合型的学习方法,可以看成是阳v1Sprop 加上动量 (Momentum) 的学习方法,达到比 RMSProp 更好的效果。实际中我们可以使用 Adam 作为默认的优化算法,往往能够达到比较好的效果,同时 SGD十Momentum 的方法也值得尝试 。