一文快速预览经典深度学习模型(一)——CNN、RNN、LSTM、Transformer、ViT

news2024/11/25 17:16:41

Hi,大家好,我是半亩花海。本文主要简要并通俗地介绍了几种经典的深度学习模型,如CNN、RNN、LSTM、Transformer、ViT(Vision Transformer)等,便于大家初探深度学习的相关知识,并更好地理解深度学习的基础内容,为后续科研开展建立一定的基础,欢迎大家一起交流学习。

目录

一、CNN(卷积神经网络)

1. 网络结构

2. 模型细节

3. 模型结构图

二、CNN变形

1. 具体模型

2. 网络结构

3. Inception细节

4. AlexNet和ResNet模型讲解

三、RNN(循环神经网络)

1. 模型简介

2. 模型结构

3. 模型细节

4. RNN模型讲解

5. 模型结构图

四、LSTM(长短期记忆神经网络)

1. 模型结构

2. 模型细节

3. 模型结构图

五、Transformer

1. 模型简介

2. 模型结构

3. 多头自注意力机制

4. 模型结构图(含具体结构解释)

六、ViT(Vision Transformer)

1. 模型简介

2. 模型结构

3. 模型结构图

4. ViT模型资源


一、CNN(卷积神经网络)

1. 网络结构

  • 输入层:输入图像等信息
  • 卷积层:用来提取图像的底层特征
  • 池化层:下采样(降采样层)防止过拟合,将数据维度减小(降维);最大(Max-Pooling)/平均(Ave-Pooling)
  • 全连接层:分类器,汇总卷积层和池化层得到的图像的底层特征和信息;通过激活函数(如 ReLU, Sigmoid, Tanh, softmax 等)进行非线性变换
  • 输出层:根据全连接层的信息得到概率最大的结果

2. 模型细节

  • 卷积运算:
    • 若步长 s=1:卷积大小结果为 N+2P-F+1
    • 若步长 s\neq 1:卷积大小结果为 \frac{N+2P-F}{s}+1(N:初始图片大小;P:padding,零填充的层数大小;F:卷积核大小;s:stride,步长)
  • 零填充两种方式:
    • valid:不填充,结果变小
    • same:输出图像与原图大小相同(如:若 s=1,则当 N+2P-F+1=N 即 P=\frac{1}{2} 时成立)

3. 模型结构图

  • 手写体数字识别的任务中,CNN模型结构如下所示:


二、CNN变形

1. 具体模型

LeNet-5、AlexNet、NIN、VGG、GoogLeNet、ResNet、DenseNet、MobileNets等。

2. 网络结构

  • LeNet:两个layer(conv+pool)+两层网络+FC(Fully Connected Layer,全连接层)
  • AlexNet:8层CNN(前5层卷积层,剩下3层全连接层);6000万参数量,首次使用Relu激活函数,dropout+BN(Batch Normalization,批标准化层)

  • NIN:Network In Network,1×1卷积,使得输入任意的特征图大小,输出为1×1×?,相当于一种全连接层/卷积化(全连接的输入是固定的,而卷积层可以处理任意大小输入,故相当于把全连接层变成卷积层,即卷积化);对多个通道进行信息整合,通道进行线性回归运算;达到通道数的变化,升维/降维/通道数不变,参数数量较少
  • VGG:参数量巨大,140M=140亿,19layers,VGG版本16/19
  • GoogLeNet:参数较少,引入Inception V1, V2, V3, V4模块(通过并行的卷积操作来提取多尺度特征),造成参数变少

  • ResNet:残差网络、深度卷积神经网络架构
    • 残差学习:学习输入和输出之间的残差(即差异),而不是直接映射关系。
    • 残差块(Residual Blocks):ResNet由多个残差块组成,每个残差块包含两条路径:一条是卷积层的堆叠,另一条是恒等连接(Identity Connection)。
    • 恒等连接:允许输入直接跳过一些层的输出,然后与这些层的输出相加。这有助于解决深层网络训练中的梯度消失问题。

3. Inception细节

  • 目的:代替人手工区确定到底使用1×1,3×3,5×5还是是否需要max_pooling层,由网络自动取寻找适合的结构,并且节省计算。
  • 特点:使用多种卷积核进行运算,合并结果通道数。
  • 最终结果:28×28×256
    • 使用更少参数,达到和AlexNet或VGG同样类似的输出结果。
  • 计算量还是太大?参数还是太多?
    • 网络缩小之后再扩展,在5×5之前加一个1×1卷积结构

4. AlexNet和ResNet模型讲解

  • AlexNet:
    • https://www.bilibili.com/video/BV1ih411J7Kz?spm_id_from=333.788.videopod.sections&vd_source=9a436674403fe319125921c7e9fd097d
    • https://www.bilibili.com/video/BV1hq4y157t1?spm_id_from=333.788.videopod.sections&vd_source=9a436674403fe319125921c7e9fd097d
  • ResNet:
    • https://www.bilibili.com/video/BV1Fb4y1h73E?spm_id_from=333.788.videopod.sections&vd_source=9a436674403fe319125921c7e9fd097d
    • https://www.bilibili.com/video/BV1P3411y7nn?spm_id_from=333.788.videopod.sections&vd_source=9a436674403fe319125921c7e9fd097d

三、RNN(循环神经网络)

1. 模型简介

  • 循环神经网络、序列模型、反馈神经网络
  • 用于处理序列数据
  • 隐状态h可以对序列形的数据提取特征,接着再转换为输出

2. 模型结构

  • 输入单元(input units):\left \{ x_{0},\cdot \cdot \cdot, x_{t-1}, x_{t},\cdot \cdot \cdot, x_{t+1},\cdot \cdot \cdot \right \}
  • 隐藏单元(hidden units):\left \{ h_{0},\cdot \cdot \cdot, h_{t-1}, h_{t},\cdot \cdot \cdot, h_{t+1},\cdot \cdot \cdot \right \}
  • 输出单元(output units):\left \{ o_{0},\cdot \cdot \cdot, o_{t-1}, o_{t},\cdot \cdot \cdot, o_{t+1},\cdot \cdot \cdot \right \}
  • 输入层:x_{t} 表示时刻 t 的输入。
  • 第t次的中间的隐含层状态为:\left \{ h_{t} = f(U\cdot x_{t}+W\cdot h_{t-1}) \right \}f 是非线性激活函数,比如 tanh
  • 输出层:o_{t} = softmax(V\cdot h_{t}) = V\cdot softmax(h_{t})

3. 模型细节

  • 类型:
    • 一对一:固定的输入到输出,如图像分类
    • 一对多:固定的输入到序列输出,如图像的文字描述
    • 多对一:序列输入到输出,如情感分析,分类正面负面情绪
    • 多对多:序列输入到序列的输出,如机器翻译(称之为编解码网络)
    • 同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧的分类(也称之为序列生成)
  • 参数共享:U, V, W 是不变的,这种参数共享的机制降低了网络的参数量
  • 问题:长期依赖;梯度消失、梯度爆炸问题;并行度较低,计算性能较差;信息容易丢掉,内存得大才行

4. RNN模型讲解

  • transformer:
    • https://www.bilibili.com/video/BV1pu411o7BE?spm_id_from=333.788.videopod.sections&vd_source=9a436674403fe319125921c7e9fd097d

5. 模型结构图


四、LSTM(长短期记忆神经网络)

1. 模型结构

(1)概述:LSTM对神经元单元状态的控制是通过一种叫“门”的结构实现的(有效筛选信息),在隐藏层里增加了记忆单元状态
(2)门的组成:sigmoid 函数(0全被遗忘、1全被保留、0-1部分信息保留)、一个执行点乘操作的计算元件
(3)门的种类:输入门、遗忘门(前两者决定记忆单元 C 的内容)和输出门

  • 输入门:控制当前时刻的输入 x_{t} 保存到了当前时刻的记忆单元状态 C_{t} 的比例大小
  • 遗忘门:控制上一时刻的记忆单元状态 C_{t-1} 保留到当前时刻的记忆单元状态 C_{t} 的比例大小
  • 输出门:控制单元状态 C_{t} 输出到当前的输出 h_{t} 的比例大小

(4)LSTM训练过程:

  • 前向传播具体计算过程:
    • 遗忘门计算:控制历史信息的保留(利用 sigmoid 激活函数,获取上一时刻的隐藏层输出 h_{t-1} 和这一时刻的模型输入 x_{t}
    • 输入门计算:控制当前时刻的输入中有多少信息要被添加到单元状态中
      • 通过 sigmoid 函数确定需要添加的信息
      • 通过 tanh 函数创建一个候选记忆单元信息状态
    • 状态更新:通过处理要遗忘和要保留的信息,完成上一时刻的记忆单元状态 C_{t-1} 到当前时刻 C_{t} 的更新(矩阵乘积)
    • 输出门计算:控制从记忆单元到输出的过程(输入为上一时刻得到的记忆单元状态 C_{t}、上一时刻的隐藏层输出 h_{t-1} 和这一时刻的模型输入 x_{t},输出这一时刻隐藏层的输出 h_{t} 和模型的输出 y_{t}

(5)计算误差:将输出值与实际值对比,建立损失函数,得到模型计算误差

(6)反向传播、更新参数:根据计算误差,多轮反向传播计算,更新模型参数(遗忘门、输入门、输出门、候选记忆单元中的权重参数及偏置、隐藏层与输出之间的权重参数),直至模型达到理想估计效果,用此时的可用模型对电池SOH进行估计

2. 模型细节

  • 对比RNN:
    • 将RNN中的隐藏层单元换成了一种具有特殊记忆功能的循环体结构
    • 在隐藏层状态h的基础上增加了记忆单元状态c(选择性地保留或删除历史信息,保证了长时间数据学习之后的梯度依然存在
  • GRU:门控循环单元
    • 重置门
    • 更新门

3. 模型结构图


五、Transformer

1. 模型简介

  • 基于自注意力机制(self-attention)的深度学习模型;
  • 主要用于处理序列到序列的任务,如机器翻译、文本摘要等

2. 模型结构

  • 核心:采用了全连接的自注意力层替代了传统的RNN或CNN
  • 模型结构的关键部分:
    • 编码器-解码器架构:Transformer模型由编码器(Encoder)和解码器(Decoder)两部分组成。编码器处理输入序列,而解码器生成输出序列。
    • 多头自注意力机制:编码器和解码器内部都包含多头自注意力机制(Multi-Head Attention),这种机制允许模型在处理序列中的每个元素时,同时考虑序列中的其他元素,从而捕捉序列内部的依赖关系。
    • 层级归一化(Layer Normalization):在每个子层(自注意力子层和前馈网络子层)之后,都会进行层归一化操作,这有助于模型的训练稳定性。
    • 残差连接(Residual Connection):每个子层的输出会与输入相加,形成残差连接,这有助于解决深层网络中的梯度消失问题。
    • 前馈网络(Feed Forward Network):在自注意力层之后,每个编码器和解码器的子层都会通过一个前馈网络,这个网络对每个位置的向量进行独立相同的操作。
    • 位置编码:由于Transformer模型本身不具备处理序列顺序的能力,因此需要引入位置编码来捕捉序列中词汇的位置信息。位置编码可以是学习得到的,也可以是通过正余弦函数(sin/cos)生成的。
    • 词嵌入:模型的输入首先通过一个词嵌入层,将词汇映射到高维空间中的向量表示。
    • 位置编码:为了保留序列信息,添加了一个位置编码到词向量中,使得模型能够理解单词之间的相对顺序。
    • 模块堆叠:编码器和解码器都由多个相同的层堆叠而成(通常是6个),每个层都包含自注意力机制和前馈网络,这样的结构使得模型能够捕获不同尺度的依赖关系。

3. 多头自注意力机制

多头自注意力机制(Multi-Head Attention)是Transformer模型中的核心组成部分,它允许模型在不同的表示子空间中并行地捕捉信息。

(1)基础步骤:

自注意力机制的核心思想:对于输入的每个位置,计算该位置与其他所有位置之间的相关性或相似性,并据此调整每个位置的表示。

  • 输入表示:假设输入是一个矩阵 X \in \mathbb{R}^{n \times d},其中 n 是序列的长度,d 是每个位置的表示维度。
  • 线性变换:输入矩阵 X 被映射到三个不同的向量:查询(Query)、键(Key)和值(Value)。这通过三个不同的权重矩阵 W_{Q}, W_{K}, W_{V}​ 实现,如下。【这里,Q 是查询矩阵,K 是键矩阵,V 是值矩阵。】

Q=X\cdot W_{Q}, K=X\cdot W_{K}, V=X\cdot W_{V}

  • 计算注意力权重:通过计算查询与键的点积来衡量各个位置之间的相关性,然后通过软max(Softmax)函数得到注意力权重。计算公式如下。【其中,d_{k} 是键向量的维度,通常是 d 的一部分,\frac{1}{\sqrt{d_k}} 是缩放因子,用于防止点积值过大。】

Attention(Q, K, V)=Softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V

(2)结构细节:

  • 线性映射:在多头自注意力中,输入序列首先被映射到查询(Query)、键(Key)和值(Value)三个矩阵。这些映射是通过与权重矩阵相乘来实现的,通常这些权重矩阵是可学习的参数。
  • 多头结构:多头自注意力机制包含多个“头”,每个头都独立地执行自注意力操作。每个头都有自己的一套权重矩阵,用于Q、K和V的线性映射。
  • 缩放点积注意力:每个头计算Q和K的点积,然后通过除以一个缩放因子(通常是向量维度的平方根,如 \sqrt{k})来防止梯度消失或爆炸。
  • 掩码操作:如果存在,掩码(Mask)会被应用到点积的结果上,通常是将某些位置的值设置为一个非常大的负数(如负无穷),这样在应用softmax时,这些位置的权重会接近于零,从而实现对某些位置的忽略。
  • softmax归一化:对缩放后的点积结果应用softmax函数,得到每个头的注意力权重矩阵。
  • 加权求和:使用softmax得到的注意力权重矩阵与V矩阵相乘,得到每个头的输出,即加权求和的上下文向量。
  • 头的组合:所有头的输出会被拼接在一起,然后通过一个线性层进行处理,这个线性层可以学习如何最好地组合来自不同头的信息。
  • 前向传播:在前向传播过程中,每个自注意力头独立地处理输入,然后将结果沿着最后一个维度进行拼接,形成最终的多头自注意力输出。

(3)图示化的结构:

假设输入序列长度为 n,每个位置的维度为 d,则多头自注意力的结构可以简要描述为:

  • 输入 X \in \mathbb{R}^{n \times d}
  • 映射到多个头:通过 W_{Q}^{i}, W_{K}^{i}, W_{V}^{i} 映射到查询、键和值(每个头的维度为 d_{k}
  • 对每个头计算注意力:Attention_{i}=Softmax(\frac{Q_{i}K_{i}^{T}}{\sqrt{d_{k}}})V_{i}
  • 拼接所有头的输出:\text{MultiHead} = \text{Concat}(\text{Attention}_1, \dots, \text{Attention}_h)
  • 线性变换输出:\text{Output} = \text{MultiHead} W_O

(4)好处:捕捉到序列中不同位置之间的复杂关系;通过并行处理提高了模型的计算效率;使得模型能够从不同的角度学习数据的表示,增强了模型的表达能力。

4. 模型结构图(含具体结构解释)


六、ViT(Vision Transformer)

1. 模型简介

  • Transformer 架构应用于计算机视觉(cv)任务的模型
  • 将图像视为序列数据,利用Transformer在自然语言处理(nlp)中的成功
  • ViT的关键思想:通过自注意力机制,ViT能够充分利用图像的全局上下文信息,而不仅仅依赖于局部特征,这使得它能够在较大的图像数据集上表现出色。

2. 模型结构

总结:输入图像分割成patches线性嵌入与位置编码Transformer编码器(自注意力机制) → [CLS] token输出分类结果

(1)输入处理

  • 图像分块(Patch Embedding): ViT将输入图像划分为固定大小的图像块(patch),例如16×16像素的块。每个块被展平并映射到一个高维嵌入空间中,这通常通过一个线性层来实现。
  • 位置编码(Position Encoding): 由于 Transformer 本身不具备处理序列中元素位置的能力,ViT为每个图像块添加位置编码,以保留空间信息。位置编码可以是固定的或可学习的。

(2)Transformer 编码器

ViT的核心是标准的Transformer编码器,由多个自注意力层和前馈神经网络组成。

  • 自注意力机制(Self-Attention): 在每个自注意力层中,每个图像块通过自注意力机制与其他块进行交互。这使得模型能够捕捉不同区域之间的依赖关系。
  • 多头注意力(Multi-Head Attention): 通过多头机制,模型可以在多个子空间中并行学习特征,增强了特征表示能力。
  • 前馈神经网络(Feed-Forward Network, FFN): 每个自注意力层后面接一个前馈神经网络,通常由两个线性层和一个非线性激活函数(如GELU)组成。
  • 层归一化和残差连接: 在每个子层之后,ViT应用层归一化和残差连接,以稳定训练并提高模型的表达能力。

(3)输出处理

  • 分类头(Classification Head): ViT通常在处理完所有层之后,将第一个图像块(通常称为[CLS] token)用作分类结果的表示。这个token的输出通过一个线性层映射到类别空间,得到最终的分类结果。

3. 模型结构图

(1)vit_figure:

Transformer的编码器(Transformer_Encoder)

  • 多层自注意力机制(Self-Attention)
  • 前馈神经网络(Feedforward Neural Network,FNN)

(2)mixer_figure:MLP-Mixer,基于多层感知机(MLP)的视觉模型

4. ViT模型资源

GitHub - google-research/vision_transformer

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

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

相关文章

【D3.js in Action 3 精译_038】4.2 D3 折线图的绘制方法及曲线插值处理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

数据结构(8.7_2)——败者树

多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结

Web Broker(Web服务应用程序)入门教程(1)

1、介绍 Web Broker 组件(位于工具面板的“Internet”选项卡中)可以帮助您创建与特定统一资源标识符(URI)相关联的事件处理程序。当处理完成后,您可以通过编程方式构建 HTML 或 XML 文档,并将它们传输给客…

Redis高级篇之缓存一致性详细教程

文章目录 0 前言1.缓存双写一致性的理解1.1 缓存按照操作来分 2. 数据库和缓存一致性的几种更新策略2.1 可以停机的情况2.2 我们讨论4种更新策略2.3 解决方案 总结 0 前言 缓存一致性问题在工作中绝对没办法回避的问题,比如:在实际开发过程中&#xff0c…

Vue2进阶之Vue3高级用法

Vue3高级用法 响应式Vue2:Object.definePropertyObject.definePropertythis.$set设置响应式 Vue3:Proxy composition APIVue2 option API和Vue3 compositionAPIreactive和shallowReactivereadonly效果toRefs效果 生命周期main.jsindex.htmlLifeCycle.vue…

Unity3D学习FPS游戏(10)子弹攻击敌人掉血(碰撞检测)

前言:前面最然创造出带有血条的敌人,但子弹打中敌人并没有效果。所以本篇将实现子弹攻击敌人,并让敌人掉血。 子弹攻击敌人掉血 整体思路目标补充知识-碰撞检测 准备工作刚体和碰撞器添加添加刚体后子弹代码优化补充知识-标签系统Tag添加 碰…

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO

问题 折磨的开始是天下苦黄狗久矣,为了不再被讨乞丐的显存恶心,一怒之下购入了AMD显卡(20GB显存确实爽 头一天就跑了3dmark验机,完美通过,玩游戏也没毛病 但是呢这厮是一点不省心,玩游戏没问题&#xff0c…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要:本文以服装品牌零售业态融合为背景,探讨信息流优化和资金流创新的重要作用,并结合开源 AI 智能名片 S2B2C 商城小程序,分析其如何进一步推动服装品牌在零售领域的发展,提高运营效率和用户体验,实现商业…

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片(Shard): 将索引数据分割成多个部分,每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理,从而提高系统的扩展性和性能。 在创建索…

语言模型的评测

语言模型的评测 内在评测 在内在评测中,测试文本通常由与预训练中所用的文本独立同分布的文本构成,不依赖于具体任务。最为常用的内部评测指标是困惑度(Perplexity) 困惑度是衡量语言模型对测试文本预测能力的一个指标&#xf…

Golang | Leetcode Golang题解之第535题TinyURL的加密与解密

题目: 题解: import "math/rand"type Codec map[int]stringfunc Constructor() Codec {return Codec{} }func (c Codec) encode(longUrl string) string {for {key : rand.Int()if c[key] "" {c[key] longUrlreturn "http:/…

德国卡赫携丰硕成果七赴进博会

第七届中国国际进口博览会于11月5日在国家会展中心(上海)正式拉开帷幕。作为全球最大的清洁设备和清洁解决方案提供商,“全勤生”德国卡赫连续七年参展,并携集团旗下子品牌HAWK霍克一同亮相技术装备展区3号馆,更带来多…

IT架构管理

目录 总则 IT架构管理目的 明确组织与职责 IT架构管理旨在桥接技术实施与业务需求之间的鸿沟,通过深入理解业务战略和技术能力,推动技术创新以支持业务增长,实现技术投资的最大价值。 设定目标与范围 IT架构管理的首要目的是确立清晰的组织…

Rust项目结构

文章目录 一、module模块1.文件内的module 二、模块化项目结构1.关于module2.各个模块之间互相引用 三、推荐项目结构1.实例 参考 一、module模块 1.文件内的module 关键字:mod 引入模块中的方法 usemod名字:方法名usemod名字.*写全路径 二、模块化…

HiveSQL 中判断字段是否包含某个值的方法

HiveSQL 中判断字段是否包含某个值的方法 在 HiveSQL 中,有时我们需要判断一个字段是否包含某个特定的值。下面将介绍几种常用的方法来实现这个功能。 一、创建示例表并插入数据 首先,我们创建一个名为employee的表,并插入一些示例数据&am…

408——计算机网络(持续更新)

文章目录 一、计算机网络概述1.1 计算机网络的概念1.2 计算机网络体系结构1.3 总结 二、物理层2.1 物理层的基本概念2.2 物理层的基本通信技术2.3 总结 三、数据链路层3.1 数据链路层基础概论3.2 数据链路层的通信协议 一、计算机网络概述 1.1 计算机网络的概念 计算机网络的定…

正反shell反弹的区分

在shell反弹中我们会根据参照物的不同来区分正反shell反弹。 本次我们需要使用win和kali进行实验: 在shell反弹中我们需要在win上面安装netcat(瑞士军刀)用于可以执行监听指令。 下载指导链接https://blog.csdn.net/qq_40359932/article/d…

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中,客户总是希望你的配色是美的,但是美如何定义&#xff…

Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

qt QFile详解

1、概述 QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类,后者又继承自QIODevice类。QFile类提供了一个接口,允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下,QFile假定文件内容为…