下图给出了梯度方向对梯度改变大小的影响。
下图是对使用mini-batchgradientdescent的几点建议。
Abagoftricksformini-batchgradientdescent
下图介绍的是scalingtheinputs,该情况针对的是输入向量的分量取值相差悬殊时,通过给分量乘上一个系数来使得errorsurface更接近圆形,从而便于快速找到最优解或次优解。
下图提示我们不要太快得减小学习步长(learningrate)。
下面给出四种加快mini-batchlearning的方法,前三种我们会在下面一一介绍,最后一种本课程不涉及,感兴趣的话请自行搜索。这些方法具有很强的技巧性,需要我们在应用中不断摸索。
Themomentummethod
这一小节详细介绍动量方法(themomentummethod),其应用很广泛,在full-batchlearning和mini-batchlearning中都可以使用。下面给出了动量方法的intuition和计算公式。
Usingmomentumspeedsupgradientdescentlearningbecause
Directionsofconsistentchangegetamplified.
Directionsoffluctuationsgetdamped.
Allowsusingmuchlargerlearningrates.
Momentumaccumulatesconsistentcomponentsofthegradientandattenuatesthefluctuatingones.Italsoallowsustousebiggerlearningratebecausethelearningisnowmorestable.
标准的动量方法(由Nesterov在1983年提出)是在当前位置计算梯度,然后在累积的更新梯度方向上做一个大的跳跃。下面给出了一种更好地动量方法(由IIyaSutskever在2012年提出),其先在先前累积的梯度方向上做一个大的跳跃,再计算新的梯度并修正错误。
下面对两种方法做了比较,图中蓝色箭头是做两次标准动量方法得到的;而图中棕色箭头是改进动量方法先做的一次大跳跃得到的,红色箭头是修正,绿色箭头是进行一次改进动量方法得到的。可以看到,改进的比标准的要快很多。
Adaptivelearningratesforeachconnection
一个可行的方法是有一个全局的学习步长,然后对每一个权值参数有一个localgain,用gij表示。初始时gij均取值为1,后每次迭代根据权值梯度的变化情况作出调整,具体调整公式如下图所示。
下图列出了几种提高自适应学习步长性能的几个技巧。
Rmsprop:Dividethegradientbyarunningaverageofitsrecentmagnitude
首先介绍rprop算法。前面我们说过,不同权值参数的梯度的数量级可能相差很大,因此很难找到一个全局的学习步长。这时,我们想到了在full-batchlearning中仅靠权值梯度的符号来选择学习步长。rprop算法正是采用这样的思想:对于网络中的每一个权值参数,当其对应的前面两个梯度符号相同时,则增大该权值参数对应的学习步长;反之,则减小对应的学习步长。并且,rprop算法将每一个权值对应的学习步长限制在百万分之一到50之间。
下图列出了关于rmsprop算法的一些研究,想了解详情的话请自行搜索。
这几个算法都比较烧脑啊,全是凭大脑推理思考,回头要好好做实验。