RNN既能够表述为循环神 经网络(recurrent neural network),也能够表述为递归神经网络(recursive neural network),前者通常用于处理以时间序列为输入的问题(好比把一个句子当作词组成的序列),每次向循环神经网络输入一个词,知道整个句子输入结束。后者通常用于处理图结构或树结构问题(好比为了处理歧义问题,咱们构造语法树为输入,而不是循环输入每个词)。网络
下图是循环神经网络的展开函数
图1工具
下面是一个句子对上图的应用3d
图2blog
能够这样理解:将全部用到的英文词向量化以后,the表示为(0.4,0.3),对应图1中的x输入,通过神经元计算以后输出为(1,3.5),神经元内部的计算方式为:递归
函数f一般是诸如tanh或者ReLU的非线性函数,U,x,St-1都为向量且U、V、W都是待训练参数。输出O能够选择softmax函数,其表达式以下变量
这里的变量i对应图1中的变量t,可见神经网络
也就是说循环神经网络全部输出之和为1,输出O的计算公式为network
其中V和St都是向量。也就是说神经元先计算隐状态St,而后计算输出Ot循环
下面以树结构为例来讲明递归神经网络的输入与计算
1.将句子分词以后,给每一个词一个向量,这里词的向量化能够采用one-hot或者其余一些向量化工具,好比Google的gensim
2.将词按照树形结构输入,以图3为例
图3
2.1 首先计算“两个”和“外语学院”的父节点的向量,计算方法是:假设“两个”的词向量表示为c1,“外语学院”的词向量表示为c2,那么父节点对应的向量P为
其中W和b是训练好的参数,tanh是双曲正切函数,表达式为
2.2 依次迭代计算各个父节点对应的向量,最终获得根节点对应向量。
由于是以语法树输入的,因此对于歧义问题有较好的处理能力,好比图3中的句子也能够用图4的语法树来表示:
图4
事实上,图3与图4对应的根节点向量彻底不一样,由于词向量的输入顺序是不同的。
在获得根节点向量后,咱们就能够去完成一些更高级的任务,好比计算语义类似度或者情感分析等。