做暧网站免费,新手制作网页的方法,锐途网站建设,好用的h5制作软件1、引言
在上一篇文章中#xff0c;我们介绍了如何使用线性回归和成本损失函数为房价数据找到最拟合的线。不过#xff0c;我们也看到#xff0c;测试多个截距值可能既繁琐又低效。在本文中#xff0c;我们将深入探讨梯度下降算法#xff0c;这是一种更加强大的技术…1、引言
在上一篇文章中我们介绍了如何使用线性回归和成本损失函数为房价数据找到最拟合的线。不过我们也看到测试多个截距值可能既繁琐又低效。在本文中我们将深入探讨梯度下降算法这是一种更加强大的技术可以帮助我们找到完美的截距并进而优化模型。我们将探究其背后的数学原理看看如何将其应用到线性回归问题中。
闲话少说我们直接开始吧
2、梯度下降
梯度下降是一种强大的优化算法旨在快速有效地找到曲线的最低点。将这一过程形象化的最佳方式就是想象你站在山顶山谷中有一个装满黄金的宝箱在等着你。 然而山谷的确切位置却不得而知因为外面一片漆黑什么也看不见。此外你还想赶在其他人之前到达山谷因为您想独自拥有所有宝藏。梯度下降算法可以帮助你驾驭地形高效快速地到达最佳点。在每个点上它都会告诉你需要走多少步朝哪个方向走。
同样梯度下降算法的处理步骤也可以应用于线性回归问题。为了直观地展示寻找最小值的过程让我们绘制 MSE 曲线。我们已经知道该曲线的方程为
从上一篇文章中我们知道问题中的 MSE 方程为
如果我们把视角放大就会发现在上式中代入一系列截距值就能得到一条 MSE 曲线与我们的山谷相似。因此让我们输入 10,000 个截距值就能得到这样一条曲线
我们的目标是达到 MSE 曲线的底部我们可以通过下面的来步骤实现这一目标。
3、步骤一随机初始化
在这种情况下我们可以从截距值随机初始化开始这里假设我们最初猜测的截距值为 0。
4、 步骤二计算梯度值
曲线在某一点处的梯度值用该点的切线表示切线是曲线在该点与曲线相切的一种特殊说法。例如在 A 点当截距等于 0 时MSE 曲线的梯度可用红色切线表示。 为了确定具体梯度值我们需要运用微积分的知识。具体来说梯度等于曲线相对于给定点截距的导数计算公式表示为
我们据此计算 MSE曲线在截距为零处的导数如下
现在为了求出在A点的梯度我们将 A 点的截距值代入上式。由于截距 0所以 A 点的导数为
因此当截距为0时梯度值为-190。 注意当我们接近最佳值时梯度值将趋近于零。在最佳值处梯度值等于零。相反离最佳值越远梯度值越大 由此我们可以推断步长应该与梯度有关因为梯度会告诉我们应该迈小步还是大步。这意味着当曲线的梯度值接近 0 时我们就应该迈小步因为我们已经接近最优值了。而如果梯度较大我们就应该迈大步以便更快地达到最优值。 注意如果我们迈出了超级大的一步那么我们可能会跳得很大错过最佳点。因此我们需要小心谨慎。 5、步骤三更新
由于我们看到步长和梯度成正比因此步长是通过梯度乘以一个预先确定的常量值称为学习率来确定的
学习率控制步长的大小确保步长不会过大或过小。 实际上学习率通常是一个小正数即 ≤ 0.001。但对于我们的问题让我们把它设为 0.1。 因此当截距为 0 时计算步长公式为 根据上述计算出的步长我们使用以下任何一个等效公式更新截距又称更改当前位置 要在这一步中找到新的截距我们只需要代入相关的值如下 求解得到新的截距 19。现在将这个值代入MSE 等式我们会发现截距为 19 时的 MSE 8064.095。我们又一步就接近了最佳值降低了 MSE。 即使观察我们的图表也会发现截距为 19 的新直线比截距为 0 的旧直线更适合我们的数据如下 6、步骤四重复
接着我们使用更新后的截距值来重复步骤 2 和 3。
例如由于本次迭代的新截距值为 19因此在步骤 2 之后我们将计算这一新点的梯度
我们发现在截距值 19 处MSE 曲线的梯度为-152如下图中红色切线所示。 接下来根据步骤 3我们来计算步长
随后更新截距值
现在我们可以将截距为 19 的直线与截距为 34.2 的新直线进行比较如下
我们可以看到新的直线更加符合数据的分布。总体而言,MSE 越来越小。
而我们的步长却越来越小
我们反复重复这一过程直到趋近于最优解
当我们向曲线的最小点前进时我们发现步长越来越小。13 步之后梯度下降算法估计截距值为 95这将被确认为 MSE 曲线的最小点。很明显这种方法比我们在上一篇文章中看到的 暴力 方法更有效。
现在我们有了截距的最佳值线性回归模型就应该是这样
线性回归方程线可视化是这样的
最佳拟合线截距95斜率0.069
最后回到马克朋友的问题–他的 2400 平方英尺的房子应该卖多少钱
将 2400 平方英尺的房屋面积代入上式计算结果如下 然后就可以了。我们可以告诉我们这位杞人忧天的朋友马克根据他所在社区的 3 所房子的情况他应该以 26.06 万美元左右的价格出售自己的房子。
7、 为什么梯度下降有用
为了说明这一点请考虑这样一种情况我们试图到达曲线 C 的最小点记为 x*。而我们目前在 A 点位于 x* 的左边
如果我们求出曲线在 A 点相对于 x 的导数表示为 dC(x)/dx会得到一个负值这意味着梯度是向下倾斜的。我们还观察到我们需要向右移动才能到达 x*。因此我们需要增加 x 才能达到最小值 x*。
由于 dC(x)/dx 为负值x-*dC(x)/dx 将大于 x从而向 x* 移动。
同样如果我们位于最小点 x* 右侧的 A 点那么我们会得到一个正梯度梯度向上倾斜即 dC(x)/dx。 因此 x-*dC(x)/dx 将小于 x从而向 x* 移动。
8、梯度下降什么时候停止
因此当某一点的梯度接近 0 或在最小点附近时步长也将接近 0表明算法已达到最优解。
当我们接近最小点时梯度接近 0因此步长也接近 0 通常最小步长 0.001 或更小 尽管如此梯度下降法也有一个在终止前的步数限制称为 “最大步数”。 通常最大步数 1000 或更大 因此即使步长大于最小步长如果步数超过最大步数梯度下降算法也会停止。
9、多个局部最优解
到目前为止我们一直在处理一条很容易确定最小点的曲线这类曲线称为凸曲线。但如果我们有一条不那么漂亮的曲线技术上又称非凸曲线看起来像这样呢
在这里我们可以看到 B 点是全局最小值实际最小值而 A 点和 C 点是局部最小值可能会被混淆为全局最小值的点但其实不是。因此如果一个函数有多个局部最小值和一个全局最小值并不能保证梯度下降一定能找到全局最小值。此外找到哪个局部最小值还取决于初始猜测的位置如梯度下降的步骤 1 所示。 以上面这条非凸曲线为例如果初始猜测点位于block A 或block C梯度下降算法会宣布最小点分别位于局部最小点 A 或 C而实际上它应该位于 B。
现在的问题是我们如何做出正确的初始化猜测
答案并不简单从上图中可以看出如果我们对 x 的最小值猜测是 0因为它位于图块 A 中那么它将导致局部最小值 A 的出现。此外如果可行的话使用不同的初始化猜测运行算法并比较其结果可以让我们了解猜测之间是否存在显著差异。这有助于更有效地确定全局最小值。
10、总结
本文重点介绍了如何利用梯度下降法来求解线性回归问题并给出了详细的图例说明。
您学废了吗