[深度学习]机器学习和深度学习

机器学习和深度学习

文章目录

  • 机器学习和深度学习
    • 人工智能与机器学习和深度学习的关系
    • 侠义的机器学习
    • 深度学习的概念
      • 常见的神经网络的输入形式
      • 想要的输出(任务类别)
      • 深度学习的流程
    • 线性函数与多层神经元

人工智能与机器学习和深度学习的关系

image-20250120155116339

所谓人工智能就是,让计算机为人类做工作,其中机器学习属于人工智能深度学习属于机器学习

传统人工智能系统与机器学习的区别:

image-20250120155627822

  • 传统系统是将输入数据以及处理数据的规则交给计算机,然后让计算机得出数据处理结果(输出数据)。
  • 机器学习是将输入数据以及数据处理结果(输出数据)交给计算机,然后让计算机得出处理数据的规则

侠义的机器学习

侠义的机器学习是指除去深度学习的机器学习部分,也就是下图中浅蓝色的中间层部分:

image-20250120160136310

具有一般是基于数学,或者统计学的方法,具有很强的可解释性的特点。所谓的可解释性就像数学公式的推导过程一样,得到的每个结果都是有逻辑的,令人信服的。

这里简述几个经典的传统机器学习算法:

  1. K最近邻居(K-Nearest Neighbors,简称KNN)

举例如下图:

image-20250120160819442

小明的周围都是北大的,因此小明大概率是北大的;小明的周围大多是清华的,因此小明大概率是清华的;小明周围清华和北大人数接近,因此小明是清华还是北大难以判断;小明周围有很多川大的,对推断小明是清华还是北大没有价值,因此难以判断。

根据以上的例子,我们可以体会它的基本思想是通过测量不同数据点之间的距离来进行预测。此外,KNN是一种监督学习算法,用于分类和回归问题。

而KNN的工作原理可以概括为以下几个步骤:

  1. 距离度量: KNN使用距离度量(通常是欧氏距离)来衡量数据点之间的相似性。
  2. 确定邻居数量K
  3. 投票机制

如下图,图中点的位置可以表示点之间的距离,可以选取不同的邻居数量,然后根据选中的邻居的所在各类的数量判断数据属于哪类可能性。

image-20250120161709359

  1. 决策树

    决策树是将所有可能情况和相应的数据给出,举例判断邮件是否为垃圾邮件如下图:

    image-20250120162328814

    通过输入的是否认识的人和垃圾关键字两个维度的数据去查找决策树中对应的输出,另外决策树不善于处理未见过的特征。

  2. 朴素贝叶斯

    基于贝叶斯定理,并假设特征之间是条件独立的,举例如下图:

image-20250120162900482

以上介绍的机器学习的算法,具有数学上的可解释性,但准确率不是百分百,且不灵活,因此引入了深度学习。

深度学习的概念

深度学习是机器学习的子集,让机器利用多层神经网络从大量数据中自己进行学习。

image-20250120163625543

最后学习出来的模型,我们直接拿来使用,往后的数据都通过这个学出来的模型得到输出数据,由于成功率比较高,因此我们可以拿来使用,但是完全没有可解释性,因此深度学习是一门实践性的科目。

实际上,深度学习就是找一个函数f。给到机器的是输入数据X和输出数据Y,让其使用神经网络学习,学习得到数据处理的规则,也就是X如何得到Y,这个规则就是所谓的函数f。

image-20250120182244527

深度学习的意义

在一些复杂的场景下,比如给到的输入是一张图片,输出是图中物品的类别,我们要推断输入得到输出的规则是十分困难的,是人类很难得到,因此采用深度学习推断规则。

常见的神经网络的输入形式

  1. 向量

    一组有序的数字,可以表示输入数据的每个特征。

    image-20250120165816593

  2. 矩阵/张量

    神经网络处理更高维度数据时的常见输入形式,特别是在涉及到 二维数据(如图像或表格数据)时,图像是用矩阵表示的。

    image-20250120165947926

  3. 序列

具有 时间依赖性顺序关系 的数据。如一句话和视频。

image-20250120170314850

苹果一词放到不同语境有不同的解释,视频是由一帧一帧的图像组成,并且图像之间有严格的前后顺序。

想要的输出(任务类别)

  1. 回归任务

    回归任务好似一道填空题,输出的是一个数在连续的区间内选出一个。如根据以前的温度推测明天的温度大概有多高。

  2. 分类任务

    分类任务好似一道选择题,输出只能是给定的离散的数据中选出一个。如给出一张图片,判断图中是猫还是狗,即使输入是一只狼,输出也只能是猫和狗。

  3. 生成任务

    生成任务好似一道简答题,输出是具有结构化的数据。如一段文字或一张图片。

分类和回归是结构化的基础。 分类时, 是用数字来表示类别。 有的时候需要多个模态的数据, 比如 图片, 文字, 声音。

image-20250120172333436

深度学习的流程

深度学习需要数据,因为要从数据中找到函数。深度学习的流程如下图:

image-20250120182223937

举一个例子来理解深度学习的流程,假设有如下数据:

image-20250120182412940

有6组x和y,x也成为数据(feature),y也成为标签(label),x和y实际的函数关系是
y = 2 ∗ x + 1 + ε y=2*x+1+ε y=2x+1+ε
其中,ε为扰动,因为真实数据是不会是完全符合一个特定函数关系的,要做的就是找到x和y之间的函数关系,然后推测出第7组x对应的y。特别注意的是,我们已知的只有x和y,x和y的函数关系是未知的,也就是我们深度学习要求得的。

关于这个例子,我们进行深度学习:

  1. 定义一个函数模型

    函数模型的定义是任意的,可以选择线性模型
    y = w ∗ x + b y=w*x+b y=wx+b
    ,也可以选择二次函数模型,三次函数模型甚至更复杂的函数模型,不同的函数模型得到的模型效果有差异,由于实际函数关系是未知的,因此模型的选择是具有猜测性。本例中我们就选择线性模型
    y = 3 ∗ x + 2 y=3*x+2 y=3x+2
    也就是w选取3,b选取2,其中w称为权重(weight),b称为偏置(bias)。

  2. 定义一个合理的损失函数LOSS

    损失函数LOSS的作用判断我们选择的这组参数怎么样。在我们选取的模型中参数就是w和b,我们设计LOSS函数为
    L ( w , b ) = ∣ y ^ − y ∣ = ∣ w x + b − y ∣ L(w, b) = |\hat y - y| = | w x+b- y| L(w,b)=y^y=wx+by
    如果我们设计的模型和真实函数关系十分接近的话,那么用模型求的的
    y ^ \hat y y^
    和真实的y差值的绝对值,也会很小,也就是LOSS值会很小,由于不止一组x和y因此求LOSS时要取多个LOSS的平均值
    L O S S = 1 N ∑ i = 1 N l LOSS = \frac{1}{N}\sum \limits_{i=1}^N l LOSS=N1i=1Nl
    比如第一个x为1,经过我们设定的模型求的
    y ^ \hat y y^
    为5,而x对应的y为3.1,因此LOSS值为1.9。

  3. 根据损失对模型进行优化

为了让设定的模型更加接近真实的函数关系,因此要根据LOSS值不断调整参数,在这里就是w和b,直到LOSS值为我们所能接受的值。下面给出两个常见的LOSS函数:
M A E : L ( w , b ) = ∣ y ^ − y ∣ ( 均绝对误差 ) MAE : L(w, b) = |\hat y - y| (均绝对误差) MAE:L(w,b)=y^y(均绝对误差)

M S E : L ( w , b ) = ( y ^ − y ) 2 ( 均方误差 ) MSE : L(w, b) = (\hat y - y )^2(均方误差) MSE:L(w,b)=y^y2(均方误差)

模型优化有公式如下:
w ∗ , b ∗ = a r g m i n L w^*,b^* = arg \ minL w,b=arg minL

其中 w ∗ , b ∗ w^*,b^* w,b为L最小时w,b所取的值,根据LOSS调整参数w,b进行的优化模型采用的是梯度下降算法。

梯度下降算法的过程如下(以参数w为例):

  1. 随机选取一个 w 0 w^0 w0

    在定义函数模型为线性模型后,设定的w=3就是所谓的 w 0 w^0 w0(w的第0版)也就是给参数w设定的初始值。

  2. 计算梯度

    在选取的LOSS函数
    L ( w , b ) = ∣ y ^ − y ∣ = ∣ w x + b − y ∣ L(w, b) = |\hat y - y| = | w x+b- y| L(w,b)=y^y=wx+by
    中因为要做的是通过改变w和b来改变函数L的值,因此在这个过程中w,b为自变量,x,y为常数,因为本例要调整参数w,因此要计算函数L对自变量w取档当前值时的梯度
    ∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w}|w=w^0 wLw=w0

  3. 更新w的值

    如果梯度值是大于0的,说明函数在邻域内左低右高,w减小,L有可能减小;如果梯度值小于0,说明函数在邻域内左高右低,w增大,L有可能减小。w的更新采用如下公式:
    w 1 ← w 0 − η ∂ L ∂ w ∣ w = w 0 w1←w0-η\frac{\partial L}{\partial w}|w=w^0 w1w0ηwLw=w0
    采用该公式时,梯度大于0,w会减小;梯度小于0时,w会增大。其中η为学习率,η的作用是控制参数调整的幅度,学习率的设定和模型的设定一样影响最后的效果,并且没有明确的选取方式。

    学习率设定的过大或过小都会有问题,学习率设定的过大,会使参数调整时参数的调整幅度过大,导致不断偏离最小值,会导致梯度爆炸学习率设置的过小,调整的幅度过小,会使得学习时间变长

    **特别要注意的是:**η是一个超参数,超参数在设定后,是不会随着深度学习而改变的,初次之外,模型也是一种超参数,比如设定了为线性结构,学习过程中就不可能再变成其他如二次函数的结构。

    • 在完成1,2,3之后,不断执行2,3调整参数,直至LOSS函数值满足要求,或训练轮次达到。
    • 模型中的所有参数都要采用梯度下降算法进行调整,采用相同的方法。
    • 当参数众多时,梯度计算过程会很复杂,可以使用torch提供的框架来完成。

线性函数与多层神经元

研究深度学习时,总能看到类似如下图的神经网络图:

image-20250120233032429

单取出一个神经元做解释:

image-20250120233351777

一个神经元实际表示的数据公式为
y ^ = w ∗ x + b \hat y=w*x+b y^=wx+b
因此在一个神经网络中,一个结点要表示的就是一个线性关系
y = ∑ i = 1 N w i x i + b y=\sum \limits_{i=1}^Nw_ix_i+b y=i=1Nwixi+b
b为几个 x i x_i xi的偏置值之和,取其中一个结点举例,关系如下图:

Screenshot_20250120_234054

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

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

相关文章

【QT】已解决:Qt4.11.0无法使用MSVC编译器问题

目录 一、背景 1.本机环境 2.问题描述 3.问题解决前后对比图 二、详细操作 1.下载项目二所需qt环境 2.解决思路 3.安装VS2017 4.安装MSVC调试器 5.打开qtCreator查看编译器 5.编译运行项目二 三、参考 一、背景 1.本机环境 windows11 qtCreator4.11.0 minGW 64位…

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

从零开始:Spring Boot核心概念与架构解析

引言 在当今的Java开发领域,Spring Boot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点,极大地简化了Spring应用的开发过程。本文将从Spring Boot的核心概念入手,深入解析其架构设计和运行原理,帮助读…

【EdgeAI实战】(1)STM32 边缘 AI 生态系统

【EdgeAI实战】(1)STM32 边缘 AI 生态系统 【EdgeAI实战】(1)STM32 边缘 AI 生态系统 1. STM32 边缘人工智能1.1 X-CUBE-AI 扩展包1.2 STM32 AI Model Zoo1.3 ST AIoT Craft 2. STM32N6 AI 生态系统 (STM32N6-AI)2.1 STM32N6 AI 产…

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好,我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术,以保证图表的实时渲染,当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE? SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …

关于机器学习的一份总结

在之前的文章中分别有详细的关于机器学习中某一学习算法的介绍,但缺少一个总体关于机器学习的总结,所以在这篇文中就是关于机器学习的一份总结。 在最近的日子中,人工智能日益火热起来,而机器学习是其中举足轻重的一部分&#xf…

浅谈计算机网络03 | 现代网络组成

现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…

数据结构漫游记:队列的动态模拟实现(C语言)

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…

Ubuntu22.04安装paddle GPU版本

文章目录 确立版本安装CUDA与CUDNN安装paddle 确立版本 查看官网信息,确立服务版本:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.6/install/pip/linux-pip.html 安装CUDA与CUDNN 通过nvidia-smi查看当前显卡驱动版本: 通过…

2024年度总结:从后端Java到全栈成长的蜕变

目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年,也是记录在CSDN平台上的第五年。这五年来,我始终坚持记录成长的点滴,将个人事业与博客创作紧密相连。一路走来&#xff0…

麦田物语学习笔记:创建TransitionManager控制人物场景切换

基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…

无人机高速无刷动力电机核心设计技术

一、技术概述 无刷电机优势: 高效率:无刷电机由于去除了电刷和换向器,减少了能量损失,因此具有更高的效率。 长寿命:电刷和换向器的磨损是导致传统有刷电机寿命较短的主要原因,而无刷电机则避免了这一问…

Linux C\C++方式下的文件I/O编程

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Lin…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)角点检测

角点检测(Corner Detection)是计算机视觉和图像处理中重要的步骤,主要用于提取图像中的关键特征,以便进行后续的任务,比如图像匹配、物体识别、运动跟踪等。下面介绍几种常用的角点检测方法及其应用。 1. Harris角点检…

QT开发-T113 Linux 主板QC配置套件

此篇文章用于记录在Linux主板上使用QT开发项目的套件配置步骤 进入QC软件,点击 Manage Kits… 选择项目对应的QT Version : 一般有一个项目对应的qmake 文件,选择导入即可 如果首次导入提示 qmake could not be added 需要先对项目进行命令行编译(具体命…

【云岚到家】-day03-门户缓存实现实战

【云岚到家】-day03-门户缓存实现实战 1.定时任务更新缓存 1.1 搭建XXL-JOB环境 1.1.1 分布式调度平台XXL-JOB介绍 对于开通区域列表的缓存数据需要由定时任务每天凌晨更新缓存,如何实现定时任务呢? 1.使用jdk提供的Timer定时器 示例代码如下&#xf…

SuperdEye:一款基于纯Go实现的间接系统调用执行工具

关于SuperdEye SuperdEye是一款基于纯Go实现的间接系统调用执行工具,该工具是TartarusGate 的修订版,可以利用Go来实现TartarusGate 方法进行间接系统调用。 该工具的目标是为了扫描挂钩的NTDLL并检索Syscall编号,然后使用它来执行间接系统调…

Python+ tkinter实现小学整数乘法和除法竖式演算式

Python tkinter实现小学整数乘法和除法竖式演算式 整数的乘法与除法是小学数学中的重要内容,它们是数学运算中的基础部分。 本文将使用python 和Python 的标准 GUI(图形用户界面)包tkinter,实现整数乘法与除法的竖式演示。供有兴趣…

线程池遇到未处理的异常会崩溃吗?

线程池中的 execute 和 submit 方法详解 目录 引言execute 方法 使用示例代码 submit 方法 2.1 提交 Callable 任务2.2 提交 Runnable 任务 遇到未处理异常 3.1 execute 方法遇到未处理异常3.2 submit 方法遇到未处理异常 小结 引言 在多线程编程中,线程池是提高性…

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作,包括CRUD(增加、读取、更新、删除)。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…