递归神经网络(Recursive Neural Network, RNN)是时间递归神经网络和结构递归神经网络的总称。时间递归神经网络就是3.3节所介绍的循环神经网络,是具有特定结构——线性链接结构的递归神经网络。而结构递归神经网络利用与之相似但是更为复杂的网络结构——递归构造深度神经网络,如树形结构、图结构等非线性结构。具体来说,递归神经网络可以对任何层次结构进行操作,将子表示组合成父表示,而循环神经网络是它的一个特例,对时间的线性进程进行操作,把前一时间步长和隐藏表示组合成当前时间步长的表示。两者训练的算法不完全相同,但属于同一算法的变体。
递归神经网络的输入是多个子节点,而其所产生的输出则是由子节点经过多级运算后得到的根节点。在最简单的递归神经网络结构中,使用整个网络中共享的权重矩阵和诸如tanh之类的非线性激活函数将子节点组合成父节点。如果 c 1 和 c 2 是节点的 n 维向量表示,则它们的父节点也将是 n 维向量。图3.12为递归神经网络的一组父子节点示意图。
图3.12 递归神经网络父子节点结构图 [ 9 ]
若以tanh作为激活函数,以 b 为偏置项,权重矩阵记为 W ,计算公式为
然后,将产生的父节点与其余子节点再次作为输入,重复上述过程,直至达到所得到的树的根节点。其中 W 是用于学习的 n ×2 n 大小的权重矩阵。递归神经网络的前向计算与全连接神经网络的计算没什么区别,只是在输入的过程中需要根据输入的树结构依次输入每个子节点。该递归结构已被成功用于解析自然场景、文本句子的句法分析以及文本摘要生成的建模。
递归神经网络的训练算法与循环神经网络类似,两者不同之处在于,前者需要将误差从结构树的根节点反向传播到各个子节点,而后者将误差从当前时刻反向传播到初始时刻。图3.13是递归神经网络中层与层之间的误差传递示意图。
图3.13 递归神经网络中层与层之间的误差传递示意图
误差从父节点传递到子节点时,
。考虑父节点的加权输入,有
展开式(3.19),可得
对于子节点, w 会影响父节点所有的分量,因此推导时需要运用全导数公式。经过推导演算后,可以得到层与层之间误差传递的公式:
图3.14是递归神经网络误差逐层传递的示意图。它所示的是误差逐层传递的总过程,可以利用式(3.21),得到
图3.14 递归神经网络误差逐层传递的示意图
根据加权输入的计算公式net p = W c + b (左边表示第 l 层的父节点的加权输入, c 表示同一层的子节点),可以求得误差函数在第 l 层对权重的梯度为
进一步推理可知,在总过程中与循环神经网络一致,递归神经网络的权重梯度是各层权重梯度之和,并且偏置项 b 也符合这一结论。
使用梯度下降法计算训练的误差的反向传播,可得
对于参数优化的计算方法,可使用拟牛顿法和随机梯度下降法。
与循环神经网络相似,递归神经网络也需要大量的训练。然而,梯度消失的问题依然存在。为了解决这个问题,研究人员提出了一些改进算法,例如使用门控机制的Tree-LSTM、Child-Sum Tree-LSTM等,也在将语句划分成树时,加入人工操作,以提升便捷性和智能性。近年来,研究人员更是提出了一些自动化的方法,如使用自然语言处理技术从文本中自动生成语法树等。