神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优化(optimization)。
为了找到最优参数,我们将参数的梯度(导数)作为了线索。使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数,这个过程称为随机梯度下降法(stochastic gradient descent),简称SGD。
用数学式可以将SGD写成如下的式(6.1)。
如式(6.1)所示,SGD是朝着梯度方向只前进一定距离的简单方法。
SGD的缺点
虽然SGD简单,并且容易实现,但是在解决某些问题时可能没有效率。
SGD的缺点是,如果函数的形状非均向(anisotropic),比如呈延伸状,搜索的路径就会非常低效。SGD低效的根本原因是,梯度的方向并没有指向最小值的方向。
为了改正SGD的缺点,下面我们将介绍Momentum、AdaGrad、Adam这3种方法来取代SGD。
Momentum方法
用数学式表示Momentum方法,如下所示。
这里新出现了一个变量v,对应物理上的速度。式(6.3)表示了物体在梯度方向上受力,在这个力的作用下,物体的速度增加这一物理法则。
现在尝试使用Momentum解决式(6.2)的最优化问题,如图6-5所示。
所以和SGD时的情形相比,可以更快地朝x轴方向靠近,减弱“之”字形的变动程度。
AdaGrad方法
在神经网络的学习中,学习率(数学式中记为η)的值很重要。学习率过小,会导致学习花费过多时间;反过来,学习率过大,则会导致学习发散而不能正确进行。
在关于学习率的有效技巧中,有一种被称为学习率衰减(learning rate decay)的方法,即随着学习的进行,使学习率逐渐减小。
AdaGrad会为参数的每个元素适当地调整学习率,与此同时进行学习(Ada来自英文单词Adaptive)下面用数学式表示AdaGrad的更新方法。
这里新出现了变量h,如式(6.5)所示,它保存了以前的所有梯度值的平方和。可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。
AdaGrad会记录过去所有梯度的平方和。因此,学习越深入,更新的幅度就越小。实际上,如果无止境地学习,更新量就会变为0,完全不再更新。为了改善这个问题,可以使用RMSProp方法。RMSProp方法并不是将过去所有的梯度一视同仁地相加,而是逐渐地遗忘过去的梯度,在做加法运算时将新梯度的信息更多地反映出来。这种操作从专业上讲,称为“指数移动平均”,呈指数函数式地减小过去的梯度的尺度。
我们试着使用AdaGrad解决式(6.2)的最优化问题,结果如图6-6所示。
Adam算法
Adam 方法的基本思路是融合Momentum算法和AdaGrad算法,通过组合前面两个方法的优点,有望实现参数空间的高效搜索。此外,进行超参数的“偏置校正”也是Adam的特征。
我们试着使用Adam解决式(6.2)的最优化问题,结果如图6-7所示。
Adam会设置3个超参数。一个是学习率(论文中以α出现),另外两个是一次momentum系数β1 和二次momentum系数β2 。根据论文,标准的设定值是β1 为0.9,β2 为0.999。设置了这些值后,大多数情况下都能顺利运行。
评论(0)
您还未登录,请登录后发表或查看评论