RNN(Recurrent Neural Network)循环神经网络是用于处理序列问题的神经网络,比如时间序列或者文字序列,这类数据有一个特点是后面的数据与前面的数据只有关系的,比如说有一句话:我喜欢吃苹果,但是我___橘子,如果要在横线上填入一个词语的话,很显然,应该填入的是不喜欢、讨厌之类的词语,RNN就是需要网络对这类数据有一个预测的能力。
RNN循环神经网络的应用是很广的,比如:语音识别,语言建模,文字翻译,图片描述等,网络有三个主要的特点:
1、权值共享,整个网络只有w、u、v三个参数,正是这点体现了RNN网络“循环反馈”的思想;
2、每一个输入值只会与它本身的那条线建立连接;
3、网络具有记忆功能。
一个基础的RNN网络由输入层、隐藏层、输出层组成,如下图:

用公式表示:

其中,RNN中使用的激活函数是tanh,结合神经网络更新时的链式法则,从公式可以看出,多项连乘导致梯度极易发生消失的问题,当序列很长时此问题尤为严重,因此LSTM网络应运而生。
LSTM(Long Short Term Memory network)长短期记忆网络,可以解决网络的长期依赖问题,可以准确预测相关信息间隔大的结果,比如在文章的前一段中提到:我出生在法国,然后在下一段需要预测:我会说一口流利的__,这种场景下,对于RNN网络来说,就稍显力不从心了。
为什么LSTM网络具有长短期记忆功能呢?LSTM的基本思路是引入了门控装置,来处理记忆单元的遗忘、输入、输出的问题。通过一定的学习,可以学到何时对各个门开启到何种程度,因为门控也是由有一定可以学习的参数的神经网络来实现的,这样就可以让机器知道何时应该记住某个信息,而何时应该抛弃某个信息。
LSTM的核心是细胞状态,用贯穿的水平线表示,它贯穿整个细胞并且只有很少的分支,能保证信息不变的流过整个网络。网络中的细胞就好比一个仓库,它存储了以前的所有重要信息,通过门的操作,实现对仓库里信息的存入和取出。
以下是LSTM网络的结构简图,其中涉及两个激活函数sigmoid和tanh,sigmoid充当的就是阀门的作用,控制信息流入的多少,1表示全部通过,0表示都不通过,tanh用于创建一个新的候选向量。

从左至右第一个sigmoid是忘记门,它决定前面信息哪些该舍弃哪些该保留,比如,一篇文章中对于主角都是用的他来代替,当Xt时刻输入的信息中交代了他的名字是“张三”,那么对于这个时刻,遗忘的信息就是“他”;第二个sigmoid是输入门,它决定了给细胞状态添加哪些新信息(其实从这里可以知道,遗忘门丢弃掉的东西,正是更新门添加的东西,因此这两个门是可以合并成一个门的,这是LSTM的变种GRU的结构),在遗忘门和输入门之间有一个细胞状态的更新,用的是加法“+”操作,将前面遗忘后的信息和当前时刻的处理后的输入进行整合;第三个sigmoid是决定输出的信息,和遗忘门的处理过程相同。
下面对整个过程的公式进行一个推导:
遗忘门:
输入门:
细胞状态更新:![]()
输出门:
从以上公式可以LSTM网络之所以可以解决长期依赖问题,是因为存在+操作,类似于CNN中的残差,将前面的信息加到后面的信息中,可以防止梯度消失问题,RNN只有一个激活函数tanh并且没有+操作,那么在反向传播的时候梯度就都是小于1的连乘,梯度消失在所难免,在LSTM网络中,反向传播分为很多条路径,从以上公式不难看出,除了细胞状态更新外,其余部分都是连乘操作,还是容易导致梯度消失问题,但是由于细胞状态更新的存在,这里的梯度是相对稳定的,不易梯度消失,因此整个网络梯度消失的可能性就很小,但是LSTM网络任然无法缓解梯度爆炸的问题。
最后总结一下RNN和LSTM的区别:
1、RNN没有细胞状态,LSTM通过细胞状态记忆信息。
2、RNN激活函数只有tanh,LSTM通过输入门、遗忘门、输出门引入sigmoid函数并结合tanh函数,添加求和操作,减少梯度消失的可能性。
3、RNN只能够处理短期依赖问题,LSTM既能够处理短期依赖问题,又能够处理长期依赖问题