一、递归神经网络rnn 递归神经网络英文_人工智能

递归神经网络rnn 递归神经网络英文_神经网络_02

  • Recurrent Neural Network(时间递归神经网络/循环神经网络)是Recursive Neural Network(递归神经网络)的一种特殊形式。

二、Recurrent Neural Network(循环神经网络)的缺陷

  • 因为神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入
  • 循环神经网络实现了前者,通过将长度不定的输入分割为等长度的小块,然后再依次的输入到网络中,从而实现了神经网络对变长输入的处理。
  • Recurrent Neural Network(循环神经网络)的典型的例子是,当我们处理一句话的时候,我们可以把一句话看作是词组成的序列,然后,每次向循环神经网络输入一个词,如此循环直至整句话输入完毕,循环神经网络将产生对应的输出。如此,我们就能处理任意长度的句子了。入下图所示:
  • 然而,有时候把句子看做是词的序列是不够的,比如下面这句话『两个外语学院的学生』:
  • 上图显示了这句话的两个不同的语法解析树。
  • 可以看出来这句话有歧义,不同的语法解析树则对应了不同的意思。
  • 一个意思是『两个外语学院的/学生』,也就是学生可能有许多,但他们来自于两所外语学校;
  • 另一个意思是『两个/外语学院的学生』,也就是只有两个学生,他们是外语学院的。
  • 为了能够让模型区分出两个不同的意思,模型必须能够按照树结构去处理信息,而不是序列,这就是Recursive Neural Network(递归神经网络)的作用。
  • 当面对按照树/图结构处理信息更有效的任务时,递归神经网络通常都会获得不错的结果。

三、Recursive Neural Network(递归神经网络)概述

  • 递归神经网络可以把一个树/图结构信息编码为一个向量,也就是把信息映射到一个语义向量空间中。
  • 这个语义向量空间满足某类性质,比如语义相似的向量距离更近。
  • 也就是说,如果两句话(尽管内容不同)它的意思是相似的,那么把它们分别编码后的两个向量的距离也相近;
  • 反之,如果两句话的意思截然不同,那么编码后向量的距离则很远。如下图所示:
  • 从上图我们可以看到,Recursive Neural Network(递归神经网络)将所有的词、句都映射到一个2维向量空间中。
  • 句子『the country of my birth』和句子『the place where I was born』的意思是非常接近的,所以表示它们的两个向量在向量空间中的距离很近。
  • 另外两个词『Germany』和『France』因为表示的都是地点,它们的向量与上面两句话的向量的距离,就比另外两个表示时间的词『Monday』和『Tuesday』的向量的距离近得多。
  • 这样,通过向量的距离,就得到了一种语义的表示。
  • 上图还显示了自然语言可组合的性质:词可以组成句、句可以组成段落、段落可以组成篇章,而更高层的语义取决于底层的语义以及它们的组合方式。
  • Recursive Neural Network(递归神经网络)是一种表示学习,它可以将词、句、段、篇按照他们的语义映射到同一个向量空间中,也就是把可组合(树/图结构)的信息表示为一个个有意义的向量。
  • 比如上面这个例子,Recursive Neural Network(递归神经网络)把句子"the country of my birth"表示为二维向量[1,5]。有了这个『编码器』之后,我们就可以以这些有意义的向量为基础去完成更高级的任务(比如情感分析等)。
  • 如下图所示,递归神经网络在做情感分析时,可以比较好的处理否定句,这是胜过其他一些模型的:
  • 在上图中,蓝色表示正面评价,红色表示负面评价。
  • 每个节点是一个向量,这个向量表达了以它为根的子树的情感评价。
  • 比如"intelligent humor"是正面评价,而"care about cleverness wit or any other kind of intelligent humor"是中性评价。
  • 我们可以看到,模型能够正确的处理doesn’t的含义,将正面评价转变为负面评价。
  • 尽管具有更为强大的表示能力,但是Recursive Neural Network(递归神经网络)在实际应用中并不太流行。其中一个主要原因是,Recursive Neural Network(递归神经网络)的输入是树/图结构,而这种结构需要花费很多人工去标注。
  • 想象一下,如果我们用循环神经网络处理句子,那么我们可以直接把句子作为输入。
  • 然而,如果我们用递归神经网络处理句子,我们就必须把每个句子标注为语法解析树的形式,这无疑要花费非常大的精力。很多时候,相对于递归神经网络能够带来的性能提升,这个投入是不太划算的。

四、Recursive Neural Network(递归神经网络)的前向计算

  • 在这里,我们以处理树型信息为例进行介绍。
  • 递归神经网络的输入是两个子节点(也可以是多个),输出就是将这两个子节点编码后产生的父节点,父节点的维度和每个子节点是相同的。如下图所示:
  • 递归神经网络rnn 递归神经网络英文_神经网络_03递归神经网络rnn 递归神经网络英文_深度学习_04 分别是表示两个子节点的向量,递归神经网络rnn 递归神经网络英文_人工智能_05 是表示父节点的向量。子节点和父节点组成一个全连接神经网络,也就是子节点的每个神经元都和父节点的每个神经元两两相连。我们用矩阵 递归神经网络rnn 递归神经网络英文_人工智能_06 表示这些连接上的权重,权重矩阵 递归神经网络rnn 递归神经网络英文_人工智能_06 的维度将是 递归神经网络rnn 递归神经网络英文_人工智能_08,其中,递归神经网络rnn 递归神经网络英文_递归_09 表示每个子节点的维度。父节点的计算公式可以写成:
    递归神经网络rnn 递归神经网络英文_深度学习_10
    在上式中,tanh是激活函数,递归神经网络rnn 递归神经网络英文_深度学习_11 是激活项,它也是一个维度为 递归神经网络rnn 递归神经网络英文_递归_09
  • 然后我们再把产生父节点的向量和其他子节点的向量再次作为网络的输入,再次产生他们的父节点。
  • 如此递归下去,直至整棵树处理完毕。
  • 最终,我们将得到根节点的向量,我们可以认为它是对整棵树的表示,这样我们就实现了把树映射为一个向量。
  • 在下图中我们使用递归神经网络处理一棵树,最终得到的向量递归神经网络rnn 递归神经网络英文_递归神经网络rnn_13,就是对整棵树的表示:
  • 举个例子,我们使用递归神经网络将『两个外语学校的学生』映射为一个向量,如下图所示:
  • 最后得到的向量 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_13
  • 事实上,树中的每个根节点都是以其子节点为表示的,比如:在左边的这棵树中,向量 递归神经网络rnn 递归神经网络英文_深度学习_15 是短语『外语学院的学生』的表示,而向量 递归神经网络rnn 递归神经网络英文_递归_16
  • 递归神经网络rnn 递归神经网络英文_人工智能_17就是递归神经网络的前向计算算法,它和全连接神经网络的计算没什么区别,只是在输入的过程中需要根据输入的树结构一次输入每个子节点。
  • 需要特别注意的是,递归神经网络的权重矩阵 递归神经网络rnn 递归神经网络英文_人工智能_06 和偏置项 递归神经网络rnn 递归神经网络英文_深度学习_19

五、Recursive Neural Network(递归神经网络)的训练

  • 递归神经网络的训练算法和循环神经网络类似,两者不同之处在于,递归神经网络需要将残差 递归神经网络rnn 递归神经网络英文_深度学习_20 从根节点反向传播到各个子节点,而循环神经网络是将残差递归神经网络rnn 递归神经网络英文_深度学习_20从当前时刻 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_22 反向传播到初始时刻 递归神经网络rnn 递归神经网络英文_深度学习_23
  • 递归神经网络的训练算法是BPTS算法

1、误差项的传递

  • 首先,我们先推导将误差从父节点传递到子节点的公式,如下图:
  • 定义递归神经网络rnn 递归神经网络英文_递归神经网络rnn_24为误差函数E相对于父节点递归神经网络rnn 递归神经网络英文_递归神经网络rnn_25的加权输入递归神经网络rnn 递归神经网络英文_深度学习_26的导数,即:
  • 递归神经网络rnn 递归神经网络英文_深度学习_26 是父节点的加权输入,则

    在上述式子里,递归神经网络rnn 递归神经网络英文_深度学习_26递归神经网络rnn 递归神经网络英文_深度学习_29递归神经网络rnn 递归神经网络英文_神经网络_30都是向量,而递归神经网络rnn 递归神经网络英文_人工智能_06是矩阵。我们展开:

    在上面的公式中,递归神经网络rnn 递归神经网络英文_递归神经网络rnn_32表示父节点 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_25 的第 递归神经网络rnn 递归神经网络英文_深度学习_34 个分量;递归神经网络rnn 递归神经网络英文_递归神经网络rnn_35表示递归神经网络rnn 递归神经网络英文_深度学习_29子节点的第 递归神经网络rnn 递归神经网络英文_深度学习_34 个分量;递归神经网络rnn 递归神经网络英文_人工智能_38表示递归神经网络rnn 递归神经网络英文_神经网络_30子节点的第 递归神经网络rnn 递归神经网络英文_深度学习_34 个分量;递归神经网络rnn 递归神经网络英文_递归神经网络rnn_41表示子节点递归神经网络rnn 递归神经网络英文_递归神经网络rnn_42的第k个分量到父节点p的第 递归神经网络rnn 递归神经网络英文_深度学习_34 个分量的权重。根据上面展开后的矩阵乘法形式,我们不难看出,对于子节点递归神经网络rnn 递归神经网络英文_人工智能_44来说,它会影响父节点所有的分量。因此,我们求误差函数E对递归神经网络rnn 递归神经网络英文_人工智能_44的导数时,必须用到全导数公式,也就是:

    有了上式,我们就可以把它表示为矩阵形式,从而得到一个向量化表达:

    其中,矩阵递归神经网络rnn 递归神经网络英文_人工智能_46是从矩阵W中提取部分元素组成的矩阵。其单元为:

    上式看上去可能会让人晕菜,从下图,我们可以直观的看到递归神经网络rnn 递归神经网络英文_人工智能_46到底是啥。首先我们把W矩阵拆分为两个矩阵递归神经网络rnn 递归神经网络英文_人工智能_48递归神经网络rnn 递归神经网络英文_深度学习_49,如下图所示:

    显然,子矩阵 递归神经网络rnn 递归神经网络英文_人工智能_48递归神经网络rnn 递归神经网络英文_深度学习_49 分别对应子节点 递归神经网络rnn 递归神经网络英文_深度学习_29递归神经网络rnn 递归神经网络英文_神经网络_30 的到父节点 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_25 权重。则矩阵 递归神经网络rnn 递归神经网络英文_人工智能_46 为:

    也就是说,将误差项反向传递到相应子节点 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_42 的矩阵 递归神经网络rnn 递归神经网络英文_人工智能_46 就是其对应权重矩阵 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_58 的转置。
    现在,我们设 递归神经网络rnn 递归神经网络英文_深度学习_59 是子节点 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_42 的加权输入,递归神经网络rnn 递归神经网络英文_递归_61 是子节点 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_62 的激活函数,则:

    这样,我们得到:

    如果我们将不同子节点 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_42 对应的误差项 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_64 连接成一个向量 递归神经网络rnn 递归神经网络英文_递归_65 。那么,上式可以写成:

上式就是将误差项从父节点传递到其子节点的公式。注意,上式中的 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_66 也是将两个子节点的加权输入 递归神经网络rnn 递归神经网络英文_深度学习_67递归神经网络rnn 递归神经网络英文_神经网络_68 连在一起的向量。

有了传递一层的公式,我们就不难写出逐层传递的公式。

递归神经网络rnn 递归神经网络英文_深度学习_69


上图是在树型结构中反向传递误差项的全景图,反复应用式2,在已知 递归神经网络rnn 递归神经网络英文_神经网络_70 的情况下,我们不难算出 递归神经网络rnn 递归神经网络英文_递归_71 为:

递归神经网络rnn 递归神经网络英文_深度学习_72


在上面的公式中,递归神经网络rnn 递归神经网络英文_递归神经网络rnn_73递归神经网络rnn 递归神经网络英文_递归_74 表示取向量属于节点 递归神经网络rnn 递归神经网络英文_神经网络_75

2、权重梯度的计算

  • 根据加权输入的计算公式:
  • 递归神经网络rnn 递归神经网络英文_深度学习_76

  • 其中,递归神经网络rnn 递归神经网络英文_神经网络_77 表示第 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_78 层的父节点的加权输入,递归神经网络rnn 递归神经网络英文_深度学习_79 表示第 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_78 层的子节点。递归神经网络rnn 递归神经网络英文_深度学习_81 是权重矩阵,递归神经网络rnn 递归神经网络英文_深度学习_82 是偏置项。将其展开可得:
  • 递归神经网络rnn 递归神经网络英文_人工智能_83

  • 那么,我们可以求得误差函数在第 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_78 层对权重的梯度为:
  • 递归神经网络rnn 递归神经网络英文_神经网络_85

  • 上式是针对一个权重项 递归神经网络rnn 递归神经网络英文_人工智能_86 的公式,现在需要把它扩展为对所有的权重项的公式。我们可以把上式写成矩阵的形式(在下面的公式中,递归神经网络rnn 递归神经网络英文_神经网络_87):
  • 递归神经网络rnn 递归神经网络英文_人工智能_88

  • 式3就是第 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_78 层权重项的梯度计算公式。我们知道,由于权重 递归神经网络rnn 递归神经网络英文_深度学习_81 是在所有层共享的,所以和循环神经网络一样,递归神经网络的最终的权重梯度是各个层权重梯度之和。即:
  • 递归神经网络rnn 递归神经网络英文_递归_91

  • 递归神经网络『为什么最终梯度是各层梯度之和』的证明参考:卷积神经网络
  • 接下来,我们求偏置项 递归神经网络rnn 递归神经网络英文_深度学习_82 的梯度计算公式。先计算误差函数对第 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_78 层偏置项 递归神经网络rnn 递归神经网络英文_递归_94 的梯度:
  • 递归神经网络rnn 递归神经网络英文_深度学习_95

  • 把上式扩展为矩阵的形式:
  • 递归神经网络rnn 递归神经网络英文_递归_96

  • 式5是第 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_78 层偏置项的梯度,那么最终的偏置项梯度是各个层偏置项梯度之和,即:
  • 递归神经网络rnn 递归神经网络英文_递归_98

3、权重更新

  • 如果使用梯度下降优化算法,那么权重更新公式为:
  • 其中,递归神经网络rnn 递归神经网络英文_人工智能_99 是学习速率常数。把式4带入到上式,即可完成权重的更新。同理,偏置项的更新公式为:
  • 把式6带入到上式,即可完成偏置项的更新。
  • 这就是递归神经网络的训练算法BPTS。

六、Recursive Neural Network的应用:自然语言和自然场景解析

  • 在自然语言处理任务中,如果我们能够实现一个解析器,将自然语言解析为语法树,那么毫无疑问,这将大大提升我们对自然语言的处理能力。解析器如下所示:
  • 可以看出,递归神经网络能够完成句子的语法分析,并产生一个语法解析树。
  • 除了自然语言之外,自然场景也具有可组合的性质。因此,我们可以用类似的模型完成自然场景的解析,如下图所示:
  • 两种不同的场景,可以用相同的递归神经网络模型来实现。我们以第一个场景,自然语言解析为例。
  • 我们希望将一句话逐字输入到神经网络中,然后,神经网络返回一个解析好的树。为了做到这一点,我们需要给神经网络再加上一层,负责打分。分数越高,说明两个子节点结合更加紧密,分数越低,说明两个子节点结合更松散。如下图所示:
  • 一旦这个打分函数训练好了(也就是矩阵U的各项值变为合适的值),我们就可以利用贪心算法来实现句子的解析。第一步,我们先将词按照顺序两两输入神经网络,得到第一组打分:
  • 我们发现,现在分数最高的是第一组,The cat,说明它们的结合是最紧密的。这样,我们可以先将它们组合为一个节点。然后,再次两两计算相邻子节点的打分:
  • 现在,分数最高的是最后一组,the mat。于是,我们将它们组合为一个节点,再两两计算相邻节点的打分:
  • 这时,我们发现最高的分数是on the mat,把它们组合为一个节点,继续两两计算相邻节点的打分…最终,我们就能够得到整个解析树:
  • 现在,我们困惑这样牛逼的打分函数score是怎样训练出来的呢?我们需要定义一个目标函数。这里,我们使用Max-Margin目标函数。它的定义如下:
  • 在上式中,递归神经网络rnn 递归神经网络英文_深度学习_100递归神经网络rnn 递归神经网络英文_递归_101分别表示第 递归神经网络rnn 递归神经网络英文_深度学习_34 个训练样本的输入和标签,注意这里的标签 递归神经网络rnn 递归神经网络英文_递归_101 是一棵解析树。递归神经网络rnn 递归神经网络英文_神经网络_104 就是打分函数 递归神经网络rnn 递归神经网络英文_递归_105 对第 递归神经网络rnn 递归神经网络英文_深度学习_34 个训练样本的打分。因为训练样本的标签肯定是正确的,我们希望 递归神经网络rnn 递归神经网络英文_递归_105 对它的打分越高越好,也就是 递归神经网络rnn 递归神经网络英文_神经网络_104 越大越好。递归神经网络rnn 递归神经网络英文_递归_109 是所有可能的解析树的集合,而 递归神经网络rnn 递归神经网络英文_神经网络_104 则是对某个可能的解析树 递归神经网络rnn 递归神经网络英文_神经网络_111 的打分。递归神经网络rnn 递归神经网络英文_递归神经网络rnn_112 是对错误的惩罚。也就是说,如果某个解析树 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_113 和标签 递归神经网络rnn 递归神经网络英文_递归_101 是一样的,那么递归神经网络rnn 递归神经网络英文_递归神经网络rnn_112为0,如果网络的输出错的越离谱,那么惩罚项递归神经网络rnn 递归神经网络英文_递归神经网络rnn_112的值就越高。递归神经网络rnn 递归神经网络英文_递归_117表示所有树里面最高得分。在这里,惩罚项相当于Margin,也就是我们虽然希望打分函数s对正确的树打分比对错误的树打分高,但也不要高过Margin的值。我们优化 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_118,使目标函数取最小值,即:

    下面是惩罚函数 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_119 的定义:

    上式中,递归神经网络rnn 递归神经网络英文_递归神经网络rnn_120 是树 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_113 节点的集合;递归神经网络rnn 递归神经网络英文_神经网络_122 是以 递归神经网络rnn 递归神经网络英文_递归_123 为节点的子树。上式的含义是,如果以 递归神经网络rnn 递归神经网络英文_递归_123 为节点的子树没有出现在标签 递归神经网络rnn 递归神经网络英文_递归_101中,那么函数值+1。最终,惩罚函数的值,是树 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_113 中没有出现在树 递归神经网络rnn 递归神经网络英文_递归_101 中的子树的个数,再乘上一个系数 递归神经网络rnn 递归神经网络英文_递归_128。其实也就是关于两棵树差异的一个度量。
    递归神经网络rnn 递归神经网络英文_递归_129 是对一个样本最终的打分,它是对树 递归神经网络rnn 递归神经网络英文_递归神经网络rnn_113 每个节点打分的总和。