1.SGD
梯度下降法分为三种:
- BGD(Batch Gradient Descent,批量梯度下降)
- 一次迭代使用所有样本对参数进行更新。
- 优点:收敛效果好,对于凸函数可以收敛到全局极小值。
- 缺点:数据集很大的时候由于计算量太大,导致收敛速度慢。
- SGD(Stochastic Gradient Descent,随机梯度下降)
- 每次迭代使用一个样本对参数进行更新。
- 优点:收敛速度很快。
- 缺点:每次更新只考虑单个样本,因此波动/震荡比较大。

- MBGD(Mini-Batch Gradient Descent,小批量梯度下降法)
- 前两者的折中方案,将总样本分为多个batch,每次迭代使用batch_size个样本对参数进行更新。
- 优缺点:收敛速度较快,有一定的小波动(震荡幅度不大)。

2.Momentum
然而,SGD和MBGD这两种改进方案,都存在一定程度的震荡(频繁改变方向)。于是,以减少震荡为目的,引入“动量(Momentum)”来对算法做进一步优化。
所谓的引入动量,即更新参数时,不仅考虑当前梯度,还会累加先前的梯度/动量。
参数更新的计算公式:
,动量超参
由公式可见,当本次梯度与上次梯度同向时,上次梯度对本次参数更新起到一个加速的作用;当本次梯度与上次梯度反向时,上次梯度对本次参数更新起到一个减缓的作用。
因此,引入动量,一方面可以加快收敛速度,另一方面可以提高精度(减少震荡,使模型收敛更稳定)。
3.自适应学习率
自适应学习率的优化算法包括AdaGrad、RMSProp和Adam。
特别地,Adam是一种带动量的、自适应学习率的综合优化算法。
AdaGrad
上面的优化算法,对每个参数都使用了相同的学习率
。于是,进一步提出了AdaGrad算法,它能够自动调整每个参数的学习率
。AdaGrad算法适合处理稀疏数据。
AdaGrad算法在每轮训练中,会对每个参数的学习率
进行更新,它的参数更新公式:
是对应参数
从第
轮到第
轮梯度的平方和;
是为了避免分母为0。
可见,在AdaGrad算法中,会先根据参数之前的所有梯度更新学习率
,然后用新的学习率
对参数
进行更新。梯度较大的参数计算得到的学习率更小,梯度较小的参数计算得到的学习率更大,因此,对于稀疏数据采用AdaGrad算法是个不错的选择。
AdaGrad算法的缺陷:在训练中后期,随着梯度的不断累加,分母越来越大,学习率越来越小,无法进行有效的参数更新。
RMSProp
RMSProp也是一种自适应学习率的优化算法。与AdaGrad不同的是,Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算梯度平方的加权平均。因此,相对于Adagrad,RMSProp可缓解学习率下降较快的问题。
Adam(Adaptive Moment Estimation,适应性矩估计)
论文下载《Adam: A Method for Stochastic Optimization》
Adam是一种综合优化算法,集成了动量和自适应学习率的优点。Adam同时结合了Adagrad和RMSProp算法的优点,能够很好的处理稀疏数据和步长自动退火。
我们知道,梯度下降法的参数更新公式为:
通俗来说(不严谨,为了方便理解):
- 引入动量,即调整
。
的计算考虑了当前梯度和之前的梯度。
- 自适应学习率,即调整
。
的计算同样考虑了当前梯度和之前的梯度。
4.权重衰减(weight decay)
正则化技术包括:
1)L1正则化,鼓励产生稀疏的权重;
2)L2正则化,鼓励产生小而分散的权重。
权重衰减(weight deacy),属于一种L2正则化技术。
网友评论