参考文章:从RNN到LSTM再到GRU
GNN
是一个输入的向量(假设是一个n维向量)
表示前一个时刻的隐藏状态,初始为0向量。
是当前时刻的输出。
是当前时刻的隐藏状态。
隐藏状态更新:
理解:这里我们假设x的维度是10000维,其中我们的第一层隐藏神经元个数为100个,进行降维处理,可以将神经网络的权重理解为矩阵之间的乘法。最后加上激活函数。
input:10000
output:100
我们这里将 ,
共同作为输入,input=10100维
RNN虽好,但是存在梯度消失和梯度爆炸的问题,导致一旦序列过长,在反向传播时RNN就会出问题。
其中梯度爆炸问题,有一个解决方法是梯度修剪(gradient clipping),就是设定一个阈值,当梯度向量超过某个阈值时,将它减少到阈值。而梯度消失问题更难解决。因此有人提出了GRU来解决这个问题。
LSTM
LSTM是RNN的变种,是为了解决RNN存在的长期依赖问题而专门设计出来的。所谓长期依赖问题是,后面的单词在很长的时间序列后还依赖前面的单词,但由于梯度消失问题,导致前面的单词无法影响到后面的单词。
GRU
GRU 旨在解决RNN 中出现的梯度消失问题。GRU也可以被视为LSTM的变体,启发于LSTM,但更易于实现和计算,且在某些情况能产生同样出色的结果。
GRU把遗忘门和输入门合并成为一个“更新门”,把单元状态和隐藏状态合并,还有其他变化。这样做使得 GRU比标准的LSTM模型更简单