【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. 机器学习

2.1 机器学习简史

2.2 机器学习模型

3 线性回归

3.1 线性模型

3.2 目标函数(损失函数)

3.3 优化

3.4 批量输入

3.5 训练

4. 总结


1. 前言

        进入这篇文章之前,想必大家已经阅读过前面的【PyTorch入门】系列文章~~

        从本篇文章开始,我们将进入深度学习基础的学习。首先我们需要对机器学习、深度学习等基本概念有一个了解;然后,我们需要对人工智能整个历史发展有一个了解。

  • 机器学习、深度学习等基础概念。
  • 人工智能发展历史。

2. 机器学习

        在很多科幻电影中,时常会出现一些具有独立思考能力的机器人,这些机器人的智力和人类的相当,甚至超过了人类。银幕上的人工智能形象让人印象深刻、充满幻想。但是在现阶段的现实世界中,我们距离那样的“强人工智能”还有很长一段距离,平时在广告或技术文档中提到的人工智能通常指的是“弱人工智能”。在学术界,研究者们尝试着用各式各样的方法来实现人工智能,因此,该研究领域十分宽泛。如下图所示,人工智能包含机器学习领域,而神经网络是机器学习的一个子领域。本书主要介绍的是神经网络的子领域一深度神经网络,也就是我们常说的“深度学习”

  • 深度学习就是深度神经网络去学习。
  • 深度神经网络是神经网络的一部分。
  • 神经网络又是机器学习的一个研究领域。
  • 人工智能还有强化学习、联邦学习、迁移学习等,都不是机器学习。
  • 机器学习中除了神经网络还有SVM、KNN聚类等学习算法,但是数学理论复杂。
  • 神经网络本质就是函数拟合数据,是机器学习中最重要的一块。
  • 扩展神经网络的连接层深度就是深度神经网络,也就是深度学习。

2.1 机器学习简史

        早在古希腊时期,人们就梦想着能创造出有自主思考能力的机器,这不论在文学作品中还是历史文档中都能找到印迹。在电子计算机还没有被发明之前,发明家们做了很多尝试,但都因机器结构过于简单而失败。第二次世界大战期间,美国为了处理大量的军事数据,组织研究小组研发了第一台电子计算机,电子计算机的发明更加激发了人们对人工智能的向往。1950年,艾伦·麦席森·图灵提出了“图灵测试”理论,也让图灵摘得了“人工智能之父”的桂冠。如今,人工智能已经成为一个学术研究热点和商业市场焦点,且正在快速发展。从20世纪50年代开始,机器学习就是人工智能的重要领域之一,此概念是由Hebb在1949年根据神经心理学的学习原理提出来的。随后在1952年,美国计算机科学家ArthurSamuel为机器学习作出更明确的定义,“机器有能力去学习,而不是通过预先准确实现的代码”。下图展示了各机器学习算法的里程碑时间轴。

        1957年,Rosenblatt基于神经科学提出了机器学习的经典模型之一一感知器模型。感知器模型的意义非凡,它表示:对复杂智能活动的研究可以从对简单感知器模型的研究开始。感知器模型抽象了复杂的生物细胞结构,可以说是神经网络的“鼻祖”。在1969年,人工智能科学家基于对感知器的研究,提出了多层感知器的构想,我们后来将其称为“神经网络”。最初,由于“神经网络”结构复杂且无法找到合适的训练方法,它的发展停滞不前,直到1981年,Linnainmaa提出反向传播训练算法(Backpropagation,BP算法),成功实现了神经网络的有效训练。如今,反向传播算法仍然是深度神经网络的核心训练算法。基于这一训练算法,人工智能科学家们对各种结构的神经网络进行了大胆的尝试,逐渐从浅层结构走向深层结构

  • 感知器模型是初始模型。
  • 多层感知器:神经网络模型的鼻祖。
  • 训练方法导致神经网络发展停滞,直到反向传播算法出现。
  • 反向传播算法+梯度下降算法 的出现使得神经网络从浅层走向深层

        科学家们除了对脑神经的联结方式进行模拟之外,也基于符号逻辑方法进行了尝试。1986年,J.R.Quinlan提出决策树模型,该模型能够处理较为简单的分类学习问题。1995年,Vapnik和Cortes提出了著名的“支持向量机”算法(SVM算法),该算法拥有非常坚实的数学理论基础并且能得到理想的分类结果。当时出现了两大人工智能阵营,一个以“神经网络”为核心,主张联结主义;一个以“支持向量机”为核心,主张符号逻辑方法。从1995年提出SVM算法到2005年,这期间SVM以其更好的分类效果及更低的训练成本赢得了大多数人工智能科学家的青。直到2005年,以Hinton、LeCun、Bengio和AndrewNg等众多人工智能科学家为首,成功地训练了结构更深的神经网络,并且计算结果达到了前所未有的正确率,从而开启了深度学习革命,让神经网络模型再度成为研究热潮。

2.2 机器学习模型

        深度学习是机器学习的一个分支,所以在学习深度学习之前,我们先探讨一下什么是机器学习。假设世界上任意一个现象背后都存在规律。这个规律可以看作一个复杂的函数f。从哲学的角度来看,世间万事万物的规律函数f就是我们所追求的真理。从机器学习和数学角度去看,f是我们的目标函数。

        人类天生具有学习能力。比如一听到打雷,就知道将晒在外面的衣服收回来。打雷可能下雨这个规律是人类通过长期观察现实世界后总结出来的规律。但是世界如此之大,我们眼晴看到的、耳朵听到的事物无论在时间上还是空间上都非常有限。因此,人类通过观察局部世界所总结出来的规律只能不断接近于事物的本质,无法完全相同。从数学角度看,人类所观察的现象就是目标函数f产生的样本集D。我们通过不断地观察现象、进行总结,会得到规律函数g,因为现实中所观察到的现象往往包含误差或干扰,并且样本数不可能无限多,所以规律函数g只能趋近目标函数f,不可能完全相等规律函数g越趋近f,说明我们的总结归纳越好、理论越完备

        机器学习就是让机器代替人类去观察样本、求解函数g的过程。如图3-3所示,未知目标函数
f:X→Y通过取样得到数据样本集D={(x,y),...,(xn,yn)}。机器学习算法A负责从数据样本集D中找出统计规律,算法A会在假设函数集H中找出规律函数g,找到的规律函数g与目标函数f越相似,
找到的规律就越可靠。最终我们可以找到一个与f最相似的规律函数g,它就是机器所学习到的“知识”

3 线性回归

        上一节描绘了机器学习模型的概貌,其实在实际应用中,许多统计问题经常被近似为线性模型,因为线性模型非常简单明了,容易模拟。在这一节中,我们也将线性回(LinearRegression,LR)模型当作深度学习入门的第一个模型,用一个简单的线性回归实例来帮助大家了解机器学习模型的实现过程,现在就让我们一起动手实现它吧!

3.1 线性模型

        我们在进行机器学习之前需要准备好数据样本集D,假设数据样本集D种有5个样本,它们的具体数值如下表所示:

        我们利用scatter()方法绘制散点图。需要注意的是,在使用matplotlib 绘制图形时,传人的预Tensor必须先转换成NumPy数据:

import matplotlib.pyplot as plt # 用来画图的库
import torch

x = torch.Tensor([1.4, 5, 11, 16, 21])
y = torch.Tensor([14.4, 29.6, 62, 80, 119.4])
# .numpy():把Tensor转化为numpy数组。
plt.scatter(x.numpy(), y.numpy())
plt.show()

        数据样本集D中的样本分布情况如下图所示。通过观察,我们会发现这5个点符合一种线性的规律,也就是说可以通过一条直线去拟合5个点。

        因为我们假设使用一条直线去拟合,所以依据二维平面中直线的数学公式:

y=kx+b

        公式中的k是斜率,b是截距,又称偏置(bias)。可以发现,不同的k和b的组合可以代表不同的直线,所以,k和b非常重要,我们又称它们为参数(parameter),有时候也称它们为权重(weight)。既然如此,寻找直线的问题就转化成了找寻一组合适的(k,b)。为了统一,我们用w1代替k,用w0代替b,新公式如下:

y=w_1x+w_0

3.2 目标函数(损失函数)

        上一节,我们的目标是找到一组合适的(w1,w0)。假设最初的(w1,w0)是随机的,为了方便区分,那么我们可以把上面的数学公式中的y改写成\widehat{y}

\widehat{y}=w_1x+w_0

        如下表所示,\widehat{y}^{(i)}是由样本中的\widehat{x}^{(i)}传人线性模型后计算得到的输出,{y}^{(i)}是我们真实测量拿到
的样本值。

        因为一开始w1和w0的值不一定是准确的,所以5个数据样本的实际y值与公式下的y值不是完全相等的。现在,我们用一个函数去衡量实际y值和公式y值之间的误差,这个函数有很多名字——损失函数(lossfunction)、准则(criterion)、目标函数(objectivefunction)、代价函数(costfunction)或误差函数(errorfunction),我们可以用L表示。

        在这里,采用的损失函数是均方误差(Mean-SquareError,MSE):

L(w_{1},w_{0})=\sum_{i=1}^{5}(\hat{y}^{(i)}-y^{(i)})^{2}=\sum_{i=1}^{5}(w_{1}x^{(i)}+w_{0}-y^{(i)})^{2}

        可以发现,损失函数L实际是一个关于参数(w0,w1)的函数。因此,我们的目标就是找到一组合适的(w0,w1)使得y^{(i)}\hat{y}^{(i)}之间误差最小,即让损失函数L的值最小。

3.3 优化

        为了让损失函数L的值降到最小,我们要开始调整参数(w1,wo)的值!这个过程就称为优化。L(w0,w1)是一个拥有两个自变量的函数,因此画出来的图形是一个三维的图像,如下图所示。我们要找的最小值就是图像的谷底。

        这里我们采用一种叫作“梯度下降”的方法,这样不论是从图中A点还是B点,都可以最终抵达谷底。什么是梯度?从数学上来看,梯度是一个向量,可以用符号V表示,是函数对每个自变量的偏微分,L的梯度的具体数学表达如下:

\nabla L=(\frac{\partial L}{\partial w_{1}},\frac{\partial L}{\partial w_{0}})

        我们现在将函数想象成一座山。梯度向量的方向刚好和等高线垂直。也就是说,梯度向量代表着函数增长速度最快的方向。如图下图所示,我们朝着梯度向量的反方向移动,梯度向量的反方向始终朝着下降速度最快的方向,最终到达谷底(最低点),这种方法我们称为“梯度下降”。

        上面讨论的是三维的情况,可能比较抽象。我们现在把问题假设成二维的情况:如下图所示,假设t时刻的参数w在最低点的右侧,此时wt处的导数值大于0,w要往数轴左方移动才能让
函数值最小。因此我们不妨使用如下公式进行更新:

w^{t+1}=w^t-\frac{\mathrm{d}L}{\mathrm{d}w^t}\times\delta\quad(\delta>0) 

        这里 \delta就是学习率,是自定义的一个超参数。其越大表示下降越快,越小下降越慢。

        当然在三维、四维甚至无限维度的情况下,仍然成立。具体公式可以修改为:

w_{1}^{t+1}=w_{1}^{t}-\frac{\partial L}{\partial w_{1}^{t}}\times\delta \\w_{0}^{t+1}=w_{0}^{t}-\frac{\partial L}{\partial w_{0}^{t}}\times\delta

3.4 批量输入

        将原本的样本增加一个维度B,表示批次,也就是我们熟知的batch。作用为让多个数据样本同时被处理,从向量变为矩阵,公式都不改变。具体见后面的代码项目部分即可。

3.5 训练

        训练就是不断地通过前向传播和反向传播,对参数w进行调优,最终让损失函数的损失值L达到最小的过程。如下图所示,我们将前向传播分为两步:第1步是将输入x和参数w按照直线公式计
算后得到输出;第2步是将输出和输入损失函数计算后得到损失值L。接着进行反向传播,即求出损失值的梯度向量\Delta L,然后使用梯度下降法更新参数W。

4. 总结

如果想要学习更多深度学习知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

硬件电路基础

目录 1. 电学基础 1.1 原子 1.2 电压 1.3 电流 1.电流方向: 正极->负极,正电荷定向移动方向为电流方向,与电子定向移动方向相反。 2.电荷(这里表示负电荷)运动方向: 与电流方向相反 1.4 测电压的时候 2. 地线…

【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现

项目介绍 本课程演示的是一款基于Python爬虫二手房价格预测与可视化系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项…

【数据结构】树哈希

目录 一、树的同构1. 定义2. 具体理解(1) 结点对应(2) 孩子相同(3) 递归性质 3. 示例 二、树哈希1.定义2.哈希过程(1)叶节点哈希(2)非叶节点哈希(3)组合哈希值 3.性质(1) 唯一性 \re…

渗透测试之文件包含漏洞 超详细的文件包含漏洞文章

目录 说明 通常分为两种类型: 本地文件包含 典型的攻击方式1: 影响: 典型的攻击方式2: 包含路径解释: 日志包含漏洞: 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…

Mysql:数据库

Mysql 一、数据库概念?二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…

ChatGPT怎么回事?

纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT&#xf…

Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)

目录 前言1. 思路Demo2. 实战Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考,需要结合实际自身应用代码 下述URL的链接使用百度替代! 方式 1…

【Linux】23.进程间通信(2)

文章目录 3. 进程间通信3.1 进程间通信介绍3.1.1 进程间通信目的3.1.2 进程间通信发展 3.2 什么是进程间通信3.3 管道3.4 匿名管道pipe()3.4.1 站在文件描述符角度-深度理解管道3.4.2 站在内核角度-管道本质3.4.3 用fork来共享管道原理3.4.5 管道相关知识3.4.6 代码一&#xff…

AI大模型开发原理篇-8:Transformer模型

近几年人工智能之所以能迅猛发展,主要是靠2个核心思想:注意力机制Attention Mechanism 和 Transformer模型。本次来浅谈下Transformer模型。 重要性 Transformer模型在自然语言处理领域具有极其重要的地位,为NLP带来了革命性的突破‌。可以…

html2canvas绘制页面并生成图像 下载

1. 简介 html2canvas是一个开源的JavaScript库,它允许开发者在用户的浏览器中直接将HTML元素渲染为画布(Canvas),并生成图像。以下是对html2canvas的详细介绍: 2. 主要功能 html2canvas的主要功能是将网页中的HTML元…

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现

伴随近年来新型储能技术的高质量规模化发展,储能电站作为新能源领域的重要载体, 旨在配合逐步迈进智能电网时代,满足电力系统能源结构与分布的创新升级,给予相应规模 电池管理系统的设计与实现以新的挑战。同时,电子系…

机器学习-线性回归(参数估计之结构风险最小化)

前面我们已经了解过关于机器学习中的结构风险最小化准则,包括L1 正则化(Lasso)、L2 正则化(Ridge)、Elastic Net,现在我们结合线性回归的场景,来了解一下线性回归的结构风险最小化,通…

【数据分析】豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

备考蓝桥杯8——EEPROM读写

目录 看手册时间 关于IIC 附录 IIC代码 看手册时间 我们主要是搞编程,所以,我们一般会非常关心我们如何对EEPROM进行编程。特别的,EEPROM要做读写,首先是看它的IIC设备地址。 有趣的是——我们的EEPROM的IIC地址是根据地址进行…

深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用

在现代大语言模型(LLMs)中,位置编码是一个至关重要的组件。无论是 Meta 的 LLaMA 还是 Google 的 PaLM,这些模型都依赖于位置编码来捕捉序列中元素的顺序信息。而旋转变位编码(RoPE) 作为一种创新的位置编码…

“message“: “类型注释只能在 TypeScript 文件中使用

VScode中使用CtrlShiftP打开搜素框,输入Preferences: Open User Settings或Preferences: Open Workspace Settings。 找到settings.json文件 "typescript.validate.enable": false

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程

SQL 秒变三线表 sql导出三线表

🎯SQL 秒变三线表,校园小助手超神啦 宝子们,搞数据分析、写论文的时候,从 SQL 里导出数据做成三线表是不是特别让人头疼😩 手动调整格式,不仅繁琐,还容易出错,分分钟把人逼疯&#…

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…

力扣1022. 从根到叶的二进制数之和(二叉树的遍历思想解决)

Problem: 1022. 从根到叶的二进制数之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 1.在先序遍历的过程中,用一个变量path记录并更新其经过的路径上的值,当遇到根节点时再将其加到结果值res上; 2.该题…