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)
- 全连接层:分类器,汇总卷积层和池化层得到的图像的底层特征和信息;通过激活函数(如 等)进行非线性变换
- 输出层:根据全连接层的信息得到概率最大的结果
2. 模型细节
- 卷积运算:
- 若步长 :卷积大小结果为
- 若步长 :卷积大小结果为 (N:初始图片大小;P:padding,零填充的层数大小;F:卷积核大小;s:stride,步长)
- 零填充两种方式:
- valid:不填充,结果变小
- same:输出图像与原图大小相同(如:若 ,则当 即 时成立)
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(下图为VGG16,共16 个可训练层,其中13 个卷积层和 3 个全连接层,一般作为编码器,通过卷积层提取特征,再通过池化层降维,从而有效保留关键特征。)
- 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):
- 隐藏单元(hidden units):
- 输出单元(output units):
- 输入层: 表示时刻 的输入。
- 第t次的中间的隐含层状态为:, 是非线性激活函数,比如
- 输出层:
3. 模型细节
- 类型:
- 一对一:固定的输入到输出,如图像分类
- 一对多:固定的输入到序列输出,如图像的文字描述
- 多对一:序列输入到输出,如情感分析,分类正面负面情绪
- 多对多:序列输入到序列的输出,如机器翻译(称之为编解码网络)
- 同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧的分类(也称之为序列生成)
- 参数共享: 是不变的,这种参数共享的机制降低了网络的参数量
- 问题:长期依赖;梯度消失、梯度爆炸问题;并行度较低,计算性能较差;信息容易丢掉,内存得大才行
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)门的组成: 函数(0全被遗忘、1全被保留、0-1部分信息保留)、一个执行点乘操作的计算元件
(3)门的种类:输入门、遗忘门(前两者决定记忆单元 的内容)和输出门
- 输入门:控制当前时刻的输入 保存到了当前时刻的记忆单元状态 的比例大小
- 遗忘门:控制上一时刻的记忆单元状态 保留到当前时刻的记忆单元状态 的比例大小
- 输出门:控制单元状态 输出到当前的输出 的比例大小
(4)LSTM训练过程:
- 前向传播具体计算过程:
- 遗忘门计算:控制历史信息的保留(利用 激活函数,获取上一时刻的隐藏层输出 和这一时刻的模型输入 )
- 输入门计算:控制当前时刻的输入中有多少信息要被添加到单元状态中
- 通过 函数确定需要添加的信息
- 通过 函数创建一个候选记忆单元信息状态
- 状态更新:通过处理要遗忘和要保留的信息,完成上一时刻的记忆单元状态 到当前时刻 的更新(矩阵乘积)
- 输出门计算:控制从记忆单元到输出的过程(输入为上一时刻得到的记忆单元状态 、上一时刻的隐藏层输出 和这一时刻的模型输入 ,输出这一时刻隐藏层的输出 和模型的输出 )
(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)基础步骤:
自注意力机制的核心思想:对于输入的每个位置,计算该位置与其他所有位置之间的相关性或相似性,并据此调整每个位置的表示。
- 输入表示:假设输入是一个矩阵 ,其中 是序列的长度, 是每个位置的表示维度。
- 线性变换:输入矩阵 被映射到三个不同的向量:查询(Query)、键(Key)和值(Value)。这通过三个不同的权重矩阵 实现,如下。【这里, 是查询矩阵, 是键矩阵, 是值矩阵。】
- 计算注意力权重:通过计算查询与键的点积来衡量各个位置之间的相关性,然后通过软max(Softmax)函数得到注意力权重。计算公式如下。【其中, 是键向量的维度,通常是 的一部分, 是缩放因子,用于防止点积值过大。】
(2)结构细节:
- 线性映射:在多头自注意力中,输入序列首先被映射到查询(Query)、键(Key)和值(Value)三个矩阵。这些映射是通过与权重矩阵相乘来实现的,通常这些权重矩阵是可学习的参数。
- 多头结构:多头自注意力机制包含多个“头”,每个头都独立地执行自注意力操作。每个头都有自己的一套权重矩阵,用于Q、K和V的线性映射。
- 缩放点积注意力:每个头计算Q和K的点积,然后通过除以一个缩放因子(通常是向量维度的平方根,如 )来防止梯度消失或爆炸。
- 掩码操作:如果存在,掩码(Mask)会被应用到点积的结果上,通常是将某些位置的值设置为一个非常大的负数(如负无穷),这样在应用softmax时,这些位置的权重会接近于零,从而实现对某些位置的忽略。
- softmax归一化:对缩放后的点积结果应用softmax函数,得到每个头的注意力权重矩阵。
- 加权求和:使用softmax得到的注意力权重矩阵与V矩阵相乘,得到每个头的输出,即加权求和的上下文向量。
- 头的组合:所有头的输出会被拼接在一起,然后通过一个线性层进行处理,这个线性层可以学习如何最好地组合来自不同头的信息。
- 前向传播:在前向传播过程中,每个自注意力头独立地处理输入,然后将结果沿着最后一个维度进行拼接,形成最终的多头自注意力输出。
(3)图示化的结构:
假设输入序列长度为 ,每个位置的维度为 ,则多头自注意力的结构可以简要描述为:
- 输入
- 映射到多个头:通过 映射到查询、键和值(每个头的维度为 )
- 对每个头计算注意力:
- 拼接所有头的输出:
- 线性变换输出:
(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