【人工智能学习】【十一】循环神经网络进阶【人工智能学习】【十一】循环神经网络进阶
RNN的问题的问题
RNN(Recurrent Neural Network,循环神经网络)主要应用在自然语言处理、机器翻译、情感分析、时序序列问题。这些的
功能的共同特点是具有时序性。卷积神经网络是没有记忆性的(我对这句话的理解是神经元之间没有信息传递,各个WWW矩
阵是独立计算的,当然不是说整个网络没有记忆,只是记忆是独立的),RNN通过神经元之间的信息传递保留了记忆(就是
一个state变量,加变量是为了增加模型的非线性表达能力加变量是为了增加模型的非线性表达能力),但在长序列,即长时间步的问题上,梯度消失会让网络变得不梯度消失会让网络变得不
可训练可训练。
Ht=f(XtWxh+Hh−1Whh+bh)H_t=f(X_tW_{xh}+H_{h-1}W_{hh}+b_h)Ht=f(XtWxh+Hh−1Whh+bh)
在【人工智能学习】【六】循环神经网络中介绍了RNN的结构,RNN需要按照时间序列进行展开可能导致梯度消失和梯度爆
炸的问题【人工智能学习】【八】梯度消失与梯度爆炸,梯度爆炸我们可以dropout,做正则化来解决。
长短期记忆网络(LSTM,Long Short-Term Memory)(1997年)和后来出现的GRU模型(2014年),都解决了梯度消失和
语义前后顺序的问题。这两者差不多,但是为啥又出现了了GRU,论文里说是它比LSTM好算。
LSTM
长短期记忆网络(LSTM,Long Short-Term Memory),RNN的变种。
上图对比RNN,似乎结构上差不多,但是里面多了很多东西。但是模型虽然复杂了,不要忘了诞生于1997年的LSTM是解决
了RNN的问题:梯度消失和长序列记忆(说白了就是和前面离得太远了,梯度传过来已经接近于0了)。所以这些结构看上去
应该是和梯度消失问题有关。
RNN的神经元节点上有两个输入:1、ttt时刻的输入XtX_tXt;2、t−1t-1t−1时刻的隐含层节点传过来的状态Ht−1H_{t-1}Ht−1。
状态状态C的引出的引出
现在得出一个很直观的结论:既然当前节点无法记忆到很长时间序列之前的信息,那么我再开辟一条通道,用来传递之前的信既然当前节点无法记忆到很长时间序列之前的信息,那么我再开辟一条通道,用来传递之前的信
息息。即在RNN上加上一条传送带(adding a carry track),这条传送带上有之前神经元节点的记忆信息Ct−1C_{t-1}Ct−1(C
是carry track里的C),这里的Ct−1C_{t-1}Ct−1尽管也是一个状态,好像和之前神经元节点的Ht−1H_{t-1}Ht−1(state)没什
么区别。但是RNN中的Ht−1H_{t-1}Ht−1是每次都会进行下面的计算来更新,并传递到下一个神经元节点。
Ht=f(XtWxh+Hh−1Whh+bh)H_t=f(X_tW_{xh}+H_{h-1}W_{hh}+b_h)Ht=f(XtWxh+Hh−1Whh+bh)
这里的这个Ct−1C_{t-1}Ct−1就不是这么计算的了,极端情况试想一下,Ct−1C_{t-1}Ct−1永远只参与Ht−1H_{t-1}Ht−1的计
算,但是自己永远不被计算,初始的C0C_{0}C0值会沿着这条carry track,从第一个节点传到最后一个节点,途中值是复制一
份自己来计算Ht−1H_{t-1}Ht−1的值。