LSTM和GRU

目录

短期记忆问题

解决方案

递归神经网络回顾

长短期记忆体LSTM(Long Short-Term Memor)

GRU


短期记忆问题

在反向传播过程中,递归神经网络会遇到梯度消失问题。梯度是用于更新神经网络权重的值。梯度消失问题是当梯度随着时间向后传播而收缩时。如果梯度值变得非常小,它不会贡献太多的学习,因为梯度是用于更新神经网络的权重值(新的权值 = 旧权值 - 学习率*梯度)。因此,在循环神经网络中,获得小梯度更新的层会停止学习。一般为较早的层,所以RNN会忘记较早序列内容,只有短期记忆。

解决方案

LSTM 和 GRU 是作为短期记忆的解决方案而创建的。它们具有称为门的内部机制,可以调节信息流。

假如你看了一则广告,你的大脑会下意思记住重要的关键词,不记得其他的词。若是第二天你再想起这则广告,你不会逐字记住它,你可能会记住要点。其他的词会从记忆里消失。

这基本上就是 LSTM 或 GRU 所做的。它可以学会只保留相关信息来进行预测,而忘记不相关的数据。

递归神经网络回顾

它将先前的隐藏状态传递给序列的下一步。隐藏状态充当神经网络的记忆。它保存有关网络以前看到的先前数据的信息。

让我们看一下 RNN 的一个单元,看看如何计算隐藏状态。首先,将输入和之前的隐藏状态组合起来形成一个向量。该向量现在具有有关当前输入和先前输入的信息。向量经过tanh激活,输出是新的隐藏状态,或者网络的记忆。tanh 函数确保值保持在 -1 和 1 之间,从而调节神经网络的输出

输入和输出序列必须要是等长的。它内部的操作很少,但在适当的情况下(如短序列)工作得很好。RNN 使用的计算资源比它的进化变体、LSTM 和 GRU 少得多。

长短期记忆体LSTM(Long Short-Term Memor)

sigmoid 激活压缩 0 和 1 之间的值。这有助于更新或忘记数据,因为任何乘以 0 的数字都是 0,从而导致值消失或被“遗忘”。任何乘以 1 的数字都是相同的值,因此该值保持不变或“保留”。网络可以学习哪些数据不重要,因此可以被遗忘,或者哪些数据很重要,可以保留。

所以我们有三个不同的门来调节 LSTM 单元中的信息流。遗忘门、输入门和输出门。

遗忘门:来自先前隐藏状态的信息和来自当前输入的信息通过 sigmoid 函数传递。值介于 0 和 1 之间。越接近 0 意味着忘记,越接近 1 意味着保持。

输入门:tanh 输出与 sigmoid 输出相乘。sigmoid 输出将决定从 tanh 输出中保留哪些重要信息。

 

细胞状态:首先,细胞状态逐点乘以遗忘向量。如果它乘以接近 0 的值,这有可能在单元状态中丢弃值。然后我们从输入门获取输出并进行逐点加法,将单元状态更新为神经网络认为相关的新值。这给了我们新的细胞状态。

输出门:

输出门决定下一个隐藏状态应该是什么。首先,我们将之前的隐藏状态和当前输入传递给一个 sigmoid 函数。然后我们将新修改的单元状态传递给 tanh 函数。我们将 tanh 输出与 sigmoid 输出相乘来决定隐藏状态应该携带什么信息。输出是隐藏状态。然后将新的单元状态和新的隐藏状态转移到下一个时间步。

 

遗忘门决定与先前步骤相关的内容。输入门决定从当前步骤添加哪些信息是相关的。输出门决定下一个隐藏状态应该是什么。

GRU

GRU 是新一代的循环神经网络,与 LSTM 非常相似,是LSTM的变体。GRU 摆脱了细胞状态,使用隐藏状态来传递信息。它也只有两个门,一个重置门和更新门。

重置门:用于决定忘记多少过去的信息。 

更新门:更新门的作用类似于 LSTM 的遗忘门和输入门。它决定丢弃哪些信息以及添加哪些新信息 

 

 

z_{t}是属于要记住的,反过来1- z_{t}则是属于忘记的。

这就是 GRU。GRU 的张量操作较少;因此,它们的训练速度比 LSTM 的要快一些。没有一个明确的赢家,哪个更好。研究人员和工程师通常会尝试两者来确定哪一个更适合他们的用例。

综上所述,RNN 可以很好地处理序列数据以进行预测,但会受到短期记忆的影响。LSTM 和 GRU 是作为一种使用称为门的机制来减轻短期记忆的方法而创建的。门只是调节流经序列链的信息流的神经网络。LSTM 和 GRU 用于最先进的深度学习应用,如语音识别、语音合成、自然语言理解等。

文章参考:

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21

### LSTM GRU 的差异、优缺点及适用场景 #### 结构上的主要差异 LSTM GRU 都属于递归神经网络(RNN)的改进版本,用于解决传统 RNN 中存在的梯度消失问题以及更好地捕获长时间依赖关系。然而,在结构设计上存在显著的不同。 - **LSTM** 使用三个门控机制来控制信息流:输入门、遗忘门输出门。这些门通过 sigmoid 层决定哪些部分的信息应该被保留或丢弃,并通过 tanh 层引入新的候选值[^3]。 - **GRU** 则简化了这一过程,仅包含两个门:更新门 \( z(t) \) 重置门 \( r(t) \),并去除了单独的状态存储单元,将隐藏状态 \( h(t) \) 与细胞状态合并为单一向量[^2]。 这种架构上的精简使得 GRU 计算更加高效且消耗更少资源[^2]。 #### 性能比较及其优劣分析 | 特性 | LSTM | GRU | |---------------------|------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| | **复杂程度** | 更加复杂的内部结构 | 较简单的两层门控设计 | | **参数数量** | 参数较多 | 参数较少 | | **训练速度** | 相对较慢 | 显著更快 | | **内存需求** | 占用更多 | 占用较少 | 尽管如此, 实验表明在许多应用场景下二者最终效果相差无几; 不过当面对特别强调远距离上下文关联的任务时,LSTM往往能够提供更为优越的表现因为其具备更强的记忆能力可以有效应对较长序列中的模式识别挑战[^1]. 另外值得注意的是由于gru减少了不必要的冗余操作所以在硬件条件有限或者追求实时响应的情况下会成为更好的选择. #### 应用场景建议 对于那些需要精确建模非常长的时间跨度内的相互作用的数据集来说,lstm可能是首选方案比如机器翻译等涉及大量词汇间联系的工作当中.而如果目标是在保持良好预测精度的同时降低计算成本提高运行效率那么就应该考虑采用gru作为解决方案之一特别是在移动设备端部署ai模型之类的场合尤为合适. ```python import torch.nn as nn class LSTMModel(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(LSTMModel, self).__init__() self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True) # Define forward pass... class GRUModel(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(GRUModel, self).__init__() self.gru = nn.GRU(input_size, hidden_size, num_layers, batch_first=True) # Define forward pass... ``` 以上展示了如何利用 PyTorch 创建基本的 LSTM GRU 模型框架的例子.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值