深度学习必学的十个问题:理论与实践
上QQ阅读APP看书,第一时间看更新

2.1 基于梯度的一阶优化

在开始对神经网络训练之前,我们对优化的数值办法进行一般的讨论。

数值优化与解析法相对应,在很多情况下解析求解的效率太低。比如普通最小二乘算法,它的最佳参数表达为θ*=(XTX-1XTy,虽然我们可以获得解析表达,但是当数据量变得非常庞大的时候,矩阵逆的计算都会变得非常慢。同时在很多情况下,我们无法获得参数的解析表达,就需要我们采用迭代的方式逼近最佳的参数值。

我们在统计学习中曾经提到过坐标下降法(coordinate descent),它的想法很简单,将变量分组然后针对每一组变量的坐标方向最小化Loss,循环往复每一组变量,直到到达不再更新Loss的坐标点。但即便这样,坐标下降法仍然迭代的非常缓慢,很大一部分原因在于,它的搜索方向是固定的,只能沿着坐标的方向,而这样的方向并不能保证是最快的。同时,坐标下降需要假设变量之间的影响非常微弱,一个变量的最优不会影响到另一个变量的更新,但这一条件往往很难满足。

如图2.1,坐标下降法应用到两个参数张成的空间,我们可以发现,迭代只在两个垂直的参数坐标方向上进行。

从优化的角度来看,坐标下降迭代慢的原因是,迭代方向并非是方向导数最大的方向,基于梯度是所有方向中变化最快的,见定义2.1。我们可以利用梯度信息来进行迭代,正因为如此,梯度下降(gradientdescent)也被叫作最速下降。

定义2.1(方向导数和梯度) 某个标量s是多个向量变量的函数,记为sxyz),它在某一点的微分存在,那么特定方向d(单位向量)上的导数:

它的大小度量了该标量沿着该方向的变化率。在函数的某一点上,沿着各个方向的方向导数均可求出。梯度方向是所有的方向导数中最大的,它被定义为:

i,j,k分别是三个变量xyz张成空间的坐标方向。

我们用i表示迭代的次数,L表示损失函数,参数的优化在数学上可以被表示为:

在上式中,因为梯度指明了下降的最大方向,说明迭代的每一步,损失函数沿着梯度方向更新参数会得到最大程度的改变,如图2.2,在两个参数张成的参数空间构成,可以发现,参数会沿着垂直于损失contour的方向进行更新,比起坐标下降要快了不少。

图2.1 坐标下降的示意图

图2.2 梯度下降的示意图

值得注意的是,迭代过程中需要引入一个额外的参数,学习率ε,它是一个标量,与梯度相乘,指明了下降的幅度。学习率出现全部的基于梯度的优化算法中,在优化的过程中学习率发挥着很重要的作用,对于它的处理有两种方法,一种是实现指定好一个足够好的学习率,另一种是使得学习率随着优化结果动态调整,我们会在第3章详细讨论。