上一章学习了什么是损失函数,可以看出损失函数的大小决定模型的精确程度。损失函数值越大,说明模型预测的越不准确,损失函数越小,说明模型预测的越准确。
我们当然期望损失函数值越小越好,那么通过什么方法能够使损失函数值达到最小呢?这里就要引出梯度下降算法(Gradient Descent)。
通俗解释梯度下降
先从一个生活中的例子出发,通俗的解释一下什么是梯度下降算法:
你可以想象一下,从前有座山,山里有座庙,咳咳,跑题了。假设在山顶上有一个盲人,此时这个盲人要下山,山上天气还不好,而且下山的路径还无法确定,这个盲人想要下山,就可以采用梯度下降算法。盲人以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,一直重复上述过程,那么就能够达到山底,请原谅我这糟糕的画画功底。
盲人下山图
那么有一个问题,如何找到山最陡峭的位置呢,这里就引出了我接下来要讲的梯度。
什么是梯度
首先损失函数是要可微分的,损失函数就是我们上面提的山,而我们要做的就是达到山底,也就是找到损失函数的最小值。接下来我们就要找到山最陡峭的方向,有数学基础的同学可以知道,这个最陡峭的方向也就是我们常说的斜率。而梯度就可以理解为函数的斜率,然后朝着梯度相反的方向,就能让损失函数值下降的最快。
梯度下降的数学解释
大家肯定很好奇:为什么沿着梯度相反的方向,就能让损失函数值下降的最快呢?接下来我通过举一个例子让大家彻底搞懂它。
假设我们的损失函数为J=θ^2,那么损失函数的图像为:
J=θ^2
梯度下降算法要求我们的初始点可以从任何地方出发,我们分别从左边和右边进行实验:
假设小球先从右边的θ0点出发:
小球起始点在θ0点,这个时候θ0的梯度方向为斜向上,我们沿着其梯度的反方向行走就到达了θ1点,然后在沿着θ1梯度的反方向行走,就到达了最低点。但是还有一种情况,就是万一小球沿反方向行走的步子太大,一下跨过了最低点,这可怎么办呢?不要着急,我们可以通过学习率来控制小球的步子,具体公式如下图所示:
这个θ0是起始位置,θ1是下一次移动的位置,α是学习率,用来控制小球的步长,▼J(θ)是某一点的梯度,减号()代表沿着梯度相反的方向行走。
此公式的意义是:J是关于θ的一个函数,我们当前所处的位置为θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了θ1这个点!
假设小球先从左边的θ0点出发:
小球起始点在θ0点,这个时候θ0的梯度方向为斜向上,我们沿着其梯度的反方向行走就到达了θ1点,然后在沿着θ1梯度的反方向行走,就到达了最低点。
可以看出无论小球在什么位置,采用梯度下降算法,不断地更新小球的位置,也就是不断更新我们的参数,那么损失函数的值会变得越来越小的。
我想看到这里,大家应该对梯度下降算法有所了解了,下面我们来具体计算一下我们上边举的例子吧:
可以看到θ的值不断减小,最终趋近于0,这就是梯度下降算法。