RNN、LSTM

本文探讨了循环神经网络(RNN)的局限性,并介绍了两种改进的变种:长短期记忆网络(LSTM)和门控循环单元(GRU)。通过对比原始RNN,解释了LSTM如何利用门控机制来解决长期依赖问题,并介绍了GRU如何进一步简化结构以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在研究LSTM,遇到了一些好的知识点,记录下来分享给大家。
LSTM 的变种,如 Coupled LSTM、Peephole LSTM、GRU 等。
RNN到LSTM到GRU

如果说曾经一时无两的神经网络大法使得大家都将各种信息一股脑丢进去而等待结果,那么现在越来越多的研究反而开始将信息重新拆分出来,各司其职也许效果更好。

RNN的局限性:
RNN是有效的,但也有一定的局限性,主要在于:
原始RNN架构仅能捕获语言的一个方向上的依赖关系。基本上,在自然语言处理的情况下,它假定后面的单词对之前单词的含义没有影响。根据我们的语言经验,我们知道这肯定是不对的。
RNN也不能很好地捕捉长期的依赖关系梯度消失的问题在RNN中再次出现。

这两种局限性导致了新型的RNN架构的产生,下面将对此进行讨论。
门控循环单元(GRU),它是对基本循环单元的一种修改,有助于捕获长期的依赖关系,也有助于解决消失梯度问题。

LSTM架构中,有一个更新门和一个忘记门,而不是像在GRU中那样只有一个更新门。

原始RNN简单介绍

使用机器学习技术处理输入为基于时间的序列或者可以转化为基于时间的序列的问题时,我们可以对每个时间步采用递归公式,如下,
在这里插入图片描述
其中xt 是在第t个时间步的输入,ht 是新状态量,蕴含着前t个时间步的信息,在处理完xt后产生;ht-1 是前一个状态量,蕴含着前t-1个时间步的信息,在处理完xt-1后产生;fW 是参数为W的从输入到输出的连接,在每个时间步都相同,反向传播对它的参数W进行优化。

对于每个时间步:

在这里插入图片描述
在这里插入图片描述
LSTM简单介绍
原始RNN只有一个时序状态h,而LSTM有两个分别是h和c。LSTM将原始RNN的每个时序块改成一个cell,对于每个cell输入分别是xt,ht-1,ct-1,输出是ct和ht 。结构图如下:

在这里插入图片描述
在LSTM的cell内部有四个门(gate)分别是f,i,g和o:
f:whether to erase cell
i:whether to write to cell
g:how much to write to cell
o:how much to reveal cell
在这里插入图片描述
在这里插入图片描述
值得参考的博文

### RNNLSTM 的基本概念 循环神经网络(Recurrent Neural Networks, RNN)是一类用于处理序列数据的神经网络模型。其主要特点是隐藏状态会随着时间步传递下去,从而捕捉序列中的上下文信息[^2]。然而,传统的RNN存在梯度消失和梯度爆炸的问题,在训练过程中难以有效捕获长时间跨度内的依赖关系。 为了克服这一缺陷,Hochreiter等人提出了长短期记忆网络(Long Short-Term Memory, LSTM),这是一种特殊类型的RNNLSTM通过引入门控机制以及显式的记忆单元来缓解传统RNN面临的长期依赖性问题。具体来说,LSTM的核心组件包括遗忘门、输入门和输出门,这些门控结构允许模型选择性地保留或丢弃某些历史信息[^3]。 ### 差异分析 #### 结构差异 - **RNN**: 基础架构较为简单,仅包含单一的隐藏层更新逻辑。这种设计使得它在理论上能够记住过去的信息,但在实践中由于梯度传播特性限制了其实现能力。 - **LSTM**: 在基础之上增加了复杂的控制模块——即三个不同的“门”,分别是负责决定哪些部分应该被忘记的遗忘门;确定当前时刻新加入的内容及其强度的输入门;最后则是调节最终输出结果的选择过程由输出门完成[^1]。 #### 功能对比 - 对于较短距离的时间关联模式识别任务而言,普通的RNN可能已经足够胜任工作需求; - 当面对更复杂或者涉及更大范围时间间隔之间相互作用的学习场景时,则往往需要借助像LSTM这样的改进版本才能取得更好的效果[^4]。 ### 应用实例 无论是自然语言处理还是语音信号解析等领域都可以看到这两种技术的身影: - 文本生成:基于字符级预测下一个可能出现单词的任务非常适合采用双向编码器表示方法构建起来的标准形式下的单向型别名作为初始条件之一来进行连续多轮迭代计算直至达到预设停止准则为止; - 时间序列预测:比如股票价格走势预报等场合下运用堆叠式深层结构配合dropout正则化手段进一步提升泛化性能表现水平的同时还能保持较低程度过拟合风险; - 图像描述生成:结合卷积特征提取与递归解码框架共同作业实现端到端自动化流程管理目标达成率显著提高. ```python import torch from torch import 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) def forward(self, x): out, _ = self.rnn(x) out = self.fc(out[:, -1, :]) return out class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, layer_dim, output_dim): super(LSTMModel, self).__init__() self.hidden_dim = hidden_dim self.layer_dim = layer_dim self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_() c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_() out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach())) out = self.fc(out[:, -1, :]) return out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值