梯度下降的改进
文章目录
前言
在学习梯度下降的时候,提及过梯度下降仍然存在很多缺点。在线性回归和梯度下降这篇文章当中,我们有在3.3部分说道:
梯度下降,并不是没有缺点,比如说:
- 当整个损失函数遇到了一个比较平缓的地方,那么这个地方的导数接近于0。而这个平缓的地方又不一定是极值点。那么就会造成停止下降,这样计算就有了偏差
- 只能找到局部极值点,难以找到全局最小点。
- 在鞍点(Saddle Point)处,梯度变化容易停滞
正因为存在这些问题,所以才会针对这些个问题,提出若干方法。
一.学习率预判
这个在英文资料当中称为:Learning Rate scheduling。即:优化学习率
优化学习率的方法,在下面讲述的SGD以及Adam当中都使用,具有一定的“普适性”
我们在SKlearn技巧的第7部分,已经演示了梯度下降以及梯度上升,从中提到了梯度失灵以及梯度爆炸的现象。这两个现象的出现都与学习率的调整有着直接关系。如果学习率调整的太大,就会出现这些现象。但是,如果学习率调整的太小,则大大增加运算时间,影响运算效率。所以,该如何设定这个学习率呢?
1.1 原版梯度下降
有一种思路是:最开始的时候,学习率可以设定的大一些,但是,随着迭代次数的增加,越来越逼近极值点,学习率就应该响应的减小。我们假设学习率是alpha,t代表迭代的次数。那么大可以这么设定:
α t = α t − 1 1 + t \alpha_{t} = \frac{\alpha_{t-1}}{\sqrt{1+t}} αt=1+tαt−1
这样一来,迭代公式就变成了:
w t = w t − 1 + α t − 1 g t − 1 w_{t} = w_{t-1} + \alpha_{t-1}g_{t-1} wt=wt−1+αt−1gt−1
其中,g为偏导的值:这个方法被称为:原版梯度下降(Vanilla Gradient descent)(香草这个单词的衍生意思有“原生的”意思)
1.2 自适应梯度下降
还有一种方法叫:自适应梯度算法(AdaGrad)
在这个算法当中,引入了均方根差(Root Mean Square),它的公式其实很简单。就是均方误差开根号:
δ t = R M S D ( g t ) = M S E ( g t ) \delta_{t} = RMSD(g_{t}) = \sqrt{MSE(g_{t})} δt=RMSD(gt)=MSE(gt)
g代表偏导的值
同时,结合原版梯度下降当中计算alpha的方法:
w t = w t − 1 + α t − 1 δ t − 1 g t − 1 w_{t} = w_{t-1} + \frac{ \alpha_{t-1}}{\delta_{t-1}}g_{t-1} wt=wt−1+δt−1αt−1gt−1
于是,就有了这样一个迭代方式:
1.3 RMSProp算法
英文全称: Root Mean Square Prop。中文有人翻译为:均方根传递算法
这个算法,其实承接了AdaGrad,在AdaGrad的基础上做了一定的微调。它的具体计算公式如下:
w t = w t − 1 − η v t g t − 1 v 1 = g 0 2 v t = α v t − 1 + ( 1 − α ) g t − 1 2 w_{t} = w_{t-1} - \frac{ \eta}{\sqrt{v_{t}}}g_{t-1}\\v_{1} = g_{0}^2\\v_{t}=\alpha v_{t-1} + (1-\alpha)g_{t-1}^2 wt=wt−1−vtηgt−1v1=g02vt=α