1.导言
在数据科学领域,梯度下降算法是一个重难点。接下来,我将使用一个简单的示例,带你一起剖析梯度下降算法。
2.简介
当我第一次接触机器学习算法时, 我觉得想要对这些算法的具体内容有个直观的理解是一件非常困难的事情。
一方面是因为要理解算法本身的数学推导和符号含义很困难,另一方面是因为学习过程异常的枯燥乏味。当我在网上搜索一些教程的时候呢,我基本上只会看到一堆数学公式或者一些高深莫测的解释,没有一篇文章能够详细地介绍算法的具体细节。
后来,有一位从事数据科学领域的同事给我介绍了一种学习方法,那就是通过 Excel 学习算法。对我来说,这种办法非常的神奇。对于任何一个算法,我都会在一张小表格中学习,请相信我,它确实能很神奇地增强你对算法的理解,并帮助你去深入地欣赏算法之美。
下面,我用一个小小的例子带你深入理解。
大部分数据科学算法都是一个优化问题,而为了解决优化问题,我们最常用的一个算法就是梯度下降。
对于初学者而言,梯度下降算法乍一听好像很是高大上。希望在读完这篇文章之后,你的想法会有所改变。
我举的例子是房价预测问题。
我们有一些历史的房屋数据,而我们的目标就是建立一个模型,当输入一个新的房屋面积数据时,能够预测其价格。
任务:输入房屋面积数据(X),输出房屋的价格(Y)
首先,我们画出历史数据的折线图:
我们使用最简单的线性模型,基于历史数据得到一条直线,从而当我们输入房屋面积(X)的时候,能得到其预测价格(Ypred)。
在上图中,给定房屋面积 X 的时候,通过红色直线能够得到对应得房屋价格 (Ypred)。其关系为:
其中蓝色折线代表了历史数据中的实际房屋价格 Yactual。
预测价格 Ypred 与实际价格 Yactual 的预测误差 E,用黄色虚线表示。
我们的任务就是找到最优的 a 与 b 值,来确定一条拟合历史数据的最佳直线,从而尽量减小预测误差,提高预测准确率。
所以,我们的目标就是找到这样一对 a、b 值,使得预测误差最小(公式中的 1/2 是为了数学计算方便而引入的)。
其中:
1.SSE:Sum of Squares for Error,误差项平方和
2.Y:实际房屋价格
3.Ypred:预测房屋价格
3.具体步骤
下面我们正式进入梯度下降算法内容。梯度下降算法是一种优化算法,能够帮助我们得到最优的a、b 值,从而减小预测误差。
接下来,我们一步一步的深入理解梯度下降算法:
1.使用随机数初始化权重参数(a、b),计算误差 SSE。
2.计算梯度。当我们稍微地改变一下权值参数,SSE 也会随之产生一个很小的改变,这个就是梯度。基于这点,我们调整参数的值,使得 SSE 减小。
3.根据梯度值调整权值参数,从而减小 SSE。
4.使用新的权值参数,来得到新的模型,并计算对应得 SSE。
5.重复第二步与第三步,直到调整参数时不能改变误差为止。
现在,让我详细地介绍一下每一步的具体内容(我使用的是 Excel 表格,并放出了对应得表格数据)。但是,在此之前,我们必须对数据进行标准化处理,从而使得优化速度更快。
第一步: 使用随机数初始化权值参数(a、b),得到一条直线 Ypred = a+bX,然后计算预测误差 SSE。
第二步:计算预测误差关于权值参数的梯度。
在此,你需要知道一点微积分的知识,一点就够了。
∂SSE/∂a 和 ∂SSE/∂b 是梯度信息,代表了参数 a、b 接下来的移动方向。
第三步:根据梯度信息,调整权值参数,从而减小 SEE 的值,最终达到最优解。
图中注释翻译:
1.初始情况下,a,b 为随机值,我们位于此处。
2.当SSE达到最小,我们得到a,b 的最优值时,我们会位于此处。
我们需要去更新 a、b 的值,使其值沿着最优解的方向变化,具体改变规律如下:
根据上述的变化规律,我们可以得到如下的式子:
其中,r 代表了学习速率,其值为 0.01,这个值可以调节权值参数更新的幅度。
第四步:使用新的 a、b 值构造新的模型去预测,然后计算新的 SSE。
可以看到,新的预测模型的 SSE 值变小了,从 0.677 变到了 0.553。这也就意味着我们的预测准确率的提高了。
第五步: 重复第二步与第三步的过程,不断调节权值参数的值,直到误差不再减小为止。这样一来,我们便得到了最优的参数 a、b 值和最高的准确率。
这就是梯度下降算法。这种优化算法以及它的变形算法,是很多机器学习算法的核心,例如神经网络与深度学习。
4.注意事项
请注意,本篇文章只是一个初级的教程,有几点需要注意一下:
1.我们使用的数据是虚构的,而且数据量非常的小。为了简化示例、数据与模型,我们只引入了一个变量。
2.这篇文章的目的在于强调如何通过 Excel 表格的形式来帮助我们理解一些算法背后的数学原理,例如梯度下降算法。我并不是说,梯度下降算法要比其他算法(例如最小二乘法)的效果好或者坏。
3.本篇文章只是一个初级入门教程,使用的数据量非常的小,所以我们将整个数据全部用于训练。但是在实际应用中,我们会使用各种各样的验证技术,例如数据分为训练集与测试集,或者 K 折交叉验证的方法。
译者:奔跑的笤帚把子
审校:小译7号
编辑:孟婕
原文 https://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html
领取专属 10元无门槛券
私享最新 技术干货