1 全量梯度下降(BGD)

全量梯度下降每次都使用整个训练集,因此每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点,凸函数收敛于全局极值点,非凸函数可能收敛于局部极值点,缺陷就是学习时间太长,消耗大量内存。

2 随机梯度下降法(SGD)

SGD一轮迭代只用于一条随机选择女的数据,尽管SGD迭代次数比BGD大很多,但一次学习时间非常快。缺点在于每次更新可能不会按照正确的方向进行,参数更新具有高方差,导致损失函数剧烈波动,但同时,如果目标函数有盆地区域,SGD会使优化的方向从当前局部极小值跳到另一个更好的局部极小值点,这样对于非凸函数,可能最终收敛于一个较好的局部极值点,甚至全局极值点。缺点是,出现损失函数波动时,无法判断是否收敛。

3 小批量梯度下降法(MBGD)

SGD比BGD收敛速度快,然而它的缺点也是收敛时浮动。所以出现了折中的MBGD方法,一次迭代多条数据。关键在于是否选择合适的Batch Size。

4 Momentum梯度下降

SGD、BSGD两种改进方法都存在不同程度的震荡,如何避免震荡?或者说震荡是怎么产生的?震荡,从可视图表现来看,就是频繁更改方向,所以,如果能够把之前下降的方向考量进来,那么将会减少振荡。
各种梯度下降
公式为:V = dW * λ+ V*momemtum(动量下降法)
注释:第一个V为本次更新量,第二个V为本次“梯度”下降量与部分上次更新量的矢量和,momemtum为介于0和1之间的系数,取值范围通常为[0.5,0.9,0.95,0.99],一种常见的做法是在迭代的时候将其设为0.5,在一定迭代次数后更新为0.99(后期陷入局部最小值时,梯度趋近0,较大的动量可帮助其跳出局部最小值)。
当本次梯度下降方向与上次更新量的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用当本次梯度下降方向与上次更新量的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用
各种梯度下降

5 NAG梯度下降法

NAG(Nesterov Accelerated Gradient)不仅仅把SGD梯度下降以前的方向考虑,还将Momentum梯度变化的幅度(幅度越大我们预测小球下一步的位置也越远)也考虑了进来。在小球向下滚动的过程中,我们希望小球能够提前知道在哪些地方坡面会上升,这样在遇到上升坡面之前,小球提前就开始减速,就不容易陷入局部最优解。各种梯度下降
各种梯度下降
NAG与Momentum不同的是,gradient step是预测结果,也就是计算在momentum step绿色箭头这一点的梯度确定gradient step。总而言之,就是通过在历史梯度方向走一小步来预测梯度方向,结合momentum step来调整当前变化更新。区别就是使用哪个地方gradient step。

6 牛顿法

牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。

转载于(同时加入了自己的理解):
http://dy.163.com/v2/article/detail/DT2HA2K40511LNNJ.html
https://www.cnblogs.com/huangyc/p/9801261.html
https://zhuanlan.zhihu.com/p/42479917

相关文章: