RNN、LSTM、GRU理解

一、RNN(循环神经网络)

1.1 RNN与全连接神经网络的区别

RNN比全连接神经网络多了参数h0,因此RNN的神经元公式比全连接神经网络的神经元多一项。
训练过程与全连接神经网络并无区别:梯度下降原则
在这里插入图片描述
此时输出层的神经元公式为:
在这里插入图片描述
整一个RNN结构共享1组(u,w,b),这是RNN结构最重要的特性,且每一个隐藏层神经元h的计算公式是由当前输入x与上一个隐藏层神经元的输出组成。

1.2 RNN循环神经网络的优势

输入可以是多个且有序的,它可以模仿人类阅读的顺序去读取文本或者背的序列化数据,且通过隐藏层神经元的编码,上一个隐藏层神经元的信息可以传递到下一个神经元,因而形成一定的记忆能力,能够更好地理解序列化数据。

1.3 其他RNN循环神经网络结构

1.3.1 单输入多输出

这种结构通常应用于输入一个图像,输出描述该图像的文本。
在这里插入图片描述
在这里插入图片描述

1.3.2 多输入多输出的RNN结构

由于输入和输出等长,这种结构的用途就比较狭窄,仅限于输入与输出等长的序列数据如诗词文等,作诗机器人就是这么诞生的。
在这里插入图片描述

1.3.3 输入输出不等长的多输入多输出的RNN结构(seq2seq)

我们可以利用RNN和自编码器的原理构造一个翻译机器人,同样的,这个自编码器(翻译机器人)的输入也等于输出,只不过输入与输出用不同的语言去表达罢了
在这里插入图片描述
在这里插入图片描述

二、LSTM(长短期记忆网络)

2.1 RNN的结构缺陷

由于在(u,w,b)不变的情况下,梯度在反向传播过程中,不断连乘,数值不是越来越大就是越来越小,这样就出现了梯度爆炸或者梯度消失的情况,所以往往用RNN去训练模型得不到预期的效果。

2.2 LSTM结构

与RNN相比,LSTM的神经元还是基于输入X和上一级的隐藏层输出h来计算,只不过内部结构变了,也就是神经元的运算公式变了,而外部结构并没有任何变化,因此之前提及到的RNN各种结构都可以用LSTM来替换。
LSTM的神经元加入了输入门i、遗忘门f、输出门o、内部记忆单元c。
在这里插入图片描述

2.2.1 遗忘门f(forget gate)

控制输入x和上一层隐藏层输出h被遗忘的程度大小。
在这里插入图片描述

2.2.2 输入门i(input gate)

控制输入i和当前计算的状态更新到记忆单元的程度大小。
在这里插入图片描述

2.2.3 内部记忆单元

在这里插入图片描述

2.2.4 输出门o (output gate)

控制输入x和当前输出取决于当前记忆单元的程度大小
在这里插入图片描述

2.2.5 公式中参数的解释

其中σ一般选择sigmoid作为激励函数,主要起到门控作用。因为sigmoid函数的输出为0到1,当输出接近0或1时,符合物理意义上的关和开。

tanh函数作为候选记忆c的选项,因为其输出为-1到1,符合大多数场景下的0中心的特征分布,且梯度(求导)在接近0处,收敛速度比sigmoid函数要快,这也是选择它的另外一个原因。

总结:

对于一个训练好的LSTM模型,我们要知道它的每一个门(遗忘门、输出门、输入门)都有自己的(u,w,b),上述公式也有体现,这是在训练过程中得到的。

而且当输入的序列不存在有用的信息时,遗忘门f的值就会接近1,那么输入门i的值接近0,这样过去有用的信息就会被保存。

当输入的序列存在重要信息时,遗忘门f的值就会接近0,那么输入门i的值就会接近1,此时LSTM模型遗忘过去的记忆,记录重要的记忆。

三、GRU(门控循环单元)

3.1 GRU结构

由于LSTM门控网络结构过于复杂与冗余

GRU将遗忘门和输入门合并乘更新门,同时将记忆单元与隐藏层合并成重置门,进而让整个结构运算变得更加就简化且性能得以增强。
在这里插入图片描述

图中的zt和rt分别表示更新门和重置门。更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多。重置门控制前一状态有多少信息被写入到当前的候选集 h~t 上,重置门越小,前一状态的信息被写入的越少。
在这里插入图片描述

### RNNLSTM GRU 的概念及区别 #### 循环神经网络 (RNN) 循环神经网络是一种专门用于处理序列数据的模型。它具有输入层、输出层隐藏层,与普通前馈神经网络不同的是,RNN不同的时间步 $ t $ 上有不同的状态,并且上一时刻 ($ t-1 $) 隐藏层的状态会被传递到当前时刻 ($ t $),形成了一种动态的时间依赖关系。这种特性使得 RNN 能够捕捉序列中的上下文信息[^1]。 然而,标准的 RNN 存在一个显著的问题——梯度消失或爆炸现象,在训练过程中可能导致无法有效学习长时间跨度的信息[^3]。 --- #### 长短期记忆网络 (LSTM) 为了克服 RNN 中存在的梯度消失问题以及难以建模长期依赖性的缺陷,Hochreiter Schmidhuber 提出了长短期记忆网络(Long Short-Term Memory, LSTM)。 LSTMRNN 的一种改进版本,其核心在于引入了 **门控机制** 来调节信息流。具体来说,LSTM 包括三个主要组件:遗忘门、输入门输出门。这些门的作用分别是决定哪些信息应该被丢弃、更新或者保留下来。通过这种方式,LSTM 可以更好地保存历史信息并缓解梯度消失问题[^2]。 在实际应用中,由于能够很好地捕获远距离的相关性,因此广泛应用于自然语言处理领域内的诸多任务,比如机器翻译、情感分析等场景下表现出色。 --- #### 门控循环单元 (GRU) 尽管 LSTM 解决了很多关于传统 RNN 所面临挑战方面取得成功,但它也增加了计算复杂性内存消耗。于是 Cho 等人在研究基础上提出了更简洁高效的替代方案即 Gated Recurrent Unit(GRU) 。 相比起完整的三重门设计,LSTM简化成了两个部分:一个是reset gate用来控制候选激活值c_t'如何组合先前状态h_(t−1);另一个update gate则决定了最终新状态ht由多少比例来自旧状态加上新的贡献构成。这样的架构不仅减少了参数数量还提高了运行效率同时保持良好性能水平接近甚至超越原始形式下的表现效果. --- #### 使用场景对比 | 特性/算法 | RNN | LSTM | GRU | |------------|-------------------------|-------------------------------|--------------------------------| | 复杂程度 | 较低 | 高 | 中等 | | 参数量 | 少 | 多 | 居中 | | 效率 | 易受梯度消失影响 | 对抗梯度消失能力强 | 平衡了速度与能力 | | 应用范围 | 文本分类、简单序列预测 | 自然语言生成、语音识别 | 时间序列预测、对话系统优化 | 当面对较短的记忆需求时,RNN可能已经足够胜任;而对于那些需要考虑较长周期关联的任务而言(如视频帧间动作检测),那么采用具备更强表达力的LSTM将是更好的选择;如果追求更高的运算效能同时又不想牺牲太多准确性的话,则可以尝试利用GRU作为解决方案之一。 ```python import torch.nn as nn class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleRNN, self).__init__() self.rnn = nn.RNN(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, layer_dim, output_dim): super(LSTMModel, self).__init__() self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True) class GRUModel(nn.Module): def __init__(self,input_dim,hidden_dim,output_dim,num_layers=1,bidirectional=False): super().__init__() self.gru=nn.GRU(input_dim,hidden_dim,num_layers=num_layers,batch_first=True,bidirectional=bidirectional) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值