首先简单介绍一下循环神经网络(RNN)。
RNN可以处理序列数据,在自然语言处理,语音识别,情感分析,及其翻译等领域有重要应用。
顾名思义,循环神经网络在数据处理过程中构成一个循环体。此处的循环体不是指真正的循环,而是如下图所示的反馈。
t时刻所得到的ht时有上一时刻饮食编码ht-1和当前输入xt共同参与生成的。
然而,当时间序列足够长的时候,前面的信息随着时间会梯度下降,在较为靠后的位置,可能影响很小,这个时候就不会继续学习。
LSTM,也叫长短时记忆网络,在RNN的基础上引入了内部记忆单元(也有的叫“细胞”)和们的结构来处理前序时刻所生成的信息。
门中包含sigmoid激活函数。其作用与tanh类似,只是把值压缩到0-1之间
一般的LSTM存在输入门、遗忘门和输出们三种门。
遗忘门
遗忘门决定应该丢失或保留哪些信息。将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。
输入门
输入门用于更新内部记忆单元状态。同样是将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去,0表示不重要,1表示重要。还需要将其输入到tanh中,再将输出值与sigmoid的输出值相乘。这样就可以得到需要保留的信息,滤掉不需要保留的信息。
细胞状态
下一步,就是计算细胞状态。首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。
输出门
输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。
最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。
如图