从RNN、LSTM到GRU的介绍


前言

循环神经网络(RNN),长短期记忆网络(LSTM),门限循环单元(GRU)。

一、RNN

Alt

RNN原理:神经网络模块A,读取到某个输入x,并且输出一个值h,循环可以使得信息可以从当前一步传到下一步。RNN本质上是与序列和列表相关的。展开来看,RNN可以被看做是同一神经网络的多次复制,每一个神经网络模块都会把信息传递给下一个。展开上图的循环可以得到:

在这里插入图片描述
注意:每一个神经网络模块所用的权重参数都是共享的,即权重共享。
RNN的缺点
1、受到短时记忆的影响,如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步,即长期依赖问题。
2、梯度可能会随着时间的推移不断下降减少,而梯度变的非常小的时候,就不会再继续学习,可能会发生梯度消失。

RNN神经网络模块内部结构:在标准RNN中,这个模块只有一个很简单的结构,例如tanh层。

在这里插入图片描述

二、LSTM

LSTM定义:是一种RNN特殊的类型,通过刻意的结构设计来解决长期依赖问题。在传统RNN基础上引入了细胞状态,可以对输入信息进行选择和保存,这是LSTM的关键。
相比与RNN的优点
1、弥补RNN短时记忆的缺点,可以有效保存很长时间之前的关联信息。
2、可以减少梯度消失和梯度爆炸问题。

在这里插入图片描述

细胞状态:细胞状态类似于传送带,直接在整个链上运行,交互较少,信息在上面流传保持不变会比较容易。

在这里插入图片描述

门结构:LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个按位的乘法操作。Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!LSTM 拥有三个门,来保护和控制细胞状态。

在这里插入图片描述
遗忘门:该门的作用是将上一个细胞的输出 h t − 1 h_{t-1} ht1和当前细胞的输入 x t x_t xt,经过线性变换( h t − 1 h_{t-1} ht1 x t x_t xt分别与 W f W_f Wf相乘然后相加)再经过sifmoid层输出一个0到1之间的数值。1表示完全保留,0表示完全舍弃。我们可能希望忘记一些旧的主语,并且记住一些新的主语,这时候遗忘门就起到了作用。
在这里插入图片描述

输入门:确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,会被加入到状态中。
在这里插入图片描述

细胞状态更新:更新细胞状态,使用上一个细胞状态 C t − 1 C_{t-1} Ct1,遗忘门的输出、输入门的输出,经过点击、相加等操作, C t − 1 C_{t-1} Ct1更新为 C t C_{t} Ct
在这里插入图片描述

输出门:确定输出值,即过滤后的一个版本。(首先上一个细胞状态 h t − 1 h_{t-1} ht1和该细胞的输入 x t x_t xt通过线性变换,再经过sigmoid层来确定将哪个部分输出,即 o t o_t ot,接着我们把细胞状态 C t − 1 C_{t-1} Ct1通过tanh进行处理,得到一个-1到1之间的值,并将它和sigmoid门的输出 o t o_t ot相乘,得到最终的输出 h t h_t ht。)
在这里插入图片描述

三、GRU

GRU定义:GRU是LSTM的一个变体,保持了LSTM效果的同时又使得结构更加简单。将遗忘门和输入们合并成为了一个单一的更新门。并且GRU没有细胞状态,大大简化了结构,相比于LSTM,GRU有更少的参数,训练的时候过拟合问题没有那么严重。
在这里插入图片描述

参考文章:
理解 LSTM 网络.
LSTM网络的变体之GRU网络.


总结

好热,烤熟了。

### 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) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ㄣ知冷煖★

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

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

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

打赏作者

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

抵扣说明:

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

余额充值