RNN(Recurrent Neural Network),又称循环神经网络。RNN是一类用于处理序列数据的神经网络,所谓的序列数据就是指这一些列的数据其前后的输入数据是有关联的,序列前面的数据特征有可能影响到序列后面的数据。如文字数据“我喜欢吃苹果”,在“我喜欢”的后面最有可能加的是名词或者动词,这就是所谓的序列数据中序列数据之间的影响作用。根据序列数据的特征,产生了RNN神经网络,RNN能处理序列的输入,发现前后输入的关系,对比起其它神经网络如CNN只能接受独立的输入,这是RNN与CNN等网络的本质区别,RNN具有记忆特性,CNN不具有。RNN的这一特性是根据其网络结构来实现的。
一、RNN的网络结构
1、RNN的网络结构有两个特点:
1)RNN是权值共享的,即同一层中神经网络之间的连接的权值是一样的,不同层之间的连接权值也是相同的。
2)每一个输入值都只会与它本身的那条路线建立权连接,不会和别打的神经元连接。
2、RNN的网络结构图
以下是RNN的未展开结构图:
可以看到RNN的结构与传统神经网络结构大致相似,都是由输入层、隐藏层、输出层组成,区别在于隐藏层里的神经元还有一个权值W连接,这是实现RNN记忆特性的根本来源。
以下是RNN网络的展开结构:
从图中可以看到,在RNN的隐藏层之间,随着输入序列(xt,xt+1,xt+2)的输入,隐藏层的前一神经元的输出也作为当前神经元的输入,这样每一隐藏层神经元就有两个输入S和X,这是实现RNN记忆特性的基本原理。如图在输入一个句子“我爱吃苹果”的时候,这种网络结构就可以发现(我)(爱吃)(苹果)三个词组之间的关系,这也使得RNN网络常用于NLP问题的的研究。
此外,通过RNN的网络结构还可以大致得出RNN的输入表示:
对于输出层:Ot=g(V*St)
对于隐藏层神经元的输入:St=f(U*Xt+1+W*St)
以上公式总结了RNN输出层以及隐藏层神经元之间的输入输出关系。
二、双向RNN
上述所说的都是单向RNN,即假设当前时间步是从前面的焦躁时间的序列决定的。双向RNN是RNN网络的变种,其产生需求是对于一些序列数据,其不仅仅是前面的数据对后面的数据有影响,序列后面的数据也对序列前面的数据有影响。基于这种研究需求,自然地产生了双向RNN。双向RNN是通过增加从后往前传递信息的隐藏层来更灵活地处理信息。双向RNN有梁隐藏状态,一个正序一个逆序,双向RNN的网络结构看起来就像两个RNN网络重叠在一起的样子,如下图是双向RNN的网络结构:
双向RNN中,隐藏层有两个并列神经元,一个用于联系正向的序列输入,一个 用于联系逆向的序列输入,因此隐藏层的输入表达式也有正向和逆向两个表达式。输出层的结果也又两个双向的神经元连接决定。以上便是双向RNN的内容。
三、RNN的训练及优化
1、BPTT算法
BPTT算法是常用的训练RNN的算法,其本质还是BP算法。
BP算法(非线性连续变换函数的多层感知网络误差反向传播法):算法的核心是将学习过程分为信号的正向传播与误差的反向传播两个过程。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层的误差信号,此信号即作为修正各单元的权值的依据。BP算法的本质还是求各参数的梯度,这与BPTT算法也是一样的。
2、使用dropout优化过拟合
一般的优化方法是使用正则化或使用dropout。在RNN中,dropout的使用一般只对同一条序列位置的内部参数即U和V使用dropout,而不对不同序列位置的参数即W使用dropout,因为这会在序列之间传递信息时丢失信息,而在同一序列中只会引起降为,减轻计算难度。
四、RNN在自然语言处理中的运用
1、词嵌入的概念
词嵌入的概念是将文字内容转化为一个数值的向量表示,因为计算机只能理解或计算数值内容。如定义一个句子“猫爱玩毛线球”;“狗爱玩飞盘”可以生成两个句子的对应的词向量分别为(1,2,1)(3,2,3)两个向量在空间上的夹角大小代表了这两个句子的相似度,这个相似度可以通过余弦相似度计算得到。词嵌入是NLP的重要工作。
2、生成词嵌入的方法
1)一种是基于计数的,即在大型语料库中计算一个词语和另一个词语同时出现的概率,将经常出现的词映射到向量空间相近的位置。
2)二种是基于预测的,即从一个词或两个词出发,预测他们可能的相邻词,在预测过程中自然而然学习到了词嵌入的映射。而基于此又有两种生成词嵌入的方法:CBOW(连续词袋模型)、Skip-GRAM法。
3、LSTM的使用
LSTM是RNN的一种,在NLP任务中,LSTM常用语做词性判断。根据RNN模型的记忆特性,能够通过这个单词前面的词语对其做词性判断。LSTM的输入是一个词序列,每一个词序列中的每个词都是生成的词向量表示,可以得到与序列等产的输出,每个输出作为表示对词性的判断。对词性的判断是语义理解问题的重要内容。
五、RNN的一些其他应用
one to many :音乐生成
many to one :句子分类问题
many to many :命名实体识别
many to many : 机器翻译