为了解决RNN的长时依赖的问题。RNN无法保存较长的时间的信息,因为梯度消失问题。
输入问题
先讲一点编程时候的输入问题,LSTM的输出其实就是相当于每次输入一个序列(一个序列样本)。写input的时候,直接写 inputs = Input(shape=(length_rows,length_cols)),如下所示,每一个时间步其实就是length_rows,每一个时间步中的绿点就是length_cols。【100个句子,每个句子20个词,每个词80维度的向量,那么形状就是(100,20,80)】
下面是一个两层的RNN,一个有四个时间步,图中省略了第一到第二层结果的一些传递。
等同这个简图
所以embedding的一个作用就是修改维度到合适的相同维度。Batch_size就是样本的数目,一次只输入一个样本。
x = LSTM(UNITS, return_sequences=True)(inputs)
UNITS代表把一个词的词向量转化为UNITS大小,LSTM输入的参数就是**(samples, timestep, input_dim),samples指的是批量训练样本的数量,timesteps是时间步,自己设定的(词的数目),input_dim是每个time_step输入的shape。**
LSTM细节
LSTM如何解决RNN长期依赖的问题,也就是可以实现对长期的信息的记忆的问题:
原因就是LSTM引入了门控单元的机制,也就是添加了C这条通路,使得可以较长长时间保存信息。
LSTM单元(unit)一般由一个细胞(cell),一个输入门 (inputgate),一个输出门(outputgate)和一个遗忘门 (forgetgate)组成. •细胞能够记住任意时间间隔上的值,三个门能够控制进出细胞的 信息流动。
引入了“门”机制对细胞状态信息进行添加或删除,实现长时记忆。
•“门”机制由一个Sigmoid激活函数层和一个向量点乘操作组成, •Sigmoid层的输出控制了信息传递的比例。
下面对门一一介绍:
1.遗忘门
LSTM通过遗忘门(forget gate)实现对细胞状态信息 遗忘程度的控制,输出当前状态的遗忘权重,取决于ht-1和𝑥t。
2.输入门
LSTM通过输入门(input gate)实现对细胞状态输入 接收程度的控制,输出当前输入信息的接受权重,取决于ht-1和 𝑥t
3.输出门
LSTM通过输出门(output gate)实现对细胞状态输出 认可程度的控制,输出当前输出信息的认可权重,取决于ht-1和 𝑥t。
状态的更新
取决于遗忘门和输入门
遗忘门输出的权重,作用于Ct-1,加上输入门,一起构成新的Ct
双向RNN
假设当前t的输出不仅仅和之前的序 列有关,并且还与之后的序列有关。
BidirectionalRNN由两个RNNs上下叠加在一起组成,输出由这两 个RNNs的隐藏层的状态决定。
Stack RNN
GRU
相比LSTM的三个门,GRU简化了,只有两个门,一个保持对短期信息的敏感,一个保持对长期信息的敏感。
GRU还是很强的,rt是重置门,zt是更新门,重置门决定先前的隐藏状态单元是否被忽略,更新门控制当前隐藏状态单元是否需要被新的隐藏状态单元更新。** **