深度学习基础知识

news2024/9/20 8:09:53

 本文内容来自https://zhuanlan.zhihu.com/p/106763782

此文章是用于学习上述链接,方便自己理解的笔记

1.深度学习的网络结构

深度学习是神经网络的一种特殊形式,典型的神经网络如下图所示。

  • 神经元:表示输入、中间数值、输出数值点。例如:在上述图中的一个个小圆圈,分别表示不同的神经元。
  • 权重:神经元传导时,要乘以一个系数,这个系数叫做权重值。例如:从上图中输入层的神经元要传导到中间层的神经元,输入层的神经元要乘以一个系数后到达中间层,即:中间层=输入层*权重。

不同的人对层的定义是不一样,

  • 如果将具有权重的对象称为“层”,那么当前网络就是2层的
  • 如果将有神经元的结构称为“层”,那么当前网络就是3层的

2.深度学习

将具有多个中间层的神经网络,称之为“深度学习网络”。深度学习的本意就是“具有很深层次的网络”,也就是说“有很多层的网络”。

深度学习强大的原因主要是基于以下两个方面:

  • 1。在深度学习中,不需要手动提取特征,系统自动提取了非常多的特征、特征组合,并找出有用的特征。
  • 2。处理线性不可分问题。简单说,就是通过解决一个又一个的简单问题,达到解决复杂问题的目的。例如,判断一张照片上的对象,不断地判断:“它是动物吗?它是四条腿吗?它会喵喵叫吗?”等等这样的问题,能够得到照片上的对象是一只猫,还是一只狗。也类似于,我们拨打“10086”,最后它居然帮我们解决了我们的各种需求。

以图像识别为例,假设我们要识别一幅图像内的语义信息。

可能是通过4层(尽管可以叫它为5层、6层)网络实现,具体为:

  • 第1层:提取图像的最基础的底层特征,包括纹理、边缘、色彩等。
  • 第2层:将第1层的特征排列组合,并找到有用的组合信息。此时会找到曲线、轮廓灯特征。
  • 第3层:对第2层的特征排列组合,并找到有用的组合信息。此时,会找到高级特征,例如眼睛、鼻子、嘴等等。
  • 第4层:对第3层的特征进行排列组合,并找到有用的组合信息。此时,会找到有用的语义信息,例如打电话、奔跑等语义信息。

该过程的简单示意如下图所示。

 深度学习的处理逻辑就是:首先提取低级特征,然后对低级特征不断地在更高的级别上进行排列组合,并寻找组合后的有用信息。

3.神经网络基本结构

神经网络的基本结构分为四大类: 标准网络循环网络卷积网络自动编码器

此部分学习11种主要神经网络结构图解 - 知乎 (zhihu.com)

3.1 标准网络

3.1.1 感知器

感知器是所有神经网络中最基本的,也是更复杂的神经网络的基本组成部分。 它只连接一个输入神经元和一个输出神经元。

3.1.2 前馈网络 

前馈网络是感知器的集合,其中有三种基本类型的层: 输入层、隐藏层和输出层。 在每个连接过程中,来自前一层的信号被乘以一个权重,增加一个偏置,然后通过一个激活函数。 前馈网络使用反向传播迭代更新参数,直到达到理想的性能。

3.1.3  残差网络(Residual Networks/ResNet)

深层前馈神经网络的一个问题是所谓的梯度消失,即当网络太深时,有用的信息无法在整个网络中反向传播。 当更新参数的信号通过网络传播时,它会逐渐减少,直到网络前面部分的权重不再改变或者根本不再使用。

为了解决这个问题,残差网络使用跳过连接实现信号跨层传播。 通过使用这种不易受到影响的连接来减少梯度消失问题。 随着时间的推移,通过学习特征空间,网络学会了重建跳过的层,但训练更有效,因为它的梯度不容易消失和需要探索更少的特征空间。

3.2  循环网络(Recurrent Neural Network ,RNN)

循环神经网络是一种特殊类型的网络,它包含环和自重复,因此被称为“循环”。由于允许信息存储在网络中,RNNs 使用以前训练中的推理来对即将到来的事件做出更好、更明智的决定。 为了做到这一点,它使用以前的预测作为“上下文信号”。 由于其性质,RNNs 通常用于处理顺序任务,如逐字生成文本或预测时间序列数据(例如股票价格)。 它们还可以处理任意大小的输入。

3.3 卷积网络(Convolutional Neural Network, CNN)

图像具有非常高的维数,因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。 卷积神经网络提供了一个解决方案,利用卷积和池化层,来降低图像的维度。 由于卷积层是可训练的,但参数明显少于标准的隐藏层,它能够突出图像的重要部分,并向前传播每个重要部分。 传统的CNNs中,最后几层是隐藏层,用来处理“压缩的图像信息”。卷积神经网络在基于图像的任务上表现良好,例如将图像分类为狗或猫。

3.4 自动编码器(Autoencoder)

自动编码器的基本思想是将原始的高维数据“压缩”成高信息量的低维数据,然后将压缩后的数据投影到一个新的空间中。 自动编码器有许多应用,包括降维、图像压缩、数据去噪、特征提取、图像生成和推荐系统。 它既可以是无监督的方法,也可以是有监督的,可以得到对数据本质的洞见。

隐藏的神经元可以替换为卷积层,以便处理图像。

4.激活函数

学习了:https://zhuanlan.zhihu.com/p/678231997 、深度学习笔记:如何理解激活函数?(附常用激活函数) - 知乎 (zhihu.com)和神经网络的基本结构 - 知乎 (zhihu.com)

由于不同的神经元有不同的激活值,如果一个神经元的激活值过大,例如一亿。那么会导致最后输出的结果过于离谱。所以我们需要把太大的数字调小一点,太小的数字调高一点,让数据更加的靠谱。做到这一步是通过激活函数来实现的。

因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

激活函数可以分为线性激活函数(线性方程控制输入到输出的映射,如f(x)=x等)以及非线性激活函数(非线性方程控制输入到输出的映射,比如Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等) 。

  • Sigmoid 函数:能将输入值压缩到0和1之间,常用于二分类问题的输出层。
  • Tanh 函数:与Sigmoid类似,但输出范围是-1到1,常用于二分类问题的输出层。
  • ReLU 函数:当输入值大于0时,输出值等于输入值;当输入值小于等于0时,输出值为0。ReLU是目前最常用的激活函数之一,因为它能够缓解梯度消失问题。
  • Leaky ReLU 函数:在输入值小于0时,输出值为0.01乘以输入值;在输入值大于0时,输出值等于输入值。这种激活函数可以解决ReLU激活函数在负数区域的问题。
  • PReLU 函数:在输入值小于0时,输出值为0.2乘以输入值的绝对值;在输入值大于0时,输出值等于输入值。这种激活函数也可以解决ReLU激活函数在负数区域的问题。

**注:Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish都是非线性激活函数,它们都在人工神经网络中起到关键的作用。非线性激活函数如Sigmoid和Tanh可以将输入的线性组合转化为非线性输出。
Sigmoid函数的公式为S(x)=1/(1+exp(-x)),它将输入的每个值压缩到0和1之间。但是,当输入值远离0时,Sigmoid函数的梯度将接近于0,这可能会导致在训练过程中出现梯度消失的问题。
Tanh函数与Sigmoid函数类似,但它是零中心的,也就是说它的输出范围在-1到1之间。然而,Tanh函数也存在饱和问题。
ReLU(Rectified Linear Unit)函数对正数原样输出,负数直接置零。它在正数区域不饱和,在负数区域硬饱和。ReLU函数计算上比Sigmoid或者Tanh更省计算量,因为不用exp,因而收敛较快。能够帮助解决sigmoid随着层数的增加梯度衰减现象。但是还是非zero-centered。
LReLU(Leaky ReLU)是ReLU的变体,区别在于它不是将所有负值设为零,而是引入一个小的正数斜率。PReLU(Parametric ReLU)是另一个ReLU的变体,其参数化负数部分允许网络学习负数斜率的最佳值。
Swish是一种自门控激活函数,其计算公式为f(x) = x / ( 1 + e^(-x) )

以上激活函数的具体讲解请查看深度学习笔记:如何理解激活函数?(附常用激活函数) - 知乎 (zhihu.com)

5.损失函数

损失函数用来计算具体正确的判断距离。越小说明越接近真实判断。

例如:

假设A是身高,B是体重,C是男女。性别1=男,0=女。

假设小明的身高是2米,体重是20kg。小红的是1米,10千克。它们和C的权重都是1。
那么没有经过标准化处理的C为:
C(小明)=2*1+20*1=22,C(小红)=1*1+10*1=11。
假设经过标准化处理的C为
C(小明)=0.99,C(小红)=0.8。
那么系统对小明的判断是正确的,因为0.99约等于1,但是对于小红的判断是错误的,因为小红是女生,这个值应该是越接近0越好。我们直接用减法确定预测数据和真实数据的距离来定义损失函数。那么这个时候损失函数Loss=|(1-0.9)+(0-0.8)|=0.9。前面说了这个数字越小越好。这个时候是0.9。


这个时候应该怎么办呢,我们回头改变一下权重和偏置,把身高的权重改成10,把偏置改成(-20),看看会发生什么。那么没有经过标准化处理的C为:

C(小明)=2*10(身高权重)+20-20(偏置)=20

C(小红)=1*10+10-20=0

好了,这下不用经过标准化处理也知道,小明的C值将会变成1,而小红会变成0。这下就成功完成了分类。(为了弄懂,不要管Sigmoid的真实计算结果)

这个时候:

Loss=Loss=|(1-1)+(0-0)|=0,损失函数降为0,那么这个模型就是一个完全拟合的模型。

损失函数在模型训练阶段发挥着重要的作用。每个批次的训练数据送入模型后,通过前向传播输出预测值,然后损失函数会计算出预测值和真实值之间的差异值,也就是损失值。得到损失值之后,模型通过反向传播去更新各个参数,以降低真实值与预测值之间的损失,使得模型生成的预测值更接近真实值,从而达到学习的目的。

关于如何选择损失函数,需要考虑以下因素:

  1. 回归问题:均方误差、平均绝对误差等。
  2. 分类问题:交叉熵、对数损失等。
  3. 排名问题:平均精度差、有序列表挖掘的损失等 。

损失函数详解:

六个深度学习常用损失函数总览:基本形式、原理、特点-腾讯云开发者社区-腾讯云 (tencent.com)

Pytorch学习之十九种损失函数_pytorch损失函数-CSDN博客

6.反向传播算法的原理和应用

机器学习笔记丨神经网络的反向传播原理及过程(图文并茂+浅显易懂)_神经网络反向传播原理-CSDN博客

反向传播算法(Backpropagation,简称BP算法)是“误差反向传播”的简称,是适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。

BP算法的学习过程由正向传播过程和反向传播过程组成。

  •  在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果预测值和真实值不一样,则取输出与期望的误差的平方和作为损失函数(损失函数有很多,这是其中一种)。
  •  将正向传播中的损失函数传入反向传播过程,逐层求出损失函数对各神经元权重的偏导数,作为目标函数对权重的梯度。根据这个计算出来的梯度来修改权重,网络的学习在权重修改过程中完成。误差达到期望值时,网络学习结束。

6.1 计算误差

第一步是计算神经网络的输出(预测值)和真值的误差。
图中y为我们神经网络的预测值,由于这个预测值不一定正确,所以我们需要将神经网络的预测值和对应数据的标签来比较,计算出误差。误差的计算有很多方法,比如上面提到的输出与期望的误差的平方和,熵(Entropy)以及交叉熵等。计算出的误差记为 δ .

反向传播,顾名思义,是从后向前传播的一种方法。因此计算完误差后,需要将这个误差向不断的向前一层传播。向前一层传播时,需要考虑到前一个神经元的权重系数(因为不同神经元的重要性不同,因此回传时需要考虑权重系数)。

与前向传播时相同,反向传播时后一层的节点会与前一层的多个节点相连,因此需要对所有节点的误差求和。 

 

 

到此为止已经计算出了每个神经元的误差,接下来将更新权重。

6.2更新权重

图中的η 代表学习率,w′是更新后的权重,通过这个式子来更新权重。这个式子具体是怎么来的,请看机器学习笔记丨神经网络的反向传播原理及过程(图文并茂+浅显易懂)_神经网络反向传播原理-CSDN博客第四部分具体例子。

 

 

 

 

 7. 卷积神经网络(CNN)算法和模型

    卷积神经网络(CNN)是一种深度学习算法,主要应用于图像识别领域。CNN的价值在于其能够将大数据量的图片有效地降维成小数据量,同时保留图片的特征,这类似于人类的视觉原理。

CNN的基本结构主要包括卷积层池化层全连接层
1. 卷积层:这是CNN的核心部分,主要用于提取图像的特征。通过卷积操作,可以捕捉到图像中的局部特征。
2. 池化层:其主要作用是降低数据的维度,同时保留重要的特征信息。这有助于减少网络的复杂性,提高计算效率。
3. 全连接层:在卷积层和池化层提取并处理了图像的特征后,全连接层用于对特征进行高级处理并输出最终的分类结果。
 

7.1 CNN的常用层结构和参数设置

卷积神经网络(CNN)的常用层结构和参数设置主要包含以下几个部分:

1. 数据输入层:这是网络的第一层,用于接收原始图像数据。在处理原始图像数据时,通常需要进行预处理,包括去均值和归一化等操作。输入图像的尺寸通常是可以被2整除多次的像素值矩阵,常用的数字包括32,64,96,224,384和512。

2. 卷积计算层:也被称为CONV层,是网络的核心部分,主要用于从输入图像中提取特征。这一层会通过多个不同的滤波器(或卷积核)对输入图像进行卷积操作,以提取出图像的不同特征。

3. ReLU激励层:这一层的主要作用是对上一层输出的结果进行非线性变换,增强网络的表达能力。常用的激活函数包括ReLU、Sigmoid和Tanh等。

4. 池化层:池化层的作用主要是降低数据的维度,同时保留重要的特征信息。常用的池化方法有Max Pooling和Average Pooling等。

5. 全连接层:全连接层通常位于网络的最后部分,用于将之前提取并处理的特征进行高级处理并输出最终的分类结果。

值得注意的是,CNN的设计选择和参数设定会严重影响网络的训练和表现。例如,滤波器的大小、步长以及填充方式等都需要根据具体的应用场景和需求来设定。此外,虽然很多架构的选择都是凭借直觉,而非有充分的数学论证,但这些直觉往往是基于大量的实验结果。

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

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

相关文章

itextPdf生成pdf简单示例

文章环境 jdk1.8&#xff0c;springboot2.6.13 POM依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><dependency><groupId>com.ite…

【前端面试3+1】01闭包、跨域

一、对闭包的理解 定义&#xff1a; 闭包是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。 特点&#xff1a; 闭包可以访问外部函数的变量&#xff0c;即使外部函数已经执行完毕。…

【编译tingsboard】出现gradle-maven-plugin:1.0.11:invoke (default)

出现的错误&#xff1a; [ERROR] Failed to execute goal org.thingsboard:gradle-maven-plugin:1.0.11:invoke (default) on project http: Execution default of goal org.thingsboard:gradle-maven-plugin:1.0.11:invoke failed: Plugin org.thingsboard:gradle-maven-plugi…

输出当前时间

用途&#xff1a;在项目中一些属性中设置当前时间 实例代码 import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;public class time {public static void main(String[] args){LocalDateTime china LocalDateTime.now(); DateTimeFormatter forma…

SpringBoot学习之ElasticSearch下载安装和启动(Mac版)(三十一)

本篇是接上一篇Windows版本,需要Windows版本的请看上一篇,这里我们继续把Elasticsearch简称为ES,以下都是这样。 一、下载 登录Elasticsearch官网,地址是:Download Elasticsearch | Elastic 进入以后,网页会自动识别系统给你提示Mac版本的下载链接按钮 二、安装 下载…

深度学习 - PyTorch基本流程 (代码)

直接上代码 import torch import matplotlib.pyplot as plt from torch import nn# 创建data print("**** Create Data ****") weight 0.3 bias 0.9 X torch.arange(0,1,0.01).unsqueeze(dim 1) y weight * X bias print(f"Number of X samples: {len(…

huawei 华为 交换机 配置 LACP 模式的链路聚合示例 (交换机之间直连)

组网需求 如 图 3-22 所示&#xff0c; SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络&#xff0c;且SwitchA 和 SwitchB 之间有较大的数据流量。用户希望 SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同VLAN 间互相通信。在两台 Switch 设备上…

flask_restful规范返回值之参数设置

设置重命名属性和默认值 使用 attribute 配置这种映射 , 比如&#xff1a; fields.String(attributeusername) 使用 default 指定默认值&#xff0c;比如&#xff1a; fields.String(defaultsxt) from flask import Flask,render_template from flask_restful import A…

C++ 输入与输出

数据输入输出 数据是程序处理的对象&#xff0c;输入输出操作是程序中不可或缺少的部分&#xff0c;C中输入输出操作都是通过函数调用实现的&#xff1b;C提供了一个“标准I/O库”。 格式输出函数-----printf 基本形式是&#xff1a; printf(“控制字符串”,输出项列表); 功能…

openwrt在校园网环境下开启nat6 (ipv6 nat)

如果将路由器接入校园网&#xff0c;我们只能获得一个128位掩码的ipv6地址。这个地址仅供路由器本身使用&#xff0c;而路由器后的设备无法获取到ipv6地址&#xff0c;因此我们可以利用网络地址转换&#xff08;NAT&#xff09;为这些设备分配本地ipv6地址。 下面是openwrt开启…

【C++练级之路】【Lv.16】红黑树(冰与火的碰撞,红与黑的史诗)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、红黑树的概念二、红黑树的模拟实现2.1 结点2.2 成员变量2.3 插入情况一&#xff1a;uncle在左&#xff…

Linux-进程控制(进程创建、进程终止、进程等待)

一、进程创建 1.1 fork函数介绍 在命令行下我们可以通过 ./ exe文件 来创建一个进程&#xff0c;通过fork函数&#xff0c;我们可以通过代码的形式从一个进程中创建一个进程&#xff0c;新进程为子进程&#xff0c;原进程为父进程&#xff0c;子进程在创建时&#xff0c;会与…

LabVIEW智能降噪系统

LabVIEW智能降噪系统 随着噪声污染问题的日益严重&#xff0c;寻找有效的降噪技术变得尤为关键。介绍了一种基于LabVIEW平台开发的智能降噪系统&#xff0c;该系统能够实时采集环境噪声&#xff0c;并通过先进的信号处理技术实现主动降噪&#xff0c;从而有效改善生活和工作环…

Stable Diffusion 进阶教程 - 二次开发(制作您的文生图应用)

目录 1. 引言 2. 基于Rest API 开发 2.1 前置条件 2.2 代码实现 2.3 效果演示 2.4 常见错误 3. 总结 1. 引言 Stable Diffusion作为一种强大的文本到图像生成模型&#xff0c;已经在艺术、设计和创意领域引起了广泛的关注和应用。然而&#xff0c;对于许多开发者来说&#xff…

『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南

&#x1f4e3;读完这篇文章里你能收获到&#xff1a; &#x1f310; 深入Apache APISIX架构&#xff1a; 从Nginx到OpenResty&#xff0c;再到etcd&#xff0c;一站式掌握云原生API网关的构建精髓&#xff0c;领略其层次化设计的魅力。 &#x1f50c; 核心组件全解析&#xff…

深入了解 Linux 中的 MTD 设备:/dev/mtd* 与 /dev/mtdblock*

目录 前言一、什么是MTD子系统&#xff1f;二、 /dev/mtd* 设备文件用途注意事项 三、/dev/mtdblock* 设备文件用途注意事项 三、这两种设备文件的关系四、关norflash的一些小知识 前言 在嵌入式Linux系统的世界里&#xff0c;非易失性存储技术扮演着至关重要的角色。MTD&#…

4.2 循环语句loop,等差数列求和

汇编语言 1. 循环语句loop loop指令的格式是&#xff1a;loop 标号&#xff0c;CPU执行loop指令的时候&#xff0c;要进行两部操作 cx cx - 1;判断cx中的值&#xff0c;不为0则转至标号处执行程序&#xff0c;如果为0则向下执行 循环使用loop来实现&#xff0c;循环次数存…

基于深度学习的OCR,如何解决图像像素差的问题?

基于深度学习的OCR技术在处理图像像素差的问题时确实面临一定的挑战。图像像素差可能导致OCR系统无法准确识别文本&#xff0c;从而影响其精度和可靠性。尽管已经有一些方法如SRN-Deblur、超分SR和GAN系列被尝试用于解决这个问题&#xff0c;但效果并不理想。然而&#xff0c;这…

上位机图像处理和嵌入式模块部署(qmacvisual拟合圆和拟合椭圆)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了拟合直线&#xff0c;今天继续学习下拟合圆和拟合椭圆。其实除了最后一步不同&#xff0c;两者的逻辑是差不多的。一般都是&#xf…

矩阵螺旋输出

问题描述&#xff1a; 所谓螺旋矩阵&#xff0c;顾名思义&#xff0c;就是将矩阵元素以螺旋顺序输出&#xff0c;如图&#xff1a; 解决思路&#xff1a; 由图不难发现&#xff0c;整个螺旋输出过程是一个个左下右上遍历的循环&#xff0c;只是遍历的规模在越变越小&#xff…