1.RNN解决了什么问题?
RNN主要用来解决序列问题,强调的是先后顺序,在NLP中引申出上下文的概念,一个翻译问题,这个词的含义可能和前后的单词形成的这个组合有联系(Skip-gram),也可能是它之前的所有单词都有联系(Attention),并且,借助RNN的state这样的记忆单元,使得一个序列位置的输出在数学上和之前的所有序列的输入都是有关系的。当然原始的RNN由于梯度的乘性问题,前面的序列的影响近乎为0,这个后面又用LSTM来修正为加性问题。RNN的数学基础可以认为是马尔科夫链,认为后续的值是有前者和一些参数的概率决定的。
2.RNN有什么优缺点?
- 优点:可以拟合序列数据,(LSTM)通过遗忘门和输出门忘记部分信息来解决梯度消失的问题。
- 缺点:
- 1.LSTM虽然部分解决了rnn梯度消失问题,但是信息在过远的距离传播中损失很厉害
- 2.无法很好的并行(工业上影响很大)
3.RNN,LSTM,GRU的结构详解
(1)普通的网络结构
(1)常见的RNN网络结构
刚接触时看到这种结构时会有些难理解,左边 是RNN网络,右边是RNN网络按时序展开的形式,为什么要按照时序展开?主要是RNN中 隐状态更新需要依赖上一次的隐状态信息,就是我们理解的记忆信息。
RNN的结构很容易理解,t时刻的hidden status和当前输入
输出之后经过一个
(1)RNN(N vs N)网络结构
(1)RNN(N vs 1)网络结构
(1)RNN(1 vs N)网络结构
(1)RNN(N vs M)网络结构
seq2seq模型,另外会有新文章介绍。
4.长时依赖问题(Long-Term Dependencies)
普通的RNN在长文本的情况下,会学不到之前的信息,例如:the clouds are in the sky 预测sky是可以预测准确的,但是如果是很长的文本,如:我出生在中国,......,我讲的是中文这个时候就存在长时依赖问题,LSTM可以通过输入们,遗忘门,输出们来解决这个问题。
5.LSTM结构
刚开始接触LSTM时有点懵,这个结构怎么这么复杂,但其实先理解LSTM做了什么来解决长时依赖问题,就很容易 记住这个结构了。
LSTM通过忘记们来决定从上个隐状态记忆中忘记哪些信息,通过输入们来决定输入哪部分信息,通过输出们来决定输出哪部分信息,这样来解决长时依赖问题,下面来介绍下LSTM的具体结构信息。
-
细胞状态和隐状态
LSTM相比RNN hidden status还引入了细胞状态来记录信息。细胞状态通过门结构 gate来添加新的记忆和删除旧的记忆信息
-
门结构
门结构可以添加和删除信息的原理:输入矩阵通过
通过以上矩阵点乘的例子可以来这么理解,1和0相乘之后结果为0,信息完全被过滤(任何数乘0结果都为0),任何数和1相乘结果还是原来的值,相当于没有被过滤,乘0~1之间的值,就会按照一定比例来过滤信息。
-
忘记门
这一步是通过忘记门来忘记部分cell state中的记忆信息
-
输入门
这一步进行了两个操作,一个是经过输入们产生了一个过滤矩阵来决定那些信息来加入到新的cell state中,另一步是通过上一次的
-
添加新信息
将需添加的新信息加入到经过忘记门后的cell state中,生成新的cell state
-
输出门
将新的cell state信息经过tanh激活函数后再和输出门产生的过滤矩阵点乘,最后得到此刻的输出
4.GRU结构
GRU的结构如下,主要包含重置门和更新门,把GRU看着LSTM的变体,相当于取消了LSTM中的cell state,只使用了hidden state,并且使用update gate更新门来替换LSTM中的输入们和遗忘门,取消了LSTM中的输出门,新增了reset gate重置门。这样做的好处是在达到LSTM相近的效果下,GRU参数更少,训练的计算开销更小,训练速度更快。
4.怎么选择LSTM,GRU?
由于GRU参数更少,收敛快,通常在数据集够大的情况下,选择LSTM效果应该会更好。
通常情况下LSTM和GRU两者效果相差不大,GRU训练更快,所以一般会先选择使用GRU进行训练和调参,当无法再继续优化时可以把GRU替换成LSTM来看看是否有提高。
至此,RNN和LSTM的结构介绍完毕,本文大量参考了几位大神的文章和配图,仅作为自己学习总结使用,非喜勿喷。如有错误,恳请指正,谢谢您的阅读。
参考文章:
完全图解RNN、RNN变体、Seq2Seq、Attention机制
Understanding LSTM Networks
序列预测问题,CNN、RNN各有什么优势?