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

news2025/2/8 19:57:31

🌈 个人主页:十二月的猫-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. 总结

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

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

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

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

相关文章

【R语言】apply函数族

在R语言中使用循环操作时是使用自身来实现的,效率较低。所以R语言有一个符合其统计语言出身的特点:向量化。R语言中的向量化运用了底层的C语言,而C语言的效率比高层的R语言的效率高。 apply函数族主要是为了解决数据向量化运算的问题&#x…

传统营销架构在当下如何进行优化转型?

随着市场环境的变化和数字技术的发展,传统营销架构越来越难以适应当下的营销市场。为了适应新时代的要求,企业也需要对营销架构进行优化转型。企业主可以着手从哪些方面进行调整呢?下面就来一同探讨下。 一、强调扁平化原则 扁平化与去中心化…

QMK启用摇杆和鼠标按键功能

虽然选择了触摸屏,我仍选择为机械键盘嵌入摇杆模块,这本质上是对"操作连续性"的执着。   值得深思的是,本次开发过程中借助DeepSeek的代码生成与逻辑推理,其展现的能力已然颠覆传统编程范式,需求描述可自动…

计算机网络-SSH基本原理

最近年底都在忙,然后这两天好点抽空更新一下。前面基本把常见的VPN都学习了一遍,后面的内容应该又继续深入一点。 一、SSH简介 SSH(Secure Shell,安全外壳协议)是一种用于在不安全网络上进行安全远程登录和实现其他安…

yolov11模型在Android设备上运行【踩坑记录】

0) 参考资料: https://github.com/Tencent/ncnn?tabreadme-ov-file https://github.com/pnnx/pnnx https://github.com/nihui/ncnn-android-yolov5 https://github.com/Tencent/ncnn?tabreadme-ov-file 1) :将xxx.pt模型转化成 xxx.onnx ONNX(Ope…

win编译openssl

一、perl执行脚本 1、安装perl脚本 perl安装 2、配置perl脚本 perl Configure VC-WIN32 no-asm no-shared --prefixE:\openssl-x.x.x\install二、编译openssl 1、使用vs工具编译nmake 如果使用命令行nmake编译会提示“无法打开包括文件: “limits.h”“ 等错误信息 所以…

【B站保姆级视频教程:Jetson配置YOLOv11环境(七)Ultralytics YOLOv11配置】

Jetson配置YOLOv11环境(7)Ultralytics YOLOv11环境配置 文章目录 1. 下载YOLOv11 github项目2. 安装ultralytics包3. 验证ultralytics安装3.1 下载yolo11n.pt权重文件3.2 推理 1. 下载YOLOv11 github项目 创建一个目录,用于存放YOLOv11的项目…

硬核技术:小程序能够调用手机的哪些传感器

一、加速度传感器 小程序可以调用手机的加速度传感器来检测设备的运动状态。加速度传感器能够测量设备在三个轴(X、Y、Z)上的加速度变化。通过分析这些数据,小程序可以实现一些功能,如运动检测、步数统计、游戏中的动作感应等。 健…

Day 31 卡玛笔记

这是基于代码随想录的每日打卡 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等&#xff0…

【蓝桥杯嵌入式】4_key:单击+长按+双击

全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、电路图 将4个按键的引脚设置为input,并将初始状态设置为Pull-up(上拉输入) 为解决按键抖动的问题,我们…

Nginx进阶篇 - nginx多进程架构详解

文章目录 1. nginx的应用特点2. nginx多进程架构2.1 nginx多进程模型2.2 master进程的作用2.3 进程控制2.4 worker进程的作用2.5 worker进程处理请求的过程2.6 nginx处理网络事件 1. nginx的应用特点 Nginx是互联网企业使用最为广泛的轻量级高性能Web服务器,其特点是…

【算法专场】分治(下)

目录 前言 归并排序 思想 912. 排序数组 算法思路 算法代码 LCR 170. 交易逆序对的总数 算法思路 算法代码 315. 计算右侧小于当前元素的个数 - 力扣(LeetCode) 算法思路 算法代码 493. 翻转对 算法思路 算法代码 好久不见~时隔多日&…

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中,协议号89 头部数据包内容: 版本(Version):对于OSPFv2,该字段值恒为2(使用在IPV4中);对于OSPFv3,该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

Docker Desktop安装kubernetes时一直在Starting:Kubernetes failed to start

原因:由于墙的问题,导致拉取国外的K8s镜像失败 解决: 下载 k8s-for-docker-desktop 选中自己的kubernetes 版本 下载zip包 PowerShell运行load_images.ps1文件 重启docker kubernetes运行成功

StarSpider 星蛛 爬虫 Java框架 可以实现 lazy爬取 实现 HTML 文件的编译,子标签缓存等操作

StarSpider 星蛛 爬虫 Java框架 开源技术栏 StarSpider 能够实现 针对 HTML XSS SQL 数学表达式等杂乱数据的 爬取 解析 提取 需求! 目录 文章目录 StarSpider 星蛛 爬虫 Java框架目录介绍如何获取?maven配置 架构是什么样的?结果对象的类…

【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命

目录 一、DeepSeek-R1 势不可挡二、DeepSeek-R1 卓越之处三、DeepSeek-R1 创新设计四、DeepSeek-R1 进化之路1. 强化学习RL代替监督微调学习SFL2. Aha Moment “啊哈”时刻3. 蒸馏版本仅采用SFT4. 未来研究计划 部分内容有拓展,部分内容有删除,与原文会有…

动态规划LeetCode-121.买卖股票的最佳时机1

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。…

#渗透测试#批量漏洞挖掘#微商城系统 goods SQL注入漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

import { Component, Vue, Prop, Watch } from ‘vue-property-decorator‘

文章目录 导入部分的解释总结Vue 3 的推荐替代方案总结 你提供的代码片段是使用 vue-property-decorator 库的示例,这是一个第三方库,它提供了 Vue 组件的装饰器,使得编写类风格的 Vue 组件更加方便。以下是对代码中每个部分的详细解释&…

X Window System 架构概述

X Window System 架构概述 1. X Server 与 X Client ​ 这里引入一张维基百科的图,在Linux系统中,若用户需要图形化界面,则可以使用X Window System,其使用**Client-Server**架构,并通过网络传输相关信息。 ​ ​ X…