常用的优化算法:SGD、Momentum、AdaGrad、RMS

2021-04-08  本文已影响0人  星光下的胖子

1.SGD

梯度下降法分为三种:

2.Momentum

然而,SGD和MBGD这两种改进方案,都存在一定程度的震荡(频繁改变方向)。于是,以减少震荡为目的,引入“动量(Momentum)”来对算法做进一步优化。

所谓的引入动量,即更新参数时,不仅考虑当前梯度,还会累加先前的梯度/动量。
参数更新的计算公式:
    \Delta_t = \beta \Delta_{t-1} + \eta \frac{\partial J(\theta_{t})}{\partial \theta_{t}},动量超参\beta \in [0, 1]
    \theta_{t+1}= \theta_{t} - \Delta_t
由公式可见,当本次梯度与上次梯度同向时,上次梯度对本次参数更新起到一个加速的作用;当本次梯度与上次梯度反向时,上次梯度对本次参数更新起到一个减缓的作用。
因此,引入动量,一方面可以加快收敛速度,另一方面可以提高精度(减少震荡,使模型收敛更稳定)。

3.自适应学习率

自适应学习率的优化算法包括AdaGrad、RMSProp和Adam。
特别地,Adam是一种带动量的、自适应学习率的综合优化算法。

AdaGrad

上面的优化算法,对每个参数\theta_i都使用了相同的学习率\eta。于是,进一步提出了AdaGrad算法,它能够自动调整每个参数的学习率\eta。AdaGrad算法适合处理稀疏数据。

AdaGrad算法在每轮训练中,会对每个参数\theta_i的学习率\eta进行更新,它的参数更新公式:
    g_{t, i} = \frac{\partial J(\theta_{t, i})}{\partial \theta_{t, i}},G_{t, i} = \sum_{j=1}^t g_{j, i}^2,\eta^{'} = \frac{\eta}{\sqrt{G_{t, i} + \epsilon}}
    \theta_{t+1} = \theta_t - \eta^{'} \cdot g_{t, i}
G_{t, i}是对应参数θ_i从第1轮到第t轮梯度的平方和;\epsilon是为了避免分母为0。

可见,在AdaGrad算法中,会先根据参数\theta_i之前的所有梯度更新学习率\eta,然后用新的学习率\eta^{'}对参数\theta_i进行更新。梯度较大的参数计算得到的学习率更小,梯度较小的参数计算得到的学习率更大,因此,对于稀疏数据采用AdaGrad算法是个不错的选择。

AdaGrad算法的缺陷:在训练中后期,随着梯度的不断累加,分母越来越大,学习率越来越小,无法进行有效的参数更新。

RMSProp

RMSProp也是一种自适应学习率的优化算法。与AdaGrad不同的是,Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算梯度平方的加权平均。因此,相对于Adagrad,RMSProp可缓解学习率下降较快的问题。

Adam(Adaptive Moment Estimation,适应性矩估计)

论文下载《Adam: A Method for Stochastic Optimization》
Adam是一种综合优化算法,集成了动量和自适应学习率的优点。Adam同时结合了Adagrad和RMSProp算法的优点,能够很好的处理稀疏数据和步长自动退火。

我们知道,梯度下降法的参数更新公式为:
    \theta_{t+1} = \theta_t - \eta \cdot \Delta_t
通俗来说(不严谨,为了方便理解):

4.权重衰减(weight decay)

正则化技术包括:
1)L1正则化,鼓励产生稀疏的权重;
2)L2正则化,鼓励产生小而分散的权重。
权重衰减(weight deacy),属于一种L2正则化技术。

上一篇 下一篇

猜你喜欢

热点阅读