优化器:SGD with Momentum

(1)指数加权平均:一种近似求平均的方法,公式如下:

v_{t}=\beta \ast v_{t-1}+(1-\beta )\theta _{t}

v_{t}代表局部的平均值。\theta _{t}代表第t个数据的值。\beta是可调节超参。可近似为前\frac{1}{1-\beta }个数据的的平均值。

举例说明,设\beta=0.9,则近似代表近10个数据的平均值:

v_{4}=0.9v_{3}+0.1\theta _{4}=0.9(0.9v_{2}+0.1\theta _{3})+0.1\theta _{4}=0.81v_{2}+0.09\theta _{3}+0.1\theta _{4}=0.81(0.9v_{1}+0.1\theta _{2})+0.09\theta _{3}+0.1\theta _{4}=0.729v_{1}+0.081\theta _{1}+0.09\theta _{3}+0.1\theta _{4}=0.1\times 0.9^{3}\times \theta _{1}+0.1\times 0.9^{2}\times \theta _{2}+0.1\times 0.9^{1}\times \theta _{3}+0.1\theta _{4}

指数递减的加权的移动平均,越近期的数据加权越大。v_{t}对原始数据做了平滑,降低了原始数据的震荡程度,怎么看是前多少个数据的平均值呢,n通过\beta ^{n}\approx \frac{1}{e}得到。

(2)SGD with Momentum

采用上述指数加权平均的思路,在SGD中增加动量的概念,使得前几轮的梯度也会加入到当前的计算中(会有一定衰减),通过对前面一部分梯度的指数加权平均使得梯度下降过程更加平滑,减少动荡,收敛也比普通的SGD快。当前梯度方向与累计梯度方向一致时,梯度会被加强,从而这一步下降幅度增大,若方向不一致,则会减弱当前下降的梯度幅度。

v_{t}=\beta \ast v_{t-1}+(1-\beta )\Delta J(\theta )

\Delta J(\theta )是当前梯度值,\beta常设为0.9,也就是前10个梯度的平均值。参数\theta的更新公式如下:

\theta =\theta -\alpha v_{t}

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