RNN,LSTM和GRU

RNN:有梯度消失,没有办法长时间记忆。

神经网络是用来特征提取

CNN因为后边加了一层全连接,才可以去做分类。

RNN和CNN

RNN:处理序列化数据(一句话,一段语音,一段视频)连续型的,具有记忆性,但是没有办法长期记忆,反向可能会导致梯度消失(梯度消失的原因是反向推到参数可能极小接近0)

CNN:第一张图片和第二张图片没有关系,一张张图片处理,所以不适合用来处理序列化数据(文本之类的)

    BPTT:RNN的反向传播,通过时间步进行反向传播

RNN点:可以处理序列化数据,使神经网络具有记忆功能

RNN点:如果序列太长可能会导致梯度消失或梯度爆炸,这个原因也使RNN不具备长期记忆功能

x:输入;h:隐藏层;o:输出  

u包含了很多小w(第一层)。v包含了很多小w(第二层)。 w:权重

output 【-1】  多对一  (一个输出有用)    文本分类、情感分析

output 所有的  多对多  (多个输出都有用) 机器翻译

一对多 所有的   一对多

#循环神经网络梯度消失原因:

###因为层数太深,后边的代价调整不到前边的信息,产生梯度消失,导致不能长期记忆

RNN链式求导:提了两个

包含累乘的激活函数。

tanh求导:(0-1)

RNN输入数据维度:(batch_size,seq_legth,hidden_size)批量大小,句子长度,多少维度的向量

nn.dynamic_rnn  动态RNN 循环调用神经单元。(单元,数据,)

major_time=TRUE 会将batch_size和seq_legth调换位置,但是还是三维。

补全0后,参与运算了,权重调整了,不合理。

动态RNN,参数:seq_length:设置好(句子长短不一,需要处理一下,不让填0的加入运算)         效果:补全的0,不参与运算

全连接就是一层神经网络

seq2seq:(三步)

①经过一个softmax。一个预测数据3维(0,1,2),真实数据是2维(0,1);

②求交叉熵

③求均值

weights=tf.sequence_mask(lengths=[batch_size],dtype=tf.float32)

sequence_loss=tf.contrib.seq2seq.sequence_loss(logits=outputs,targets=y,weights=weights)

有的地方不应该产生代价,

一个列表,每个句子的长度,

LSTM(遗忘门,输入门,输出门)引入了一个门和细胞状态c

门,sigmoid激活函数:0-1,判断上一个时间步带的信息是否有用。

c,把有用的信息储存到c中

遗忘门作用对象:细胞状态c。(判断c里边的信息是否需要忘记)

遗忘门:遗忘过去的信息。

输入门:判断当前的输入有多少需要更新到细胞状态c中

遗忘门和输入门h和x拼接后 为什么sigmoid激活后,值不一样?

原因:权重不一样

tanh:提取所有的总特征(等同于一个标准RNN网络)* sigmoid

现在的c:过去有用的,和现在

输出门:

c里的东西有用,但不一定对下一个ht(输出)有用,故:

再加一个sigmoid,判断c里的信息是否对下一个ht有用,做进一步筛选。

LSTM:

线性变换,不会累乘零点几,故不容易梯度消失。.

GRU(重置门,更新门)

处理序列化数据的门,lstm的一种变种

两个门

重置门

作用对象:上一个h状态

作用:哪些信息需要记住,哪些需要忘记。

更新门

作用对象:当前的ht,上一时刻作用ht-1

GRU的激活信息ht-1(新的)和xt,比LSTM的激活信息ht-1(有用的+没用的所有信息)都和xt拼接。

第一个sigmo作用:新的ht-1和xt进行拼接。

第二个sigmoid 两个作用:判断过去ht-1和当前ht的信息是否有用(判断两个,因为作用对象是2个)。

难点:1- sigmoid 取极端例子,全部都有用,走右边;之前全部都没用,走上边。

wr和wz的权重经过训练,最开始是随机的,但是权重会慢慢变。

因为去掉了细胞状态c,所以new_ht-1的状态又重新和xt进行了拼接,这一步代替了细胞状态c作用。

LSTM,GRU区别

  1. LSTM有三个门,而GRU有两个门
  2. 去掉了细胞单元C
  3. 输出的时候取消了二阶的非线性函数

LSTM有三个门,GRU只有两个门,减少了一个tanh函数,从而减少参数,减少运算量

### RNNLSTM GRU 的区别及其适用场景 #### 1. 特点对比 - **RNN (Recurrent Neural Network)** 循环神经网络是一种用于处理序列数据的模型,其核心特点是能够在不同时间步 $ t $ 上共享权重并保持隐藏状态。然而,标准的 RNN 存在一个主要缺陷——难以捕捉长时间依赖关系,这主要是由于梯度消失或爆炸问题引起的[^2]。 - **LSTM (Long Short-Term Memory)** 长短期记忆网络通过引入特殊的门控机制解决了 RNN 中存在的梯度消失问题。具体来说,它维护了一个细胞状态(Cell State, $ C_t $)以及隐藏状态(Hidden State, $ H_t $)。这些额外的状态允许 LSTM 更好地保存历史信息,并决定哪些部分应该被遗忘或者更新][^[^34]。 - **GRU (Gated Recurrent Unit)** 门控循环单元可以看作是对 LSTM 的简化版本,在保留了大部分性能的同时减少了计算复杂度。相比于 LSTM 的三个门(输入门、忘记门输出门),GRU 将输入门与忘记门合并成了单一的更新门,并且不再区分内部的记忆单元外部的隐藏表示[^4]。 #### 2. 参数说明 在上述提到的各种架构中,“$ W_{hv} $" 是指连接当前时刻输入向量 v 到下一时刻隐含层 h 的权值矩阵之一;类似的还有其他类型的权重比如那些负责调节各门行为的参数等等[^1]。 #### 3. 应用场景分析 每种模型都有自己的优势所在: - 对于较短的时间跨度内的模式识别任务,简单的 RNN 可能已经足够满足需求; - 当面对更复杂的序列建模挑战时,则可能需要采用更加先进的变体如 LSTM 或者 GRU 来应对可能出现的数据间较长距离的相关性; - 如果资源有限但又希望获得接近最佳的结果的话,那么可以选择效率更高的 GRU 而不是完整的 LSTM 结构因为两者表现往往相差不大但在实现上后者更为轻便快捷一些. ```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 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): _, (hn, _) = self.lstm(x) out = self.fc(hn[-1]) return out 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=input_size, hidden_size=hidden_size, num_layers=num_layers, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): gru_out, _ = self.gru(x) out = self.fc(gru_out[:,-1,:]) return out ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值