深度学习:循环网络 RNN
Recurrent Neural Network (RNN)
循环网络区别于之前提到的前馈网络在于,它能够将每一层的输出带到后面的神经层,使用state向量来保存和传递处理过的信息,用递归函数表示如下。
用图来表示,
举个例子,
训练的大题步骤与其他神经网络类似,这里不展开了。
存在问题
RNN虽然可以捕获长文本信息,但是实际上较早出现的信息会发生逐渐淡化的问题,也就是Vanishing Grandients,在backpropagation过程中梯度可能会丢失!怎么办?有人就提出了LSTM模型,全名Long short term memory,使用“记忆单元”来保存梯度,再通过“门”(向量,每个元素都是概率)来决定哪些需要被记住哪些需要被忘记。我们通过一张图来对比一下RNN和LSTM的结构,
LSTM
这里我们用公式表达一下LSTM的结构,
这里的f表示遗忘门,i表示输入,o表示输出,c表示记忆单元,h表示结果输出,可以发现他其实是在做三件事,一个是忘记一部分输入信息,一个是抽取新输入的信息然后更新记忆单元,最后一个是结果记忆单元和输入信息做输出。
这个记忆单元也有许多变形,如Peephole connections,Gated recurrent unit (GRU)。同时对LSTM本身也有许多变形,如Multilayer-LSTM,Bidirectional LSTM
关于lstm详解,参考 https://zhuanlan.zhihu.com/p/42717426
RNN应用
RNN模型在许多NLP任务都有很好的应用,如生成文本,文本分类,序列标注……
优点:
‣ Has the ability to capture long range contexts
‣ Excellent generalisation
‣ Just like feedforward networks: flexible, so it can be used for all sorts of tasks
‣ Common component in a number of NLP tasks
缺点:
‣ Slower than feedforward networks due to sequential processing
‣ In practice still doesn’t capture long range dependency very well (evident when generating long text)