目录
1前言
1.1 RNN回忆和概述
1.2 LSTM回忆和概述
1.3循环神经网络的几种输入输出结构
2图解LSTM内部结构和数据流
2.1结构图简洁
2.2 LSTM原理分析图
3图解BiLSTM及其应用
3.1看楼的LSTM是如何工作的
3.2看楼STM是如何工作的
3.3看楼STM是如何工作的
前言本文旨在全面分析RNN、LSTM、BiLSTM的内部结构和输入输出,以解决LSTM和BiLSTM的任何问题。
循环神经网络(RNN )长短期记忆网络BiLSTM )双向长短期记忆网络重要的先验知识
可以理解为,本质上单个rnn小区是以多个时间步展开的形式,RNN是神经网络在时序上的权重共享(CNN相当于空间上的权重共享),LSTM也是如此。
1.1 RNN回忆和概述
RNN的不足:它的记忆是短期的。
原因:反向传播过程中,RNN存在梯度消失问题(由于RNN按时间顺序共享参数,梯度在反向传播过程中相继协同,数值时大时小)。 梯度是用于更新神经网络权重的值,梯度消失问题是梯度随时间的推移而传播时降低,梯度值非常小时不继续学习。 因此,在RNN中,梯度略有更新的网络层停止学习,它们通常是较早的层。 因为这些层不学习,所以RNN记不住长序列学习的内容。 因此,它的记忆是短期的。1.2 LSTM回想和概述LSTM内部结构相对于RNN有所改善。 BiLSTM中的Bi是Bi-directional (双向的)的缩写,与前方LSTM
LSTM优点:
LSTM是克服短期记忆问题提出的解决方案,可以引入称为“门”的内部机制,调节信息流。 这些门结构可以学习顺序
列中哪些数据是要保留的重要信息,哪些是要删除的。通过这样做,它可以沿着长链序列传递相关信息来执行预测。1.3 循环神经网络的几种输入输出结构从RNN或LSTM结构可以看出,它们的输入输出其实很灵活,不同应用场景可以选择不同输入输出方式,例如下:
单输入-多输出:(仅在第一个时间步输入)
单输入-多输出:(在多个时间步输入)
多输入-多输出:
多输入-单输出:
2 图解 LSTM 内部结构和数据流 2.1 简洁的结构图 2.2 LSTM的原理剖析图 3 图解BiLSTM及其应用 3.1 看2层的 LSTM 是如何运转的
3.2 看1层的 BiLSTM 是如何运转的
用一个文本情感分析的例子来说明:
如下图,单层的BiLSTM其实就是2个LSTM,一个正向去处理序列,一个反向去处理序列,处理完后,两个LSTM的输出会拼接起来。特别注意:在这个案例中,所有时间步计算完后,才算是下面这个BiLSTM的结果,如下图,正向LSTM经过6个时间步得到一个结果向量,反向LSTM同样经过6个时间步后,得到另一个结果,然后这两个结果向量拼接起来,作为BiLSTM的最终输出。 疑问:是不是NLP里面大多时候只需要最后一个时刻的输出即可?答案:这属于N VS 1结构,即N次输入,1次输出。这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。 3.3 看2层的 BiLSTM 是如何运转的用OCR识别算法CRNN来说明,以下是CRNN算法的数据处理流程图:
更详细的说,在CRNN算法中,输入BiLSTM的特征序列,它的维度是(26, 512),长下图这样:
因为CRNN算法中,图像输入是固定为32(高) x 100(宽)的长条图,经过特征提取器后,高会下采样32倍,宽度方向下采样4倍(由于补边操作,导致w最终=(100/4+1)=26),所以,相当于32 x 100的图像信息,被裁剪成26份,每一份的信息用512个值表示,如下:
重要解释归纳如下:
关于时间步:26个切片,也即26个序列,也就是26个时间步,即双层的BiLSTM(也就是4个LSTM,每层一个前向LSTM和一个反向LSTM)会自循环计算26次,从物理意义上说,相当于LSTM按顺序(从左往右同时从右往左)遍历计算了上图26个切片信息。关于输入列向量Xt:每个序列由512个元素的向量组成,每个时间步,BiLSTM就是去取这512个元素的向量值丢到LSTM单元中去计算。形象的说,就是3.1节中,input_size也即Xt,变为512维向量。关于输出的拼接:BiLSTM每个时间步其实是由2个相反方向的LSTM在计算结果,它们2个的结果会拼接起来,所以,BiLSTM的输出维度是2 x hidden_size关于全连接层:CRNN算法中,在上下两层BiLSTM中间,穿插了一个全连接层,来过度上下两层BiLSTM的输入输出关系。至于为什么要加全连接层,我目前也不是特别清楚,估计是把向量长度拉回原来长度。理论上,不加全连接层,两层BiLSTM也完全是可以轻松的衔接起来的。CRNN算法中,双层BiLSTM代码实现如下: