一文弄懂梯度下降算法

news2024/11/24 15:34:24

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、总结

本文重点介绍了如何利用梯度下降法来求解线性回归问题,并给出了详细的图例说明。

您学废了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

three.js场景三元素

three.js是一个基于WebGL的轻量级、易于使用的3D库。它极大地简化了WebGL的复杂细节,降低了学习成本,同时提高了性能。 three.js的三大核心元素: 场景(Scene) 场景是一个三维空间,是所有物品的容器。可以将…

桌面提醒工具哪个好?简单好用的便签提醒app推荐

在日常的生活和工作中,我们经常会遇到各种各样的事情,有时候可能会遗忘一些重要的事情。这个时候,一个简单好用的便签提醒工具就显得尤为重要了。那么,哪款桌面提醒工具比较好用呢?下面,就为大家推荐一款我…

新手教程系列 -- SQLAlchemy对同一张表联表两次

在开发过程中,我们经常会遇到对同一张表进行多次联表查询的需求。比如在查询航线时,我们希望将起飞和降落的机场名称代入结果中。为了实现这一目标,机场名称统一存放在 AirPort 表中。下面,我们将介绍如何通过 SQLAlchemy 实现这一需求。 问题描述 一般情况我们第一时间会…

AI 激发算力需求暴增,施耐德电气解码智算中心发展

随着全球碳达峰目标的持续推进,各行各业都在加速绿色转型的步伐,尤其是高耗能产业更是备受关注。人工智能行业以其迅猛的发展速度令人瞩目,它所带来的不仅是算力需求的飙升,更是日益凸显的能耗问题。 目前,人工智能预…

11.常见的Transforms(二)

常见的Transforms(二) 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列(h,w)或者一个整…

grpc学习golang版( 八、双向流示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写client客…

远程监控在工业机械安全操作中的应用——以汽车起重机为例

远程监控技术,作为现代信息技术的重要分支,正逐渐在各个领域展现其独特的价值。从字面上理解,远程监控可以分为“监”和“控”两部分:其中,“监”指的是通过网络进行信息的获取与传递,实现远程状态的实时感…

Dominate_一个用于生成和操作 HTML 文档的 Python 库

目录 01初识 Dominate 什么是 Dominate? 为什么选择 Dominate? 安装与配置 02Dominate 的基本使用 创建简单的 HTML 文档 添加表格 嵌套结构 03Dominate 的高级功能 动态内容生成 使用…

第十九课,编写并调用自定义函数

一,函数五大组成部分 因为其重要性故再此强调,参数列表可以为任意个数,返回值只能有一个(请初学者暂时这样认为) 特殊的,如果不需要返回结果,用None替代! 二,编写自定义…

JDK线程池ThreadPoolExecutor运行原理详解

jdk线程池,是java后端处理异步任务的主要解决方案,使用广泛。jdk线程池相关的面经,网上很多,但是鱼龙混杂,很多瞎写的。要想真正了解原理,还是要看源码。所以,写一篇文章,深入的了解一下 文章目…

web项目打包成可以离线跑的exe软件

目录 引言打开PyCharm安装依赖创建 Web 应用运行应用程序打包成可执行文件结语注意事项 引言 在开发桌面应用程序时,我们经常需要将网页集成到应用程序中。Python 提供了多种方法来实现这一目标,其中 pywebview 是一个轻量级的库,它允许我们…

【渗透工具】内网多级代理工具Venom详细使用教程

免责申明 本公众号的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息…

SecureBoost:一种无损的联邦学习框架

SecureBoost:一种无损的联邦学习框架 文章目录 SecureBoost:一种无损的联邦学习框架1 引言2 预备知识与相关工作3 问题描述4 联邦学习与SecureBoost5 联邦推理6 无损属性的理论分析7 安全讨论8 实验9 结论 摘要——用户隐私保护是机器学习中的一个重要问…

MySQL高级-SQL优化- limit优化(覆盖索引加子查询)

文章目录 0、limit 优化0.1、从表 tb_sku 中按照 id 列进行排序,然后跳过前 9000000 条记录0.2、通过子查询获取按照 id 排序后的第 9000000 条开始的 10 条记录的 id 值,然后在原表中根据这些 id 值获取对应的完整记录 1、上传5个sql文件到 /root2、查看…

AV Foundation学习笔记二 - 播放器

ASSets AVFoundation框架的最核心的类是AVAsset,该类是整个AVFoundation框架设计的中心。AVAsset是一个抽象的(意味着你不能调用AVAsset的alloc或者new方法来创建一个AVAsset实例对象,而是通过该类的静态方法来创建实例对象)、不…

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数: 函数二 函数三 主函数 运行结果 src: model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征,实现高准确度的身份识别。…

多地高温持续“热力”爆表 约克VRF中央空调带你清凉舒爽一夏

“出门5分钟,流汗2小时”,夏季高温天气,怎一个“热”字了得?6月以来,我国多地迎来高温“炙烤”,全国出现40℃以上高温的范围持续增加,随着中央气象台高温预警持续拉响,人们都很纳闷:…

springboot + Vue前后端项目(第二十一记)

项目实战第二十一记 写在前面1. springboot文件默认传输限制2. 安装视频插件包命令3. 前台Video.vue4. 创建视频播放组件videoDetail.vue5. 路由6. 效果图总结写在最后 写在前面 本篇主要讲解系统集成视频播放插件 1. springboot文件默认传输限制 在application.yml文件中添…

5. Spring IoCDI ★ ✔

5. Spring IoC&DI 1. IoC & DI ⼊⻔1.1 Spring 是什么?★ (Spring 是包含了众多⼯具⽅法的 IoC 容器)1.1.1 什么是容器?1.1.2 什么是 IoC?★ (IoC: Inversion of Control (控制反转))总…

2.用BGP对等体发送路由

2.用BGP对等体发送路由 实验拓扑: 实验要求:用BGP对等体发送路由信息 实验步骤: 1.完成基本配置(略) 2.建立BGP对等体(略) 3.创建路由信息(用创建一个loop back接口就能产生一个直连…