LSTM是特殊的RNN,尤其适合顺序序列数据的处理,内部由遗忘门、输入门和输出门组成,循环神经网络(RNNs):通过不断将信息循环操作,保证信息持续存在,从而解决不能结合经验来理解当前问题的问题。RNN和LSTM都只能依据之前时刻的时序信息来预测下一时刻的输出
图中可看出A允许将信息不断的在内部循环,这可以使其保证每一步的计算都能保存以前的信息。
把RNNs自循环结构展开,可以看成是同一个网络复制多次并连成一条线,把自身信息传递给下一时刻的自己。
为了避免RNN出现的梯度消息情况,引出了LSTM的结构如下:
LSTM内部有四个网络层,这不同于标准RNN网络里只有一个网络层的单元。
Neural Network Layer:激活函数操作
Pointwise Operation:点操作
Vector Transfer:数据流向
Concatenate:表示向量的合并(concat)操作
Copy:向量的拷贝
LSTM核心是细胞状态,穿过图的顶部的长横线,长直线称之为细胞状态(Cell State),决定什么样的信息会被保留,什么样的信息会被遗忘,记为C(t)。
细胞状态像传送带一样,它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNN,细胞状态如下图所示:
LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。
门能够有选择性的决定让哪些信息通过。门的结构为一个sigmoid层和一个点乘操作的组合:
门的结构
sigmoid层输出0-1的向量,控制多少信息能流过sigmoid层,0表示不能通过,1表示可通过。
★ LSTM由遗忘门、输入门和输出门这三个门来控制细胞状态。
Step1:遗忘门:
决定细胞状态需要丢弃哪些信息,通过遗忘门的sigmoid单元处理,它通过查看h(t-1)和x(t)
信息来输出一个0-1之间的向量,向量中的0-1值决定细胞状态C(t-1)中哪些信息保留或丢弃,结构如下:
计算:
Step2:输入门:它的作用是处理哪部分应该被添加到细胞状态中
决定给细胞状态添加哪些新信息。①利用h(t-1)和x(t)通过输入门的操作决定更新哪些信息;②利用h(t-1)和x(t)通过一个tanh层得到新的候选细胞信息C~(t),这些信息可能会被更新到细胞信息中。
Step3:更新细胞状态(对传送带的更新)
将旧的细胞信息C(t-1)更新为新的细胞信息。更新规则为:通过遗忘门选择忘记旧细胞信息的一部分,然后通过输入门添加候选细胞信息C ~(t)的一部分得到新的细胞信息C(t).
Step4:
输出门(output gate)由 o(t) 控制,在这一时刻的输出 h(t)和 y(t) 就是由输出门控制的 h(t)的更新由两部分组成,第一部分是o(t), 它由上一序列的隐藏状态h(t−1)和本序列数据x(t),以及激活函数sigmoid得到,第二部分由隐藏状态C(t)和tanh激活函数组成。
更新完细胞状态后需要根据输入的h(t-1)和x(t)来判断输出细胞的哪些状态特征。①经过被称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个[ − 1 , 1 ] 间的向量,该向量与输入门得到的判断条件相乘即得到最终RNN单元的输出:
简要来说,LSTM 单元能够学习到识别重要输入(输入门作用),存储进长时状态,并保存必要的时间(遗忘门功能),并学会提取当前输出所需要的记忆。
它将忘记门和输入门合并成一个新的门,称为更新门。GRU还有一个门称为重置门。
其中重置门为上图中前面那个门,决定了如何将新的输入信息与前面的记忆相结合。更新门为上图中后面那个门,定义了前面记忆保存到当前时间步的量。由于该模型比标准LSTM模型更简单,因此被广泛应用。
参数数量:
LSTM:
RNN的提升改进:
(1)多层RNN
keras代码:
(2)双向RNN:
只保留两条链最后的状态,即h(t) 和 h(t'),其余状态被舍弃。
双向LSTM参数比单向的LSTM参数多一倍。
解决Embedding层带来的参数过多导致过拟合的问题——————-预训练解决