梯度下降是机器学习中用来使模型逼近真实分布的最小偏差的优化方法。
在普通的随机梯度下降和批梯度下降当中,参数的更新是按照如下公式进行的:
W = W - αdW
b = b - αdb
其中α是学习率,dW、db是cost function对w和b的偏导数。
随机梯度下降和批梯度下降的区别只是输入的数据分别是mini-batch和all。
然而,在曾经我发表的博客中提到了下图的问题。
可以看出在cost function的图像并不是那么“圆”的情况下,,从某一点开始的梯度下降过程是及其曲折的。并不是直接走向中心点,而是需要浪费很多时间折来折去,这样的速度就会变慢,怎么样解决这个问题呢?
有一个梯度下降法叫做动量梯度下降。直接上图:
这个就是动量梯度下降的参数更新公式。
我们可以看出,在这个公式中,并不是直接减去αdW和αdb,而是计算出了一个vdW和vdb。这又是什么呢?
在此需要引入一个叫做指数加权平均的知识点。也就是上图中的前两行公式。使用这个公式,可以将之前的dW和db都联系起来,不再是每一次梯度都是独立的情况。其中β是可以自行设置的超参数,一般情况下默认为0.9(也可以设置为其他数值)。β代表了现在的vdW和vdb与之前的1 / (1 - β)个vdW和vdb有关。0.9就是现在的vdW和vdb是平均了之前10天的vdW和vdb的结果。
此时的梯度不再只是我现在的数据的梯度,而是有一定权重的之前的梯度,就我个人认为,就像是把原本的梯度压缩一点,并且补上一个之前就已经存在的“动量”。
举个例子,如果你站在一个地方不动,让你立刻向后转齐步走,你可以迅速向后转然后就向相反的方向走了起来,批梯度下降和随机梯度下降就是这样,某一时刻的梯度只与这一时刻有关,改变方向可以做到立刻就变。而如果你正在按照某个速度向前跑,再让你立刻向后转,可以想象得到吧,此时你无法立刻将速度降为0然后改变方向,你由于之前的速度的作用,有可能会慢慢减速然后转一个弯。
动量梯度下降是同理的,每一次梯度下降都会有一个之前的速度的作用,如果我这次的方向与之前相同,则会因为之前的速度继续加速;如果这次的方向与之前相反,则会由于之前存在速度的作用不会产生一个急转弯,而是尽量把路线向一条直线拉过去。
这就解决了文中第一个图的那个在普通梯度下降中存在的下降路线折来折去浪费时间的问题。
与Momentum的机制类似的,还有一种叫做RMSprop的算法,他们俩的效果也是类似,都解决了相同的问题,使梯度下降时的折返情况减轻,从而加快训练速度。因为下降的路线更接近同一个方向,因此也可以将学习率增大来加快训练速度。
Momentum和RMSprop的结合,产生了一种权威算法叫做Adam,Adam结合了前两者的计算方式形成自己的优化方法,基本适用于所有的模型和网络结构。
以上纯属个人理解,如有错误请指正。
网友评论