pytorch_08_RNN

1.循环神经网络的提出是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因而得名循环神经网络。

2.循环神经网络的基本结构特别简单,就是将网络的输出保存在一个记忆单元中,这个记忆单元和下一次的输入一起进入神经网络中。

3.使用双向循环神将网络,网络会先从序列的正方向读取数据,再从反方向读取数据,最后将网络输出的两种结果合在一起形成网络的最终输出结果。

4.解决长时依赖的问题:LSTM,GRU

LSTM(1997):长的短时记忆网络

LSTM由三个门来控制,这三个门分别是输入门,遗忘门和输出门。输入门控制者网络的输入,遗忘门控制者记忆单元,输出门控制者网络的输出。其中最重要的是遗忘门,遗忘门的作用是决定之前的哪些记忆被保留,哪些记忆将被去掉,正是遗忘门的作用,使得LSTM具有长时记忆的功能,对于给定的任务,遗忘门能够自己学习保留多少以前的记忆,这使得不需人为干扰,网络能够自主学习。

LSTM流程:

Ct-1作为上一步t-1时刻网络中的记忆单元,传入t时刻的网络之后,第一步操作是决定它的遗忘程度,将t时刻前面的记忆状态乘上一个0-1的系数进行衰减,接着加上t时刻学到的记忆作为更新之后的记忆传出网络,作为t+1时刻的网络的记忆单元。其中t-1时刻网络记忆的衰减系数是通过t时刻网络的输入和t-1网络输出来确定的,t时刻网络学到的记忆也是根据t时刻网络的输入和t-1时刻网络的输出得到的。

遗忘门:

首先将 t-1 时刻的网络输出ht-1和这一步的输入xt结合起来,然后作用线性变换Wf*[ht-1,xt]+bf再经过sigmoid激活函数,将结果映射到0-1作为记忆的衰减系数,记作ft,可以看到网络具体要保留多少记忆是由前一时刻的输出和这一时刻的输入共同决定的。

衰减系数:

t时刻学到的记忆:    :当前学习到记忆的衰减系数。:当前状态学习到的记忆

 最后将t-1时刻的衰减系数乘 t-1时刻的记忆,加上该时刻t下学到的记忆乘它对应的衰减系数,这样便得到了t时刻下的记忆状态

输出门:

当前时刻t的网络输出取决于当前时刻t的记忆状态和t时刻的输入时刻的输出

GRU:

GRU与LSTM最大的不同在于GRU将遗忘门和输入门合成了一个‘更新门’,同时网络不再额外的记忆状态,而是将输出结果作为记忆状态不断向后循环传递。

 

5.PyTorch的循环网络模块

标准RNN

 在Pytorch的调用:nn.RNN()

input_size:表示输入xt的特征维度

hidden_size:表示输出ht的特征维度,

num_layers:表示网络层数,默认是1层,

nonlinearity:非线性激活函数的选择,默认为Tanh,可以选择relu

bias:是否偏置

batch_first:决定网络输入的维度顺序,默认网络输入是按照(seq,batch,feature)输入的,序列长度在最前面,然后是批量,最后是特征维度,如果这个参数设置为True,那么顺序就变为(batch,seq,feature)

dropout:接受一个0-1的数值,会在网络中除了最后一层之外的其他输出层加上dropout层

bidirectional:默认为False,如果设置为True,就是双向循环神经网络的结构。

网络接收的输入和输出:

猜你喜欢

转载自www.cnblogs.com/shuangcao/p/11755576.html
今日推荐