RNN&LSTM&Transformer&CNN

1 为什么引入RNN?

对于图片分类,输入的每张图往往都是独立的,前后无关,这时CNN就够了。
但是对于很多语言类的问题,输入的语境和语序都是很重要的此时要用到RNN,RNN考虑了时序的变化,让神经网络有了某种记忆的能力。
在这里插入图片描述
在这里插入图片描述
RNN的训练和传统的神经网络一样,也采用误差反向传播加上梯度下降来更新权重,只不过计算隐藏层时它要引入之前不同时刻的数据,就像人的记忆难以持久一样,这种时序上的依赖当然不能无限延伸,虽然建立了不同时刻隐藏层记忆的联系,实现了记忆的效果但只是基于前一时刻短期记忆,通常情况下超过十步就不太行了。
即普通RNN无法回忆起久远记忆的原因:梯度消失或者梯度爆炸
①梯度消失
试想一下在反向传播过程中,算出的权重W若小于1,则经过很多层反向传播的误差逐渐缩小(很多个小于1的数相乘接近0),到了第一层基本不会发生变化,即学习不到内容。
在这里插入图片描述
②梯度爆炸
试想一下在反向传播过程中,算出的权重W若大于1,则经过很多层反向传播的误差逐渐增大(很多个大于1的数相乘接近正无穷),到了第一层会发生很大的变化,学习的也不会很精确。
在这里插入图片描述
注意!!
RNN共享一套参数,其梯度消失的真正含义不是连乘效应,而是远距离忽略不计,近距离被梯度主导。

为了解决梯度消失或者梯度爆炸导致普通的RNN无法回忆起久远记忆的问题,在RNN基础上提出了LSTM。

2 LSTM 长短期记忆

LSTM的实质是:过滤重要特征 忽略无关信息
LSTM和普通RNN相比多出了三个控制器:输入、输出、忘记
可以形象地理解为LSTM加了一个日记本
在这里插入图片描述
在这里插入图片描述
在每一部分的日记本训练中,如上图:

f1忘记门:Sigmoid 函数在0~1之间矩阵元素相乘时会抹掉值为0的元素,删除。相当于选择性遗忘了部分记忆:过滤重要特征 忽略无关信息
f2输入门:像一支铅笔,再次根据昨天的记忆和今天的输入决定在日记本上增加哪些记录,数学语言描述sigmoid再次对记忆进行选择 tan不是遗忘,而是相当于把这两天发生的事情进行梳理和归纳。

和RNN相比LSTM引入了更多的参数矩阵,因此训练起来更麻烦一些,但依然可以用梯度下降法。由于深度发掘了数据时序上的有趣关联LSTM在某种程度上模拟了大脑关注重要片段,而忽略无关信息。

LSTM与卷积神经网络CNN和反向传播一起,构成了人工智能20多年来发展最重要的三大基石。

3 Transformer

在Transformer中,编码器&解码器架构表现得最好。
在这里插入图片描述

3.1 编码器和解码器

编码器:对原始输入进行编程,生成机器学习可以理解的向量。多个enconder结构相同,参数相互独立。
解码器:拿到编码器输入,拿到一个m序列。
编码器和解码器的区别:
①编码器可以一起生成(根据一定的策略生成一次性将一批数据转化为机器可以理解的向量)
②解码器是一个个生成的(类比翻译:我、爱、你依次有顺序生成)
③解码器使用自回归,即在过去时刻的输出可以作为当前时刻的输入(y1~yt可以对yt+1有影响)

Transformer结构

由N个编码器和解码器叠加而成。
在这里插入图片描述
其中编码器的输出作为解码器的输入,下图为编码器结构
在这里插入图片描述
解码器中的Masked Muti-Head Attention 表明了此时生成的数据不受后面生成数据的影响(yt不受yt+1的影响,只受y1~yt-1的影响)。

3.2 layernorm & batchnorm

Batchnorm每次把列(特征)均值变为0方差变为1,再加两个学习的参数。
layernorm对每个样本做均值为0方差为1的归一化操作。
在这里插入图片描述
但是在三维及以上的空间中但是每个样本序列的长度不一定相同,没有的列就变成0,所以用layernorm。
Layernorm不用存全局变量,更好用。
在这里插入图片描述

3.3 注意力

注意力函数(query、keys、values、output)是一个将一个query和一些key-value对映射成一个输出output的函数,具体outputvalue的加权和(维度相同)。权重是queryvalue对应的key的相似度。不同的注意力机制有不同的算法。最简单的注意力机制:
在这里插入图片描述
多头注意力
在这里插入图片描述
在这里插入图片描述
Mask保护后不用前的数据(yt时刻的数据与yt+1无关)

3.4 position encoding位置编码

在这里插入图片描述
和RNN不同,Attention把整个序列里面的信息抓取出来做一个汇聚。但是他们关注点都在如何有效地使用序列信息,但是Attention不会利用时序信息,进而引出position encoding。
Transformer一般需要为节点加上位置编码信息,必要时为图增加全局编码。

4 Transformer VS CNN

CNN 是SA(自注意力)的一个特例。

4.1 CNN的优缺点


如果CNN想获得更大的感受野(全局的信息),就必须堆叠很多层卷积,然而不断地卷积池化操作有些麻烦而且效果不一定好。
而Tranformer浅层就可以捕获较大范围信息,全局信息丰富,可以更好地理解整个图像。

卷积的优点是可以做多个输出通道,每个输出通道可以识别不一样的模式(比如眼睛、鼻子、嘴巴,学习到不同抽象的特征),对应的提出了多头注意力机制(每一个头识别不一样的模式)。

4.2 Tranformer的优缺点

transformer的优点是对大数据适配能力强;缺点是训练数据非常多才可以

4.3 Tranformer vs CNN

在这里插入图片描述
关于TF很全的一个解释:
https://wmathor.com/index.php/archives/1438/

### 各种深度学习模型的工作原理与应用场景 #### 卷积神经网络(CNN) 卷积神经网络是一种专门用于处理具有网格状拓扑的数据的神经网络架构,特别擅长于图像分类、目标检测等领域。其核心思想在于利用局部感知野和权值共享来减少参数数量并提高计算效率[^2]。 - **工作原理**: CNN主要由卷积层、池化层和全连接层组成。卷积层通过滤波器提取特征;池化层则降低维度以减少过拟合;最后通过全连接层完成分类任务。 - **应用场景**: 图像识别、视频分析、医学影像诊断。 ```python import tensorflow as tf from tensorflow.keras import layers, models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(10)) ``` --- #### 循环神经网络(RNN) 循环神经网络是一种能够捕捉时间序列数据依赖关系的模型,广泛应用于自然语言处理领域。然而,由于梯度消失或爆炸问题,传统的RNN难以处理较长的时间序列数据[^3]。 - **工作原理**: RNN的核心特点是隐藏状态会传递到下一个时刻,形成一种“记忆”。这种特性使其可以建模动态时序行为。 - **应用场景**: 文本生成、情感分析、手写体识别。 --- #### 长短时记忆网络(LSTM) 作为一种改进版的RNNLSTM通过引入输入门、遗忘门和输出门三种门控机制,成功克服了传统RNN存在的梯度消失问题,非常适合处理长期依赖的任务。 - **工作原理**: LSTM单元内部维护了一个细胞状态,并借助上述三类门控结构决定何时更新、保留或者释放信息。 - **应用场景**: 股票价格预测、语音合成、机器翻译。 ```python from tensorflow.keras.layers import LSTM lstm_layer = LSTM(units=64, return_sequences=True) ``` --- #### 生成对抗网络(GAN) 生成对抗网络由生成器和判别器两部分构成,二者相互竞争又共同进化,最终实现高质量样本的生成[^1]。 - **工作原理**: 判别器负责区分真实数据与伪造数据,而生成器试图欺骗判别器接受虚假样本。经过多次迭代优化后,生成器可生成接近真实的样本。 - **应用场景**: 图像超分辨率重建、风格迁移、虚拟人物创建。 ```python import torch.nn as nn class Generator(nn.Module): def __init__(self): super().__init__() self.main = nn.Sequential( nn.Linear(100, 256), nn.ReLU(), nn.Linear(256, 784), nn.Tanh() ) def forward(self, x): return self.main(x) ``` --- #### Transformer Transformer摒弃了以往基于RNN的设计思路,转而采用自注意力机制(Self-Attention Mechanism),极大地提升了并行计算能力以及长距离上下文关联捕获的能力[^5]。 - **工作原理**: 编码器端接收输入序列并通过多头自注意力建立全局联系;解码器端依据编码结果逐步生成目标序列。整个过程无需顺序执行即可一次性获取全部位置的信息。 - **应用场景**: 自然语言生成、问答系统构建、跨语言翻译服务。 ```python import transformers tokenizer = transformers.BertTokenizer.from_pretrained('bert-base-uncased') model = transformers.BertModel.from_pretrained('bert-base-uncased') inputs = tokenizer("Hello world!", return_tensors="pt") outputs = model(**inputs) ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值