【深度学习基础】系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
1.RMSprop
RMSprop全称是root mean square prop算法。除了momentum梯度下降法,RMSprop也可以加速梯度下降法。
接下来我们来看下RMSprop的实现过程。
假设我们的神经网络只有两个参数:$w$、$b$。以$w$为横轴,$b$为纵轴画出cost function的等高线图见下:
其中,蓝色带箭头的线为梯度下降法的运行过程。
和momentum梯度下降法的目标相同,我们现在想要改善的就是:减少纵向的摆动,加快横向的进程(或者至少不减缓横向的进程)。但是这次我们换一个思路。
首先分析造成这种情况的原因,很明显是因为$db>dw$,因此在相同的学习率$\alpha$下,才造成了$b$更新的步长要比$w$大很多。
那么既然这个问题是因为步长的更新差距造成的,那么我们可以赋予$b$和$w$不同的学习率来抑制这种现象。我们对参数$b$使用更小的学习率$\alpha\lambda_1$,而对参数$w$使用更大的学习率$\alpha \lambda_2$,其中,$\lambda_1<\lambda_2$,通过采用这种分而治之的方法来达到减少纵向摆动并且加快横向进程的目的。
或者换一种说法,保持学习率$\alpha$不变,通过减小$db$实现同样的效果。
以上便是RMSprop的思想。接下来详细介绍下RMSprop的实现过程。
- On iteration t:
- Compute dw,db on current mini-batch
- $S_{dw}=\beta S_{dw}+(1-\beta) (dw)^2$
- $S_{db}=\beta S_{db}+(1-\beta)(db)^2$
- $w:=w-\alpha \frac{dw}{\sqrt{S_{dw}}}$
- $b:=b-\alpha \frac{db}{\sqrt{S_{db}}}$
取平方是为了防止正负值的抵消。
这里的$\frac{1}{\sqrt{S_{db}}}$就相当于前文提到的$\lambda_1$,$\frac{1}{\sqrt{S_{dw}}}$就相当于$\lambda_2$。因为$db>dw$,因此有$S_{db}>S_{dw}$,进而有$\frac{1}{\sqrt{S_{db}}} < \frac{1}{\sqrt{S_{dw}}}$,即$\lambda_1 < \lambda_2$,符合之前的分析。
当然也可以理解为学习率$\alpha$不变,从而调整$dw,db$的大小来达到一样的效果。通过除以各自的平方指数加权平均值的开方,相当于做了标准化处理,使得$db$变小的幅度要远大于$dw$,最终起到减少纵向摆动并加快横向进程的效果。
经过RMSprop优化后的结果如下图绿线所示:
此外,经过RMSprop优化后的梯度下降法可以使用更大的学习率$\alpha$,从而进一步加快学习。
在例子中只有$w,b$两个参数,但是在实际中,你会处于参数的高纬度空间,例如我们需要在纵向上消除摆动的可能是参数$w_1,w_2,w_{17}$的合集,水平维度可能是$w_3,w_4$等等。
最后,为了防止分母$\sqrt{S_{db}},\sqrt{S_{dw}}$趋近于0,从而造成$\frac{dw}{\sqrt{S_{dw}}},\frac{db}{\sqrt{S_{db}}}$的值过大,因此在实际应用中,将分母加上一个很小很小的值$\epsilon$,通常取$\epsilon=10^{-8}$。修正完的公式见下:
- $w:=w-\alpha \frac{dw}{\sqrt{S_{dw}}+\epsilon}$
- $b:=b-\alpha \frac{db}{\sqrt{S_{db}}+\epsilon}$