这篇是RNN类结构和其用于文本分类的学习总结;
一、单向RNN结构:,权重矩阵U、V、W共享。
二、双向RNN结构:,
,仿照单向的写法也就是。
从公式里也可以看出来,正向计算和反向计算不共享权值。
三、长短时记忆网络LSTM结构:
RNN神经元中只有这一计算,隐藏层的状态对短期的输入非常敏感,存在梯度消失和梯度爆炸的问题。有科学家提出LSTM解决了这个问题,原始的RNN神经元中只有一个隐藏状态,这个状态对短期输入比较敏感,于是LSTM增加了一个单元状态来记忆长期的信息,如下。所以LSTM的输出有两个,当前时刻LSTM输出值ht和当前时刻的单元状态ct,都是向量。
现在的关键就是怎么控制长期记忆状态c和结合c、h这两个状态了,为此LSTM中设置了输入门、输出门和输出门。
遗忘门,决定上一时刻的单元状态ct-1有多少保留到当前时刻ct。
输入门,决定了当前时刻网络的输入xt有多少保存到单元状态ct。
输出门,决定了此时的单元状态ct有多少输出到LSTM的当前输出值ht。
可以看出三个门的计算方式一致,表示把两个向量连接成一个更长的向量,是sigmoid函数。
将当前的输入和上一个的输出结合作为输入的信息:
计算当前时刻的单元状态ct:
LSTM最终的输出,是由输出门和当前单元状态共同确定的:
四、LSTM的一种成功变体GRU:
LSTM有很多变体,GRU是其中很成功的一个。
GRU对LSTM做了两大改动:
1、将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)zt和重置门(Reset Gate)rt。
2、将单元状态与输出合并为一个状态:h。
五、RNN文本分类:
用于文本分类的单向RNN结构:
其实这种结构很灵活,如下是引入双向LSTM进行分类;一般流程是1. embeddding layer, 2.Bi-LSTM layer, 3.concat output, 4.FC layer, 5.softmax
下面是Tensorflow双向LSTM代码,可以使用最后一个神经元的输出作为文本表示,也可以使用每个神经元的输出平均后作为文本表示。