个人学习使用,内容来源于网络,侵权删
神经网络反向传播时参数朝着最小化损失的方向前进,确切说,是朝着梯度方向更新。设神经网络参数是\(W\),学习率是\(\alpha\),网络代表的函数是\(L(W)\),那么参数更新公式可表示为:
$W=W-\alpha*\bigtriangledown_WL(W)$在深度学习中,有三种最基本的梯度下降算法:SGD、BGD、MBGD,他们各有优劣。根据不同的数据量和参数量,可以选择一种具体的实现形式,在训练神经网络是优化算法大体可以分为两类:1)调整学习率,使得优化更稳定;2)梯度估计修正,优化训练速度。
1. 随机梯度下降SGD
每次迭代只使用单个训练样本,参数更新表达式如下
$W=W-\alpha*\bigtriangledown_WL(W;x^{(i)};y^{(i)})$优点: SGD 一次迭代只需对一个样本进行计算,因此运行速度很快,还可用于在线学习。
缺点:(1)由于单个样本的随机性,实际过程中,目标损失函数值会剧烈波动,一方面,SGD 的波动使它能够跳到新的可能更好的局部最小值。另一方面,使得训练永远不会收敛,而是会一直在最小值附近波动。(2)一次迭代只计算一个样本,没有发挥GPU并行运算的优势,使得整体计算的效率不高。
2. 批量梯度下降BGD
每次迭代使用所有样本,参数更新表达式如下:
$W=W-\alpha*\bigtriangledown_WL(W;x^{(0:n)};y^{(0:n)})$优缺点分析:BGD能保证收敛到凸误差表面的全局最小值和非凸表面的局部最小值。但每迭代一次,需要用到训练集中的所有数据,如果数据量很大,那么迭代速度就会非常慢。
3. 小批量梯度下降MBGD
每次迭代使用一个batch的样本,batch一般为64~256,参数更新表达式如下:
$W=W-\alpha*\bigtriangledown_WL(W;x^{(i:i+n)};y^{(i:i+n)})$优缺点分析:因为每次迭代使用多个样本,所以 MBGD 比 SGD 收敛更稳定,也能避免 BGD 在数据集过大时迭代速度慢的问题。因此,MBGD是深度学习网络训练中经常使用的梯度下降方法。
上图为BGD和MBGD训练损失图。
4. Adagrad
算法如下
简单来讲,该算法就是在设置全局学习率之后,每次通过全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同
作用
起到的效果是在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。
如上图所示,蓝色为MBGD的参数更新路线,绿色为Adagrad的参数更新路线,由于参数\(b\)方向更陡峭,梯度更大,所以累计梯度更大,在更新时除以累计梯度之后更新的步幅更小,而\(W\)方向更平缓,梯度较小,因此更新步幅较大,两者合并使得更新速度更快。
5. Adadelta
用到了牛顿法和Hession矩阵
6. RMSProp
优化:
在上面的公式中 Sdw 和 Sdb 分别是损失函数在前 t−1轮迭代过程中累积的梯度平方动量, β 是梯度累积的一个指数。所不同的是,RMSProp算法对梯度计算了微分平方加权平均数。这种做法有利于消除了摆动幅度大的方向,用来修正摆动幅度,如下图所示,使得各个维度的摆动幅度都较小。另一方面也使得网络函数收敛更快。
7. Momentum动量梯度下降法
动量梯度下降法作用是加快学习速度,还有一定摆脱局部最优的能力。如下图红色线所示:
其表达式如下所示
\[v_t=\gamma v_{t-1} + \eta \bigtriangledown_{\theta}J(\theta) \]\[\theta=\theta-v_t \]其中,\(\gamma\)表示动量参数momentum;当$\gamma = 0 $时,即是普通的SGD梯度下降。\(0 < \gamma < 1\) ,表示带了动量的SGD梯度下降参数更新方式,\(\gamma\) 通常取0.9。
普通SGD的缺点:SGD很难在沟壑(即曲面在一个维度上比在另一个维度上弯曲得更陡的区域)中迭代,这在局部最优解中很常见。在这些场景中,SGD在沟壑的斜坡上振荡,同时沿着底部向局部最优方向缓慢前进。为了缓解这一问题,引入了动量momentum。
本质上,当使用动量时,如同我们将球推下山坡。球在滚下坡时积累动量,在途中变得越来越快。同样的事情发生在参数更新上:对于梯度指向相同方向的维度,动量会积累并增加,而对于梯度改变方向的维度,动量会减少更新。结果,我们获得了更快的收敛和减少的振荡。
8. Adam优化器
小结
深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
参考来源:
深度学习知识点全面总结
吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-2)-- 优化算法