一、循环神经网络(Recurrent Neural Networks)
为了使神经网络具有从先前信息中获取知识的能力,提出了循环神经网络。
上图表示循环神经网络可以表示成为序列的形式,启发我们可以将RNN应用到序列化数据中。
二、LSTM网络
1、问题提出
有时候我们需要利用近期的信息来执行来处理当前的任务。例如,考虑用一个语言模型通过利用以前的文字信息来预测下一个文字。如果我们需要预测“the clouds are in the sky”这句话的最后一个字,我们不需要其他的信息,通过前面的语境就能知道最后一个字应该是sky。在这种情况下,相关信息与需要该信息的位置距离较近,RNNs能够学习利用以前的信息来对当前任务进行相应的操作。如下图所示通过输入的\(x1,x2\)来预测\(h3\)。
假设现在有个更为复杂的任务,考虑到下面这句话“I grew up in France… I speak fluent French.”,现在需要语言模型通过现有以前的文字信息预测该句话的最后一个字。通过以前文字语境可以预测出最后一个字是某种语言,但是要猜测出French,要根据之前的France语境。这样的任务,不同之前,因为这次的有用信息与需要进行处理信息的地方之间的距离较远,这样容易导致RNNs不能学习到有用的信息,最终推导的任务可能失败。如下图所示。
我们可以通过LSTM这种特殊的RNN来解决“长依赖的问题”。
2、LSTM网络
区别于RNN中的重复块链使用tanh函数,LSTM网络中使用了四层网络层作为重复块。
3、LSTM核心思想
为了保证信息不变的通过RNN,LSTMs的核心是细胞状态,用贯穿细胞的水平线表示。只有在需要的时候进行分支。
LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。
门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。
LSTM中有三个门进行细胞状态控制。
第一步就是要决定细胞要丢弃哪些信息。这部分操作是通过一个称为忘记门的sigmoid单元来处理的。它通过查看\(h_t-1, x_t\) 来输出一个0-1之间的变量。该向量里面的0-1值表示细胞状态\(C_t-1\)中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。
输入门来决定细胞更新哪些信息。首先通过\(h_{t-1}\)和\(x_t\)通过一个输入门来决定更新哪些信息,然后利用\(h_{t-1}\)和\(x_t\)通过一个tanh层得到新的候选信息\(C_t\),这些信息可能会更新到细胞信息中。
下面将更新旧的细胞信息\(C_{t-1}\),变为新的细胞信息\(C_t\)。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息的一部分得到新的细胞信息\(C_t\)。更新操作如下图所示.
更新完细胞后,需要根据\(h_{t-1}\)和\(x_t\)来的判断输出细胞的哪些特征。需要将输入通过一个输出门sigmoid层得到判断条件,然后将细胞经过一个tanh层得到一个-1 - 1 之间值的向量。该向量与输出门得到的判断条件相乘就得到最终该RNN单元的输出。