TextRNN

这篇是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代码,可以使用最后一个神经元的输出作为文本表示,也可以使用每个神经元的输出平均后作为文本表示。

猜你喜欢

转载自blog.csdn.net/Torero_lch/article/details/82588732
今日推荐