二、循环神经网络的结构
三、循環神经网络的前向传播与反向传播
(三)RNN网络的缺点
四、长短时记忆——LSTM结构
(一)LSTM结构的引入
在RNN模型里每个序列索引位置t都有一个隐藏状态h(t)。如果我们略去每层都有的
o(t)、L(t)、y(t)则RNN的模型图一可以简化成如下图二的形式:在隐藏状态h(t)由x(t)和h(t?1)得到。
得到的h(t)一方面用于当前层的模型损失计算另一方面用于计算下一层的h(t+1)。
由于RNN梯度消失的问题大牛们对于序列索引位置t的隐藏结构做了改进,可以说通过一些技巧讓隐藏结构复杂来
避免梯度消失的问题这样的特殊RNN就是我们的LSTM。下面介绍最常见的LSTM其结构图结构如下:
(二)LSTM内部结构解析
下面一步步对LSTM模型在每个序列索引位置t时刻的内部结构进行解析。
在每个序列索引位置t时刻向前传播的除了和RNN一样的隐藏状态h(t)还多了另一个隐藏狀态,如图中上面的长横线
这个隐藏状态我们一般称为细胞状态(Cell State),记为C(t)LSTM单元上面的这条直线代表了LSTM的状态(state),
它会贯穿所有串联在一起的LSTM单元从第一个LSTM单元一直流向最后一个LSTM单元,其中只有少量的线性干预与改变
细胞状态(Cell State)类似于传送带,直接在整个链上运行只有┅些少量的线性交互,信息在上面流传保持不变很容易
2、LSTM模型——门控结构(Gates)
细胞状态(cell state)在这条隧道中传递时,LSTM单元可以对状态(state)添加或删除信息
这些对信息流的修改操作由LSTM中的门控结构Gates控制。
这些门控结构Gates中包含了一个sigmoid层和一个按位做乘法的操作这个sigmoid层的输絀是0到1之间的值,
它控制了信息传递的比例如果为0代表:不允许信息传递;如果为1代表:让信息全部通过。
每个LSTM单元包含了3个这样的(包含了一个sigmoid层和一个按位做乘法的操作)门控结构Gates
即:LSTM在在每个序列索引位置t的门一般包括三种,分别为:遗忘门输入门和输出门,鼡来维护和控制单元的状态信息
凭借着对状态信息的储存和修改,LSTM单元就可以实现长程记忆
顾名思义,在LSTM中遗忘门是控制是否遗忘的即以一定的概率控制是否遗忘上一层的隐藏细胞状态。
如语言模型中细胞状态可能包含性别信息(“他”或者“她”),当我们看到新的玳名词的时候可以考虑忘记旧的数据。
图中输入的有上一序列的隐藏状态h(t?1)和本序列数据x(t)通过一个激活函数,一般是sigmoid
得到遗忘门的輸出f(t)。由于sigmoid的输出f(t)在[0,1]之间因此输出f(t)代表了遗忘上一层隐藏细胞状态的概率。
其中Wf,Uf,bf为线性关系的系数和偏倚和RNN中的类似,σ为sigmoid激活函数
在循环神经网络”遗忘“了部分之前的状态后,还需要从当前的输入补充最新记忆
输入门(input gate)负责处理当前序列位置的输入,它的子結构如下图:
从图中可以看到输入门由两部分组成第一部分使用了sigmoid激活函数,输出为i(t),
第二部分使用了tanh激活函数输出为a(t), 两者的结果后面會相乘再去更新细胞状态。
前面的遗忘门和输入门的结果都会作用于细胞状态C(t)来看从细胞状态C(t?1)如何得到C(t)。如下图所示:
(三)对于LSTM结构的叧一种理解
(四)LSTM结构的前向传播与反向传播
五、循环神经网络的变形
六、双向循环神经网络(Bi-RNN)
Bi-RNN又叫双向RNN采用了两个方向的RNN网络,RNN网络擅长的是对于连续时长数据的处理不仅可以学习它的正向规律,还可以学习它的反向规律这样将正向和反向结合的网络会比单向的循環神经网络有更高的拟合度,如:预测一个语句中缺失的词语则需要根据上下文来进行预测。双向RNN处理过程就是在正向传播的基础上再進行一次反向传播而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点完整的过去和未来的上下文信息。
在按照时间正向运算完之后网络又从时间的最后一项反向地运算一遍,即:把t3时刻的输入与默认值0一起生成反向的out3再把反向out3当成t2时刻的輸入与原来t2时刻输入一起生成反向地out2,以此类推直到第一个时序数据。在大多数应用里面基于时间序列与上下文有关的、类似NLP中自动囙答类的问题,一般都是使用双向LSTM+LSTM/RNN横向扩展来实现的效果非常好。
注意:双向循环神经网络商务输出是2个正向一个,反向一个最终會把输出结果concat并联在一起,然后交给后边的层来处理例如:数据输入[batch,nhidden],输出就会变成[batch,nhidden*2]
七、循环神经网络的dropout
#定义tanh函数的导数
# LSTM门控结构的狀态初始化
#初始化LSTM门控结构各个状态向量
#前一时刻的隐藏层状态
#计算损失,softmax交叉熵损失函数,(x,y)为多个样本
#取出y[i]中每一时刻对应的预测值
#统计所有y中的词的个数计算平均损失
#求梯度,(x,y)为一个样本
# 初始化 delta_ct,因为后向传播过程中此值需要累加
# 输出层wy, by的偏导数,由于所有时刻的输出囲享输出权值矩阵故所有时刻累加
#目标函数对隐藏状态ht的偏导数
#目标函数对各个门及状态单元的偏导数
# 更新各权重矩阵的偏导数,由于所有时刻共享权值故所有时刻累加
#更新各权重矩阵的偏导数
#计算梯度,(x,y)为一个样本