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函数,从而减少参数,减少运算量

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>