第一章:梯度下降法简介
之前我们已经介绍过梯度下降法,用梯度下降法训练神经网络可以说是最有效的方法了。可是呢,标准的梯度下降法它是很难实用的,因为标准的梯度下降法它要求的计算量是相当大的。靠我们现在的计算机是没有办法承担起这个计算量的,就别说现在了,可见的未来可能都做不到。所以需要对梯度下降法进行优化,让它用更少的计算实现差不多的效果。1.1 梯度下降法的问题
我大概看了一下,优化梯度下降法大致有两个方向:第一个是去调整神经网络的结构,比如说增加池化层啊,或者是用 Dropout 方法等等;还有第二种方法,就是直接在梯度下降法这个算法本身上进行优化。我们这一次重点关注随机梯度下降法、动量法、AdaGrad 方法等,看看它们到底是什么意思,以及它们之间又有什么样的关系。
第二章:梯度下降法的挑战与优化
在讲梯度下降法的时候我们已经知道,梯度下降法求的是损失函数的梯度,比如用交叉熵来计算损失函数,其表达式中连加符号代表了需要遍历训练集里的每一个数据。训练集动不动就有上万个数据,而且每个数据的维度还非常高,例如一张图片,它每个像素点都可能有三个维度(RGB三通道)。这还没完,我们现在基本上都是在说深度神经网络,它的层数就比较多嘛。如果是全连接的话,那这样计算一遍,它的计算量肯定是大的惊人。这还只是训练了一次。
2.1 随机梯度下降法 (SGD)
正常情况下标准的梯度下降法它的收敛速度肯定是要比随机梯度下降法要快的,但是数学家也证明了它再快也不会快过1/k。也就是说,梯度下降法用标准的方式它计算了那么多数据,最后提高的效果不是很明显,性价比实在太差,所以不如直接用随机梯度下降。当然了现在的随机梯度下降法也不是每一次只挑一个数据然后就开始进行训练了,而是会随机挑一个批次,用一个批次去进行训练。这个方法很多人也把它称作是mini-batch方法。据我所知啊,现在所说的随机梯度下降法也就是mini-batch,两个是一个意思的。这个其实就是我们说的第一个思路的解决方案——随机梯度下降法。
第三章:优化路径
那接下来我们就来看第二个优化的思路了,那就是去优化一下下降的路径,用更少的步数更快地到达极值点。当初第一次想到这个思路的时候我觉得还是挺奇怪的,这个优化下降路径有必要吗?我们都知道求梯度那个梯度已经是指向下降最快的方向,当然严格来说梯度是指向上升最快的,它的反方向才是指向下降最快的。那后面我就不管这些了啊,就直接说梯度了。你明白我的意思就行。
既然梯度已经指向下降最快的方向,那这个优化还有必要吗?还有空间吗?当然还是有空间的。你想如果选择了随机梯度下降法,每一次都是随机挑一个数据去求梯度,这个随机的数据肯定是有偏差的!那计算出来的梯度可能就和最后下降最快的那个方向是有偏差的。那这个就带来了优化的空间。当然就算你没有选随机梯度下降法,选的依然是标准梯度下降法,依然是有优化空间的。我们前面讲计算梯度下降法,它其实算的是一个点的梯度,也就是这个点下降最快的方向。如果你想把整个下降最优的路线也描述出来,那这个每一次迭代的步长要无限小才行。这个就是微积分的思想。但是无限小啊,我们的计算机是没有办法计算的,就算能计算,那计算量也是大的惊人的。所以每一次迭代,它一定是有一个确定步长的。那有了这个步长,那它就一定不会和最优的下降路线完全重合,而这个也就为优化带来了可能性。
第四章:从切线到抛物线的逼近方式
这并不是用一次的切线来进行逼近。那是不是可以用一个二次的抛物线也用类似的方式来进行逼近呢?可以看到这是一个二次的抛物线,这个抛物线从视觉上就能看到它肯定是比这个直线要更接近于原来的曲线。而我们这次说的方法,就是在这个基础之上进行的优化,这方法名字叫牛顿法,最开始是牛顿先提出来的。具体该怎么做呢?我们可以看到这个灰色的曲线应该是到极值点最优的路线,这个橙色的曲线离最优路线是有偏差的,这个偏差是距离越远它偏差越大。而这个绿色的抛物线它是在一定范围之内它的效果优于这条直线的,但是超过一定范围它的效果就比这直线还要差了。而且还可以看到,当它取值到顶点的时候,它的效果是最好的。所以说如果按照这个抛物线的方式进行学习的话,当它的步长达到Ax的时候,它的学习效果最好,而且是优于这条直线的。
第五章:历史数据的影响与指数加权移动平均
5.1 动量法
为了让距离当前较远的数据点对当前更新的影响逐渐减小,我们可以使用指数加权移动平均法。这种方法使得距离当前越远的数据影响越小,最后出来的效果是距离当前越远,对当前的影响就越小。在经过平台期的时候,虽然最开始比较慢,但是经过一段时间之后,后面的历史就被忽略了,它就会越来越快。优化后的具体算法表达式是RMSprop方法。这种优化方法叫做动量法,也叫做冲量法。其中V很像物理学里的动量,这其实说明了以前的改变是有惯性的,要想发生改变必须先将其抵消。有了这样的历史动量之后,出来的效果当然就会更加稳定。
5.2 Nesterov 动量法
对于梯度下降法的优化,不只是可以去参考历史的数据,还可以超前地去参考未来的数据。Nesterov算法就是一个例子。Nesterov算法的具体做法是在原来的基础上多加了一项V。这一项的作用是让点移动到一个预测的位置,从而求得该位置的偏导数。这样做可以避免传统动量法中出现的“绕路”问题,直接朝向更优的方向前进,提高优化效率。
第六章:结合多种技术的综合优化策略
优化并没有就此结束。我们还可以把AdaGrad方法和动量法结合起来,实际上真正结合的是RMSprop和动量法,结合之后的算法叫做Adam方法。此外,Adam方法也可以和Nesterov方法结合,结合后的名字叫Nadam方法,在 Adam 前面多加了一个 N。具体的内容大家可以感兴趣的话可以去搜索一下。
以上是基于王木头视频内容整理而成的博客。