深度学习:循环网络 RNN

Recurrent Neural Network (RNN)

循环网络区别于之前提到的前馈网络在于,它能够将每一层的输出带到后面的神经层,使用state向量来保存和传递处理过的信息,用递归函数表示如下。

\[s_i = f(s_{i-1},x_i),这里的s_i表示新的状态,s_{i-1}表示前一个状态,x_i则是输入 \]

用图来表示,
p1
p2

举个例子,

\[s_i = tanh(W_ss_{i-1} + W_xx_i + b),这里的两个W矩阵是不一样的,表示state和input不共享参数 \]

\[y_i = softmax(W_ys_i) \]

p3

训练的大题步骤与其他神经网络类似,这里不展开了。

存在问题

RNN虽然可以捕获长文本信息,但是实际上较早出现的信息会发生逐渐淡化的问题,也就是Vanishing Grandients,在backpropagation过程中梯度可能会丢失!怎么办?有人就提出了LSTM模型,全名Long short term memory,使用“记忆单元”来保存梯度,再通过“门”(向量,每个元素都是概率)来决定哪些需要被记住哪些需要被忘记。我们通过一张图来对比一下RNN和LSTM的结构,
p4

LSTM

这里我们用公式表达一下LSTM的结构,

p5

这里的f表示遗忘门,i表示输入,o表示输出,c表示记忆单元,h表示结果输出,可以发现他其实是在做三件事,一个是忘记一部分输入信息,一个是抽取新输入的信息然后更新记忆单元,最后一个是结果记忆单元和输入信息做输出。

这个记忆单元也有许多变形,如Peephole connections,Gated recurrent unit (GRU)。同时对LSTM本身也有许多变形,如Multilayer-LSTM,Bidirectional LSTM

p6

p7

关于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)

posted @ 2020-06-20 21:42  MrDoghead  阅读(298)  评论(0编辑  收藏  举报