当数据是有顺序的时候,我们就可以使用RNN了,比如说话的顺序 有序列化的数据等的
  在介绍RNN之前,我有篇博客是介绍了CNN,简单提一下,在一张大的图片是上,我们有一个fliter滤波器,通过共用参数来扫描这张图片,提取出一张精髓的图片,再在这这张图片上使用同样个滤波器,再进行一次扫描,总结出一张更为精髓的图片。这个就叫做CNN,详细介绍点这里,RNN也是同样的事情,只是在不同时间顺序上面了,而非空间了。
想象有一个事件组成的序列,如下图。
深度学习 - 循环神经网络RNN
我们希望在每个时间点上根据目前序列中的事件做出预测。如果序列是较为静止不变的,我们就可以在每个时间点用同样的分类器,这样就极大的简化要做的事。然而这是个序列 我们希望能将序列中已经发生的事件考虑在内。一个自然的做法就是递归地使用先前分类器的状态,作为之前所发生事件的总结
深度学习 - 循环神经网络RNN
为此,我们需要一个很深的神经网络来记住久远的过,如果这个序列有数百/千步的事件。这基本上意味着所需的深度网络要有数百/千层。但取而代之,我们就会再次使用捆绑(tying)法。用单个模型负责总结过去的信息,并将它提供给分类器。最终我们的网络就会有一个简单重复的模式。在每个时间按步中 分类器的一部分连接到输入层。另一部分叫做递归连接层,连接到过去的事件
深度学习 - 循环神经网络RNN
这张图就是RNN的大概图了
要预测下个就要回顾之前预测的记忆加上现在的新的记忆,在输出一个另外的Output了。

RNN的基本结构

看下图
深度学习 - 循环神经网络RNN
左边是右边的展开。
可以看到右边的图就是整个按照时间点的顺序,t-1>>t>>t+1这样的时间顺序来的。在每次输入以后,都会记录一下时间点上的state,所以在每个时间点的输出都会考虑到上一个时间的的S和现在的输入x在输出O了。
左边的图片就是RNN基本结构简化的图了

LSTM RNN

RNN 是在有顺序的数据上进行学习的. 为了记住这些数据, RNN 会像人一样产生对先前发生事件的记忆. 不过一般形式的 RNN 就像一个老爷爷, 有时候比较健忘。LSTM 就是为了解决这个问题而诞生的. LSTM 和普通 RNN 相比, 多出了三个控制器. (输入控制, 输出控制, 忘记控制). 现在, LSTM RNN 内部的情况是这样.LSTM 目前非常流行的一种RNN结构。
深度学习 - 循环神经网络RNN
在LSTMs中,i结构被称为cells,可以把cells看作是黑盒用以保存当前输入xt之前的保存的状态ht−1,这些cells更加一定的条件决定哪些cell抑制哪些cell兴奋。它们结合前面的状态、当前的记忆与当前的输入。已经证明,该网络结构在对长序列依赖问题中非常有效。对于LSTMs的学习,参见这里.简单的讲:
深度学习 - 循环神经网络RNN
他多了一个 控制全局的记忆, 我们用粗线代替. 为了方便理解, 我们把粗线想象成电影或游戏当中的 主线剧情. 而原本的 RNN 体系就是 分线剧情. 三个控制器都是在原始的 RNN 体系上, 我们先看 输入方面 , 如果此时的分线剧情对于剧终结果十分重要, 输入控制就会将这个分线剧情按重要程度 写入主线剧情 进行分析. 再看 忘记方面, 如果此时的分线剧情更改了我们对之前剧情的想法, 那么忘记控制就会将之前的某些主线剧情忘记, 按比例替换成现在的新剧情. 所以 主线剧情的更新就取决于输入 和忘记 控制. 最后的输出方面, 输出控制会基于目前的主线剧情和分线剧情判断要输出的到底是什么.基于这些控制机制, LSTM 就像延缓记忆衰退的良药, 可以带来更好的结果.