传统CNN有一个主要特点,就是没有记忆,他们单独处理每个输入,在输入和输入之间没有保存任何状态,对于这样的网络,有些事是无法较好实现的。
比如像阅读一篇文章或者一个句子,需要不断地对输入信息进行整合理解,才能更好的解决问题,这时候就需要用到RNN(循环神经网络)。RNN简单理解就是一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的结点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
RNN理论上来说,应该能记住许多步之前见过的信息,但实际上,由于距离过远,当梯度小于零时,较为久远的位置容易出现梯度消失,当梯度大于零时,较为久远的位置容易出现梯度爆炸,所以就有了LSTM。可以简单理解为,主线部分,用于存储长期记忆的,分线部分,用于存储短期记忆的,方便序列中的信息可以在任意位置跳上传送带,被传送到更晚的实践步。
下边一个例子基于前一篇的CNN,实现同样的功能,只不过我在打印准确率的时候一直出错,所以把那一部分代码给去掉了。稍微整理了下但还是不是理解的很透彻。