AI基础:从线性回归到梯度下降

一个简单的问题:

如果此时你正站在迷路缭绕的山坡上,能见度不高,但是你又想去往最低的山谷的位置,怎么走?

在这里插入图片描述

很简单,哪里陡那就往那里走呗——而这就是梯度下降算法的思想

古话说:“先发制于人,后发而制于人。”

想要做到有效先发呢,就得做到对事务的准确预测,要预测就得先掌握其规律。规律从哪里来?当然是从数据上来,所以关键就是要找到数据与数据之间的关联。

比如气温越高,雪糕的销售额也就越高,这个就是数据与数据之间的关联:

在这里插入图片描述

还有一个经典的例子,就是房子价格与面积的关系:

在这里插入图片描述

从所给数据不难看出二者是有正相关关系的。

但是要做到准确的预测的话必须要得到它们之间的函数关系式,这样我们只需要给出一个面积值那么立马就能直接得到价格是多少了。

要求函数关系式的话,那么需不需要做一条曲线将坐标系中的所有的点都穿过去呢?明显是不可以的,因为当有新数据再加进来的时候,往往新数据根本就不在这条曲线上:

在这里插入图片描述

这样吃力不讨好的行为(勾画曲线),通常叫做过拟合

对于这种明显有相关关系的数据往往最朴素的方法反而效果更好,直接用一条直线去拟合这些数据:

在这里插入图片描述

直线的话就好搞了,就是一次函数 y=kx+b 嘛,只要把这条直线的斜率和截距都找到的时候,那么这条直线就自然被找出来了。

而我们找到最合适的这条直线的这些动作,我们就称作线性回归

那么哪条直线更合适呢?毕竟有那么多:

在这里插入图片描述

这很难说,那么既然很难决定,那就全部一起考虑,跟选秀一样,到时候留下最合适的那个就可以了。

既然是选秀,那么就会有标准,标准是什么呢?

以下图中的一条黑线和红线为例,这两条都是拟合真实数据出来的直线(二者都是理想化的估算数据):

在这里插入图片描述

不难看出二者与真实数据之间都是有差距的,但我们可以把每个点的真实数据和估算数据的误差给算出来,在图上可以表现为真实数据竖直到这条线的距离是多长:

在这里插入图片描述

可以明显看到,黑线的距离之和是要比红线的距离之和要短的,那么我们就可以认为黑线更优秀,和原数据更加符合。

接下来使用数学语言来描述一下这个事情:

假如真实数据是 y1, y2, y3, y4, y5,而估算数据是 y^ = kx+b:

在这里插入图片描述

那么其距离之和可以表示为:

在这里插入图片描述

但是此时有一个问题,点在线上方的距离算出来是正的,而点在线下方算出来的距离呢则是负值:

在这里插入图片描述

一正一负相加是会抵消掉一些距离的,那么算出来的结果肯定就会出问题,为了消除正负距离带过来的影响,我们可以对每一项进行取平方的操作:

在这里插入图片描述

这样再加起来就正确了,这同样可以反映出距离之和的大小。

但还有一个新的问题,假如红线不取五个点,而是取十个点怎么办?因为取的点越多那么累加的距离的平方和肯定就越大,所以在取样点的数量不一样的时候是根本没办法比较的,这怎么办?答案就是对他们取平均,主打一个众生平等:

在这里插入图片描述

这样取平均之后就可以进行比较了,那么这样的话选秀的标准也就自然出来了:

在这里插入图片描述

上面这个值谁求出来的小,那么谁的线就和原数据符合的越好。其还有另外一个名称:平均平方误差MSE

想要解决一负一正相加抵消的问题,那在这里不取平方取绝对值可以吗?

当然可以,取绝对值的方式叫做平均绝对误差MAE

在这里插入图片描述

二者在不同的场景之下有不同的优缺点,但是对于梯度下降呢我们一般使用MSE,因为MSE的数学性质更好一些(肯定比求绝对值好算啊)。

在上面的情况中,在少数几条直线的情况下,可以一眼就看出来或者说是稍微的计算一下就可以得出来拟合的较好的直线,但是如果候选者有无数多个,怎么办呢?

简单列个表可能更清晰一些:

在这里插入图片描述

我们的任务就是把所有的这个MSE的值全算出来然后挑出来最小的那一个 Zmin,而最小的那一个它所对应的 k 值和 b 值就是你要找的直线了。

上面的过程简单说就是通过一个 k 一个 b 值来计算 MSE 值 z,而这不就是一个以 k 和 b 为自变量,z 为函数值的二元函数吗?

在这里插入图片描述

而二元函数长什么样?可以简单的看一下其几何图像:

在这里插入图片描述

而这个 f(k , b) = z 这个函数也被称为损失函数,刚刚不是说任务就是要把这些 z 当中的最小值 Zmin 给找出来吗?对应到这个损失函数其实也就是要把这个损失函数的最低的位置找出来。

那么现在我们的任务就变成了找到这个山谷的最低的位置了,要讲明白下山,我们就得从上山讲起:

在这里插入图片描述

其实就像地图一样,方便我们定位和指路,如果能有一个像导航一样的上山神器就好了。

还真有!其实就是以前学习过的导数

我们先看二维坐标系下的导数的相关概念,下图是一个一元函数 f(x),假如现在我们是在 x0 的位置,我们可以对这个点求导数,也就是这个点的切线的斜率,可以看到在 x0 这一点上的导数值是大于 0 的:

在这里插入图片描述

导数值大于 0 实际上就是在告诉我们这个 x0 要往增大的方向走函数值才能变大才能上坡

再看一个点 x1,该点上切线斜率实际上是小于零的,这就意味着这个 x1 要往减小的方向去走函数值才能变大才能上坡:

在这里插入图片描述

这样一看使用导数值来指明方向还挺好用的,但是只告诉了方向还不太够啊,最好是还能告诉我一步要走多远,然后走到顶了最好还可以叫我停下来这样是最好的。

恰好导数也能够做这个事情

我们直接拿导数的大小作为步子的长短,假如我们还是在 x0 的这个位置,然后求出这一点的导数是等于二的,那么我们直接拿这个二作为步子的长短,x0 呢就应该要往增大的方向加二来到这个位置对应的函数值。重复这个步骤,随着越来越靠近山顶的位置,坡度就越来越小,那么步子呢也会越来越小,来到山顶的时候导数为零那么直接就是不走了,而这就是我们想要的:

在这里插入图片描述

找新落脚点的这个动作我们还可以使用数学语言描述出来,假设现在所在的点是 Xn,对该点求导数将其作为前进的步长就把它直接加上去,得到的结果呢作为下一个点的落脚点:

在这里插入图片描述

当然这是一个最理想的状态,万一 X0 这个位置的切线斜率太大了导致跨的步子大了一些,直接一步跨过了山顶的位置来到了对面的位置,不过这也不用慌,因为此时求导数值小于0,它还是会回来的,往复循环最终也能到达山顶:

在这里插入图片描述

真正麻烦的其实是下面这几种情况,一步刚好跳到了对称的位置,因为是对称的所以求导数再往回跳就又跳回了原来的位置,然后就会一直反复横跳根本停不下来:

在这里插入图片描述

还有一种是从一个位置直接跳到了斜率更大的地方,然后它又会往回跳跳到更远的地方去了,随着循环它就会越跳越远越跳越远然后直接爆炸。

还有这种不止一个山顶的,前面的坡太小导致每一步的步伐也很小,当来到第一个小山顶的时候迈不过去了,你就会以为你已经来到了最高的位置就不走了,陷入了局部最优解:

在这里插入图片描述

因此我们在更新位置的时候一般会对这个每一步的长短呢做一个控制,也就是直接在这个导数面前乘以一个系数α,来改变其步长大小。而这个系数,我们又称之为学习率。学习率也不一定是个定值,主要是看你的策略。

那么上面讲的这些个东西是怎么应用到二元函数上面去的呢?

首先不难得知,二元函数的方向有两个,一个是 k 方向,一个是 b 方向,而上山的方向则可以看作是这两个方向的合成。这和地图上是一样的:往东走再往北走,其实等价于往东北方向走嘛:

在这里插入图片描述

既然我们要走的方向是上坡,那方向分解到 k 方向和 b 方向呢也应该都是上坡的,如何分解?

假如现在所在的位置是 K0 、B0,它所在的这条经纬线,我们沿着 K 轴的方向看过去,实际上它就是 BOZ 平面上的一条曲线:

在这里插入图片描述

而在 B 的方向上要上坡,那么直接对 B0 这个点求导不就可以了吗?

在这里插入图片描述

而因为上图中这条线是垂直于这个 K 的方向截出来的,这条线上所有的 K 值都是 K0 不变的,把 K 的值当常数然后再对 B 求导,这不就是对于二元函数来求 B 的偏导吗?然后再把 B = B0 这个点带进去所得的值就是 B 的值的变化量啦:

在这里插入图片描述

同理对于 K 值的变化量我们只需要换一个方向也就很好求解出来了,也是一个求偏导的操作,然后我们就得到了:

在这里插入图片描述

得到的这两个偏导值既告诉了 K 和 B 的方向怎么走,然后呢变化量是多大,所以这个东西不就是一个向量吗?

这个向量的名字呢,就叫做梯度

要注意一下,这个梯度指明了 K 方向和 B 方向的变化量,所以梯度应该是这个 KOB 平面上的一个二维向量,怎么理解?用一些具体的数字来看一下吧。

假如现在所在的点是 (1,2),然后求出来梯度的向量呢是(2,3),那么我们的下一个落脚点就应该是 1+2 = 3,2+3 = 5,也就是落脚点在点(3,5)的位置。

梯度是上山的方向,那么下山咋办?注意一点,这里的山是连续可微的,那直接沿着上山的方向反着走不就下山了吗?

从数学上看就是直接求出这个梯度向量,然后在它前面乘以 -1 ,然后再沿着这一个方向走,就可以下山去了呀(也就是梯度下降的形象化表示)。

因此再看回来这一幅图:

在这里插入图片描述

假设当前所在位置在 (Kn,Bn),那么下一个落脚点表示为 (Kn+1,Bn+1),按照我们上面说的,那么 Kn+1 就应该等于 Kn 加上 沿着反梯度的方向也就是减去它的导数,同理 Bn+1 也是一样。那么就可以得到如下式子:

在这里插入图片描述

当然别忘记了要在偏导前面乘上一个学习率α控制步长嗷:

在这里插入图片描述

最后当这个偏导逐渐为 0 的时候,也就意味着你走不动了,也就来到了最低的位置了。

而此时所得到的 K 值和 B 值呢,就是我们之前线性回归时心心念念的直线的斜率和截距了。

这便是梯度下降算法的第一印象了。

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

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

相关文章

java基于ssm+jsp 电子商城系统

1管理员功能模块 管理员登录,通过填写用户名、密码进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入电子商城系统可以查看个人中心、用户管理、医生管理、药品信息管理、线上诊疗管理、医生信息管理、管理员管理、论坛管理、系统管理、订单管…

行业推荐!IG5216量产工具下载,IG5216开卡软件分享

国内固态硬盘常用,且有量产工具流传出来的主控厂商包括慧荣、群联、点序、英韧、得一微、瑞昱、联芸、迈威、国科、华澜微等等。 每个主控需要用各自对应的量产工具,不同的量产工具支持的闪存颗粒也有差异,因此要根据固态硬盘实际的主控型号…

气膜建筑审批流程及现状分析—轻空间

气膜建筑作为一种新兴的建筑形式,以其快速建造、成本低廉和灵活多变的优势在各个领域得到了广泛应用。然而,气膜建筑在我国尚未被纳入正式的建筑规范,这使得其审批流程与传统建筑有显著差异。轻空间将详细探讨气膜建筑的审批流程及其在实际操…

MongoDB:JSON and BSON

目录 什么是 JSON MongoDB-JSON连接 什么是 BSON MongoDB 使用 BSON 还是 JSON JSON 与 BSON 架构灵活性和数据治理 JSON 和 BSON 是近亲,正如它们几乎相同的名称所暗示的那样JSON(即 JavaScript 对象表示法)是网络上广泛流行的数据交换…

Transformer 结构

目录 一、Transformer 的整体结构二、Input Encoding三、Transformer Block3.1 Encoder3.1.1 Attention3.1.2 Self-attention3.1.3 Multi-head Attention 3.2 Decoder3.2.1 Masked Multi-head Attention 四、Transformer 的优缺点 遇到看不明白的地方,欢迎在评论中留…

Leetcode 矩阵问题

36题.有效的数独 此类问题特点是给出行列的多种限定条件,数独限制每行每列每个小九宫格元素范围为1-9且不可重复 。解决此类问题最简单的想法就是使用哈希set,记录每行,每列,每个小九宫格已经出现的元素。在遍历矩阵时提前做出是否…

S32K3 --- Wdg(内狗) Mcal配置

前言 看门狗的作用是用来检测程序是否跑飞,进入死循环。我们需要不停地喂狗,来确保程序是正常运行的,一旦停止喂狗,意味着程序跑飞,超时后就会reset复位程序。 一、Wdg 1.1 WdgGeneral Wdg Disable Allowed : 启用此参数后,允许在运行的时候禁用看门狗 Wdg Enable User…

技术干货丨如何加速工业数字孪生应用落地?

什么是数字孪生? “孪生”概念最早可追溯至NASA的阿波罗项目,随着数字化技术的进步,“孪生”概念应用从物理孪生向数字孪生发展。即“数字孪生”是对资产、进程或系统的一种数字化表示,并通过信息交互、数据同步等方式实现物理实体…

Java校园跑腿小程序校园代买帮忙外卖源码社区外卖源码

🔥校园跑腿与外卖源码揭秘🔥 🚀 引言:为何需要校园跑腿与外卖源码? 在快节奏的校园生活里,学生们对于便捷、高效的服务需求日益增长。校园跑腿和外卖服务成为了解决这一需求的热门选择。然而,…

实时智能全托管-云器Lakehouse重新定义多维数据分析

导读 本文将分享云器Lakehouse如何重新定义实时多维分析,帮助客户实现实时、智能、全托管的数据平台。主要内容包括以下几大部分: 多维数据分析的发展趋势和场景解析 技术解析:新一代数平台Lakehouse如何支持实时分析需求 价值解析&#x…

嵌入式linux系统中面试过程经验分享

大家好,今天主要给分享一下,如何在面试中介绍自己的项目经验,希望对大家有所帮助。 在面试时,经过寒暄后,一般面试官会让介绍项目经验。常见的问法是,说下你最近的(或最拿得出手的)一个项目。 根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚…

vscode在windows系统上进行C/C++环境配置

随手笔记前言 vscode在windows系统上进行C/C环境配置 步骤如下 第一步 下载安装VSCode 这应该是最简单的一步,相信大家自己就可以完成。如果在vscode官网感觉下载特别慢的话,可以去试一下腾讯软件中心,我都是在这个网页上下载的。下载好之…

26、 MySQL数据库基础练习系列股票交易系统基础查询和复杂查询

5、基础查询 -- 1、查询用户信息仅显示姓名与手机号 SELECT username as 姓名,phone as 手机号 from users;-- 2、模糊查询和explain语句 alter table stocks add index stock_name_index(stock_name); explain SELECT * from stocks where stock_name like %东吴证券%; -- 3、…

【AIGC X UML 落地】从UML语句到UML图形的生成,来看Agent插件的制作

上篇我们讲到如何通过多智能体实现自然语言绘制UML图。 没有看过的,可以去看下原文:《【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图》 其中有一个实现重点,就是如何将 PlantUML 语句生成 UML 图片。在这里笔者是通过自定义 Agent 插件来实现这一流程。 本文,就此…

面试-javaIO机制

1.BIO BIO:是传统的javaIO以及部分java.net下部分接口和类。例如,socket,http等,因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能,譬如基于字节流的InputStream 和OutputStream.基于字符流…

Vue 项目运行时,报错Error: Cannot find module ‘node:path‘

Vue 项目运行时,报错Error: Cannot find module ‘node:path’ internal/modules/cjs/loader.js:883throw err;^Error: Cannot find module node:path Require stack: - D:\nodejs\node_modules\npm\node_modules\node_modules\npm\lib\cli.js - D:\nodejs\node_mo…

问题解决:python安装依赖时网络问题报错

进行 pip install 时,安装轮子访问过慢而造成安装失败,有时候配置镜像源仍会出现莫名其妙的问题,包括网络代理问题等。看了一些解决方案,找出了一个最适合的方式,如下所示: pip install -i https://pypi.t…

linux 离线安装docker

测试服务器:银河麒麟V10 x86_64 注意:推荐使用国内的镜像站下载,因为官网不挂梯子无法访问,我用的是清华大学开源软件镜像站 一、下载离线包: 官网下载docker离线包 下载地址:https://download.docker.c…

使用VisualStudio2022制作安装包

总体介绍 解决方案里面需要有三个项目: Winform程序, Setup Project , 自定义配置项目(安装程序类) 1, Winform程序 就是你要打包的程序 2, Setup Project 就是制作安装包的 3, 自定义配置项目(安装程序类): 一个命令行项目里面只有一个安装程序类,用来控制安装后自动打开程序…

Windows USB设备驱动开发 - 常见概念的解释

我们听到许多 USB 术语几乎交替抛出。 它们都是什么意思?假设我们看到类似 “多亏了 USB 3.0,我可以将 SuperSpeed U 盘连接到电脑的 xHCI 主机控制器,并更快地复制文件。” 让我们了解该句子中的 USB 术语。 USB 3.0、USB 2.0 和 USB 1.0 请…