RNN和LSTM理解结构图

一篇讲解RNN输出与状态之间区别的文章,很多手绘讲解图:https://zhuanlan.zhihu.com/p/28919765
以下图片摘自https://www.jianshu.com/p/f3bde26febed

RNN结构图:

内部循环展开的为hidden state,即ht
rnn

LSTM分解步骤图:

C(cell state)为贯穿整个循环过程中的状态(Ct为t时刻状态),包括了所有的状态。我个人理解相当于贯穿始终的仓库。
并且整个过程由遗忘门,输入门,输出门来控制Ct的增加与删除。

  • 遗忘门控制 保留多少Ct-1
  • 输入门控制 从ht-1和xt-1中增加多少东西到Ct-1中,两者构成Ct
  • 输出门控制 从Ct中选取多少内容作为新的t时刻的输出,即ht

对于一个LSTM单元来说,输入xt,ht-1,Ct-1 ,输出ht,Ct
具体见下图:
LSTM

### RNNLSTM CNN 的区别与应用场景 #### 原理概述 - **RNN (Recurrent Neural Networks)** 循环神经网络的核心特点是其能够处理序列化数据,通过隐藏层的状态传递来捕捉时间上的依赖关系。具体来说,当前时刻 \( t \) 的状态不仅取决于当前输入,还受到前一时刻 \( t-1 \) 状态的影响[^3]。这种机制使 RNN 能够很好地建模具有时间顺序的数据,比如文本或语音信号。 - **LSTM (Long Short-Term Memory)** LSTM 是一种特殊的 RNN 结构,旨在解决传统 RNN 中长期依赖问题(即当时间步数增加时,梯度消失或爆炸的问题)。它引入了门控机制(遗忘门、输入门输出门),以及记忆细胞的概念,从而允许模型选择性地记住或忘记某些信息[^2]。这使得 LSTM 更加适合于需要长时间跨度关联的任务。 - **CNN (Convolutional Neural Networks)** 卷积神经网络主要用于图像识别领域,因其局部感知能力权值共享特性而闻名。卷积操作可以帮助提取空间层次特征,池化则用于降低维度并保留重要信息。尽管最初应用于视觉任务,但近年来也被扩展至其他类型的结构化数据处理中[^5]。 #### 技术特点对比 | 特性 | RNN | LSTM | CNN | |--------------------|------------------------------|------------------------------|-------------------------------| | 数据类型 | 序列/时间序列 | 序列/时间序列 | 图像/网格状 | | 主要优势 | 处理有序数据 | 解决长短期依赖问题 | 提取局部特征 | | 缺点 | 易受梯度消失影响 | 参数较多易过拟合 | 对全局上下文理解有限 | #### 适用场景分析 - **RNN** - 场景描述:适用于任何涉及序列预测或者分类的应用场合,例如自然语言处理中的词性标注、情感分析等。 ```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) def forward(self, x): out, _ = self.rnn(x) out = self.fc(out[:, -1, :]) return out ``` - **LSTM** - 场景描述:特别适合那些存在较长距离依赖性的任务,如机器翻译、视频动作检测等领域。 ```python import torch.nn as nn class SimpleLSTM(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(SimpleLSTM, self).__init__() self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): lstm_out, _ = self.lstm(x) out = self.fc(lstm_out[:, -1, :]) return out ``` - **CNN** - 场景描述:广泛应用于计算机视觉相关任务,包括但不限于物体识别、人脸识别、医学影像诊断等方面。 ```python import torch.nn as nn import torch.nn.functional as F class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc1 = nn.Linear(32 * 7 * 7, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = x.view(-1, 32 * 7 * 7) x = self.fc1(x) return x ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值