深度学习中的优化算法

深度学习中的优化算法

揭秘AdaGram, RMSProp,动量梯度下降法以及Adam Optimizier

深度学习中的优化算法

本文将对深度学习中最复杂的优化算法进行介绍,如AdaGrad, RMSProp,动量梯度下降法及Adam Optimizer等。

01

为什么我们需要更好的优化算法

要训练神经网络模型,我们必须定义一个损失函数(loss function),以测量模型预测与我们要预测的标签之间的差异。我们正在寻找的是一组特定的权重(weights),神经网络可以使用这些权重进行准确的预测,从而使得损失函数的值降低。而这背后的数学方法被称为梯度下降。
深度学习中的优化算法
式1  具有损失函数L参数θ梯度下降
在这种技术(式1)中,我们必须计算损失函数L相对于我们要改变 的权重(或参数θ)的梯度。随后,权重/参数在梯度的负方向上进行更新。通过定期对权重应用梯度下降,我们最终将获得使权重函数最小化并允许神经网络做出更好预测的最佳权重。
到目前为止,梯度下降仍然是一项强大的技术。但是,在实践中,此技术可能在训练过程中会遇到某些问题,这些问题可能会减慢学习过程,甚至会阻止算法找到最佳权重。这些问题一方面是在损失函数的鞍点和局部极小值处,损失函数变得平坦并且梯度变为零:
深度学习中的优化算法
1 鞍点和局部最小值
接近零的梯度不会改善权重参数,并会阻止整个学习过程。
另一方面,即使我们具有不接近零的梯度,为来自训练集的不同数据样本计算的这些梯度的值也可能在值和方向上有所不同。我们说梯度是嘈杂的或有很多变化。这导致结果会朝着最佳权重进行锯齿形运动,并且可能使学习速度大大降低:
深度学习中的优化算法
图3 噪声梯度的锯齿形运动示例
在下面的文章中,我们将介绍更复杂的梯度下降算法。所有这些算法都是基于到目前为止我们已经知道的常规梯度下降优化。但是,我们可以通过一些数学技巧来扩展这种常规的权重优化方法,以构建更有效的优化算法,从而使我们的神经网络能够充分处理这些问题,能够更快地学习并获得更好的性能。


02


动量随机梯度下降法


接下来介绍的第一个复杂算法称为带有动量的随机梯度下降优化方法。
深度学习中的优化算法
式2 具有动量的随机梯度下降方程
在(式2)的左侧,我们可以根据规则随机梯度下降来查看权重更新的等式。右边的式子显示了根据动量随机梯度下降法更新权重的规则。动量作为附加项ρ乘以v出现在常规更新规则中。
直观地讲,通过添加该动量项,我们让梯度在训练过程中建立了某种速度v。速度是由ρ加权的梯度的总和。
ρ可以看作是摩擦,它会稍微降低速度。通常,我们可以看到速度会随着时间而增加。通过使用动量项,鞍点和局部最小值对梯度的危害减小。因为现在趋向全局最小值的步长不仅取决于在当前点的损失函数的梯度,还取决于随着时间累积的速度的大小。
换句话说,在某个确定的点上,我们是朝着速度方向移动而不是朝着梯度方向。
如果您想将动量随机梯度下降法进行物理表述,可以考虑一个球从山上滚下来,并随着时间的推移逐渐加快速度。如果该球在到达途中遇到一些障碍物,例如洞或没有向下坡度的平坦地面,则速度v将为球提供足够的动力以滚过这些障碍物。在这种情况下,平坦的地面和孔表示鞍点或损失函数的局部最小值。
在下面的视频(图4)中,向我们展示了常规随机梯度下降和动量随机梯度下降的直接比较。两种算法都试图达到存在于3D空间中的损失函数的全局最小值。请注意,动量项如何使梯度具有较小的方差和较少的之字形运动。
深度学习中的优化算法
深度学习中的优化算法
图4 SGD与动量SGD
通常,动量项使对于最佳权重的收敛更稳定,更快。


03


AdaGrad


另一种优化策略称为AdaGrad。这个想法是在优化过程中,梯度平方能够进行持续的动态求和。在这种情况下,我们没有动量项,而是表达式g,它表示梯度平方的总和。
深度学习中的优化算法
式3 AdaGrad的参数更新规则
更新权重参数时,将当前梯度除以g的平方根。为了解释AdaGrad的原理,请想象一下二维空间中的损失函数,其中一个方向上的损失函数的梯度很小,而在另一个方向上的梯度非常高。
沿梯度小的坐标轴对梯度求和会导致这些梯度的平方和变得更小。如果在更新步骤中,我们用当前梯度除以梯度平方和g,则该除法的结果将变得非常高,反之亦然。结果,我们强制算法以相同的比例向任何方向进行更新。
这意味着我们通过增加沿该轴的梯度来加快沿该轴的更新过程。另一方面,梯度变化较大的坐标轴的更新速度会稍微放慢。
       但是,这种优化算法存在着一些问题。想象一下,当训练花费很长时间时,梯度平方和会发生什么。随着时间的流逝,这一项会变得越来越大。如果当前梯度除以这个大数,则权重的更新步骤将变得非常小。就好像我们使用的是效率非常低的学习,而训练时间越长,学习效率就越低。由此,我们将会陷入AdaGrad的困境,训练将永远持续下去
深度学习中的优化算法

04


RMSProp



RMSProp是AdaGrad经过一些细小的变化得到的一种优化算法,它可以解决AdaGrad遇到的问题。在使用RMSProp时,我们仍然要计算梯度的平方的总和,但不是让该和在训练期间连续增长,而是让该和衰减。
深度学习中的优化算法
式 4 RMSProp更新法则
在RMSProp中,我们将平方梯度的总和乘以衰减率α,然后将当前梯度加权为(1- α)。对于RMSProp,更新步骤看起来与AdaGrad中的更新步骤完全相同,在AdaGrad中,我们将当前梯度除以梯度平方之和,以具有加速沿一个维度移动并减慢沿另一个维度移动的良好特性。
让我们看一下RMSProp与SGD和SGD相比的表现,这些SGD具有寻找最佳权重的动力。
深度学习中的优化算法
深度学习中的优化算法
图5 随机梯度下降法、动量随机梯度下降法及RMSProp对比
尽管动量随机梯度下降法可以更快地找到全局最小值,但是此算法需要更长的路径,这可能很危险。因为更长的路径意味着更多的鞍点和局部最小值。另一方面,RMSProp会直接走到损失函数的全局最小值,而不会绕道而行。


05


Adam Optimizier



到目前为止,我们已经使用动量项来建立梯度的速度,以朝该速度的方向更新权重参数。对于AdaGrad和RMSProp,我们使用平方梯度的总和来缩放当前梯度,因此我们可以在每个维度中以相同的比率进行权重更新。
这两种方法似乎是不错的主意。为什么我们不能够将这些算法组合成一个算法呢?
该算法的主要部分包括以下三个方程。这些方程式乍一看似乎不胜枚举,但是如果仔细观察,您会发现对先前的优化算法有些熟悉。
深度学习中的优化算法
式5 Adam Optimizer的参数更新规则
第一个方程看起来有点像动量随机梯度下降法。在这种情况下,该项将是速度和摩擦项。而在Adam Optimizier中,我们称其为第一动量,只是一个超参数。
但是,与动量随机梯度下降法不同的是系数(1- β1),该系数乘以流速梯度。
另一方面,方程的第二部分可以看作是RMSProp,会对梯度的平方持续求和。同样,在这种情况下,因子(1- β2)与平方梯度相乘。
该项在公式中被称作第二梯度,也只是一个超参数。最终更新公式可以看作是RMSProp和动量随机梯度下降法的组合。
到目前为止,Adam Optimizier已集成了先前两个优化算法的出色功能,但还需了解初始阶段在Adam Optimizier中会发生什么。
第一阶段,第一和第二动量项被初始化为零。在第二动量的第一次更新之后,该项仍然非常接近于零。当我们更新最后一个公式中的权重参数时,我们除以很小的第二动量项v,从而导致很大的第一更新步长。
第一个非常大的更新步长不是问题的几何意义上的结果,而是我们将第一和第二动量初始化为零的结果。为了解决第一个更新步长较大的问题,Adam Optimzier中包含一个更正子句:
深度学习中的优化算法
式6 Adam Optimizier的偏差校正
可见,在第一和第二动量的第一次更新之后,我们通过考虑当前时间步长对这些动量进行了无偏估计。这些校正项使第一和第二动量的值在开始时比没有偏差校正的情况高。
结果神经网络参数的第一个更新步长不会变得太大,也就保证了在起始阶段训练能够顺利地进行下去。
现在,让我们对所有优化算法进行比较,以找到损失函数的全局最小值:
深度学习中的优化算法
深度学习中的优化算法
图6 所有优化算法的比较


07

最佳的深度学习优化算法是什么?


 


最后,我们可以讨论最佳梯度下降算法是什么的问题。
通常,对于较简单的任务,普通梯度下降算法已绰绰有余。如果您对模型的精度不满意,可以尝试使用RMSprop或将动量项添加到梯度下降算法中。
深度学习中的优化算法
但也有很多人认为,最好的神经网络优化算法是Adam Optimizer。该优化算法几乎可以解决我们遇到的任何深度学习问题。特别是将超参数设置为以下值时:
·      β1=0.9
·      β2= 0.999
·      学习率= 0.001–0.0001


深度学习中的优化算法



0

评论0

请先
没有账号?注册  忘记密码?

社交账号快速登录


Warning: error_log(/www/wwwroot/326xt.net/wp-content/plugins/spider-analyser/#log/log-2514.txt): failed to open stream: No such file or directory in /www/wwwroot/326xt.net/wp-content/plugins/spider-analyser/spider.class.php on line 2900