深度学习从0到1
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 梯度下降法

4.3.1 梯度下降法介绍

在求解机器学习算法的模型参数时,梯度下降法(Gradient Descent)是最常用的方法之一。在学习梯度下降法之前,我们先来了解一下导数(Derivative)偏导数(Partial Derivative)方向导数(Directional Derivative)梯度(Gradient)的概念。

导数——导数的概念如图4.1所示。

图4.1 导数

导数的定义如下:

(1)f′(x0)表示函数fx0处的导数;

(2)Δx表示x的变化量;

(3)Δyfx0x-fx0)表示函数的增量;

(4)表示Δx趋近于0;

(5)dx表示x的变化量Δx趋近于0;

(6)dy表示f′(x0)dx

总的来说,f′(x0)反映的是函数y=fx)在x轴上的某一点处沿x轴正方向的变化率/变化趋势。也就是在x轴上的某一点,如果f'(x)>0,说明fx)的函数值在x点沿x轴正方向是趋向于增加的;如果f'(x)<0,说明fx)的函数值在x点沿x轴正方向是趋向于减小的。

偏导数——偏导数的定义如下:

从式(4.3)和式(4.4)可以看到,导数与偏导数的本质是一致的,都是当自变量的变化量趋近于0时,函数值的变化量与自变量的变化量的比值的极限。直观地说,偏导数也就是函数在某一点上沿坐标轴正方向的变化率。

导数与偏导数的区别在于:导数,指的是在一元函数中,函数y=fx)在某一点处沿x轴正方向的变化率;偏导数,指的是在多元函数中,函数y=fx0x1,…,xn)在某一点处沿某一坐标轴(x0x1,…,xn)正方向的变化率。

方向导数——方向导数的定义如下:

其中,l表示某个方向。

在前面导数和偏导数的定义中,均是沿坐标轴正方向讨论函数的变化率。那么当我们讨论函数沿任意方向的变化率时,也就引出了方向导数的定义,即某一点在某一趋近方向上的导数值。

通俗的解释是:我们不仅要知道函数在坐标轴正方向上的变化率(偏导数),而且还要设法求得函数在其他特定方向上的变化率。而方向导数就是函数在其他特定方向上的变化率。

梯度——梯度的定义如下:

对于fx0,…,xi,…,xn)上的某一点来说,其存在很多个方向导数,梯度的方向是函数fx0,…,xi,…,xn)在某一点增长最快的方向,梯度的模则是该点上方向导数的最大值,梯度的模等于:

这里注意3点:

(1)梯度是一个向量,既有方向,又有大小;

(2)梯度的方向是最大方向导数的方向;

(3)梯度的值是最大方向导数的值。

梯度下降法——既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化代价函数的时候,就可以沿着负梯度方向去减小代价函数的值。计算过程可以描述如下。

(1)Repeat表示不断重复;

(2)表示参数调整;

(3)η表示学习率。

4.3.2 梯度下降法二维例子

4.2节中我们已经知道了代价函数的定义,代价函数的值越小,说明模型的预测值越接近真实标签的值。代价函数中的预测值y是跟神经网络中的参数wb相关的。我们可以先考虑一个简单的情况,假如神经网络只有一个参数w,参数w与代价函数loss的关系如图4.2所示。

图4.2 参数w与代价函数loss的关系

假设w的初始值是-3,我们需要使用梯度下降法来不断优化w的取值,使得loss不断减少。首先我们应该先计算w=-3时的梯度,如图4.3所示。

图4.3 w为-3时的梯度

从图4.3中我们可以看出,当w为-3时,w所处位置的梯度应该是一个负数,梯度下降法在优化代价函数的时候,是沿着负梯度方向去减小代价函数的值的,所以负梯度是一个正数,w的值应该变大。根据梯度下降法的优化公式:

学习率η一般是一个大于0的数,为负数,我们可以判断出w的值会变大。变大的数值跟学习率η有关,也跟函数fw处的梯度大小有关。

假设w变大移动到了w=2的位置,我们需要再次计算w=2时的梯度,如图4.4所示。

图4.4 w为2时的梯度

从图4.4中我们可以看出,当w为2时,w所处位置的梯度应该是一个正数,梯度下降法在优化代价函数的时候,是沿着负梯度方向去减小代价函数的值的,所以负梯度是一个负数,w的值应该变小。

学习率η一般是一个大于0的数,为正数,我们可以判断出w的值会变小。变小的数值跟学习率η有关,也跟函数fw处的梯度大小有关。

从图4.3和图4.4中我们可以发现,不管w处于哪一个位置,当w向着负梯度的方向进行移动时,实际上就是向着可以使loss减小的方向进行移动。这就有点类似一个小球在山坡上面,它总是往坡底的方向进行移动,只不过它每一次是移动一步,这个步子的大小会受到学习率和所处位置梯度的大小所影响。

4.3.3 梯度下降法三维例子

我们可以再考虑一个稍微复杂一点的情况,假如神经网络有两个参数w1w2,参数w1w2与代价函数loss的关系如图4.5所示。

图4.5 w1w2与代价函数loss的关系

我们在图中随机选取w1w2的初始值p1p2,然后从p1p2这两个初始位置开始使用梯度下降法优化网络参数,得到如图4.6所示的结果。

图4.6 从p1p2初始点开始优化网络

从图4.6中可以看到网络参数的优化过程其实就是p1p2两个“小球“从初始点开始,每次移动一步,不断向坡底进行移动。在这个过程中,整个网络的Loss是在不断变小的。

同时我们还可以观察到一个现象,p1“小球“最后走到了图4.6中的全局最小值(Global Minimum),而p2“小球”最后走到的位置是一个局部极小值(Local Minimum)。说明我们在使用梯度下降法的时候,不同的初始值的选取可能会影响最后的结果,有些时候我们可以得到Loss的全局最小值,或者称为全局最优解。而有些时候,我们得到的结果可能是Loss的局部极小值,或者称为局部最优解。不同的权值初始值会得到不同的结果,这算是梯度下降法存在的一个缺点。

但大家不用太担心这个问题,一般实际模型训练的时候,局部极小值的情况不常出现。如果我们担心模型得到的结果是局部极小值,则可以让模型多训练几次,然后取最好的那一次的结果作为模型的最终结果就可以了。