双向长短时记忆循环神经网络

LSTM

传统的循环神经网络(RNN)能够得到的上下文信息范围很有限。这个问题就使得隐含层的输入对于网络输出的影响随着网络环路的不断递归而衰退。

为了解决这个问题,长短时记忆(LSTM)结构诞生了。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。

LSTM单元能够很好的解决跨时间记忆以及梯度消失的问题。LSTM结构的形式化定义如下:
双向长短时记忆循环神经网络_第1张图片
LSTM时刻j的状态由两个向量组成,分别是cj和hj,cj是记忆组件,hj是隐藏状态组件,三个门结构i、f和o,分别控制输入、遗忘和输出。z为更新候选项

LSTM论文传送门:https://ieeexplore.ieee.org/document/6795963

LSTM单元大致结构如下:
双向长短时记忆循环神经网络_第2张图片

简单通俗的理解LSTM的整个运作流程:https://www.jianshu.com/p/4b4701beba92

双向循环神经网络

双向循环神经网络的基本思想是每一个输入序列正向和反向都经过一次循环神经网络,这样的双向结构提供给输出层输入序列中每个结点完整的过去和未来的上下文信息。BiRNN在一个输入向量对应一个输出向量的任务中非常有效。
结构图如下:
双向长短时记忆循环神经网络_第3张图片

双向循环神经网络(BiRNN)的计算过程如下:

向前推算(Forward pass):

1.沿着时刻1到时刻T正向计算一遍,得到并保存每个时刻向前隐含层的输出。
2.沿着时刻T到时刻1反向计算一遍,得到并保存每个时刻向后隐含层的输出。
3.正向和反向都计算完所有输入时刻后,每个时刻根据向前向后隐含层得到最终输出。

向后推算(Backward pass):

1.计算所有时刻输出层的δ项。
2.根据所有输出层的δ项,使用 BPTT 算法更新向前层。
3.根据所有输出层的δ项,使用 BPTT 算法更新向后层。

Bi-RNN论文传送门: https://ieeexplore.ieee.org/document/650093

双向LSTM

双向LSTM即将BiRNN中的普通RNN单元替换成LSTM单元。结构图如下:
双向长短时记忆循环神经网络_第4张图片

下面使用Keras框架构建简单的Bi-LSTM模型

from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import TimeDistributed
from keras.layers import Bidirectional

model = Sequential()
model.add(Bidirectional(LSTM(20, return_sequences=True), input_shape=(n_timesteps, 1)))
model.add(TimeDistributed(Dense(1, activation='sigmoid')))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])

你可能感兴趣的:(项目实训)