递归神经网络|深度学习(李宏毅)(十六)

李宏毅老师深度学习系列2020

一、递归神经网络与循环神经网络

该部分以情感分析任务为例来说明递归神经网络(recursive neural network)和循环神经网络(recurrent neural network)的关系。

如下图所示,在使用RNN来搭建情感分析神经网络模型时,我们首先使用word embedding的方法来将获取句子的embedding序列,然后将序列中的每一个token的embedding输入到RNN中,最后将最后一个时间点的输出向量输入到一个分类器(可以是一个前馈网络)中来完成情感分类任务。而使用递归结构时需要事先确定文本序列的结构信息,然后按照文本的结构来按顺序将embedding向量输入到 f f f中, f f f可以是一个神经网络,最终需要将最后一个 f f f的输入输入到分类器 g g g中获得情感分类的结果:

情感分析

循环神经网络可以看做递归神经网络的特殊情况,递归神经网络需要事先定义序列内token的关系来决定输入的顺序,只要定义这个顺序和循环神经网络一样,递归神经网络就成了循环神经网络。

二、递归神经网络

该部分以一个具体的例子来说明递归神经网络的设计。

  1. 架构

对于一个词序列比如“not very good”,我们首先需要做的是获得其文法结构,这一步可以通过调用一些语法分析的工具包来办到。然后将词序列输入到递归神经网络 f f f中时要按照文法结构的顺序。在下图中我们先将“very”和“good”输入到 f f f中,假设每个词向量的维度都是 ∣ Z ∣ |Z| Z,因此这个 f f f的输入的维度就是 2 × ∣ Z ∣ 2\times |Z| 2×Z(也就是将两个词的embedding向量拼接起来输入到 f f f中),输出就是 ∣ Z ∣ |Z| Z。我们希望每个词的embedding代表了该词的含义,而 f f f的输出代表两个词结合后的含义,比如图中 f f f的输出代表了“very good”的含义:

递归神经网络

通常 f f f不会是两个输入向量的简单相加,因为获取两个词结合起来的意思可能需要比较复杂的函数来拟合,举例来说:

Case1:
 not:neutral
 good:positive
 not good:negative
Case2:
 好棒:positive
 棒:positive
 好棒棒:negative

通过上面的例子可以想象两个词向量的简单相加是不能表达其结合起来的意义的,因此 f f f通常是一个神经网络。在下面两图中,我们使用蓝色来代表positive的意思,橙色来代表negative的意思。两张图分别表达了“not”要将跟其结合的词的意义转向(reverse),而“very”要将跟其结合的词的意义加强(emphasize),因此 f f f需要是一个复杂的神经网络:

not

very

训练这个网络的整个过程如下,将所有词按照文法结构输入给 f f f,最终将 f f f的输入输入到分类器 g g g中最终得到类别的分布,然后再将这个分布跟标签取loss然后更新网络的参数:

过程

  1. 网络 f f f的设计

前面说过, f f f不能是两个输入向量的简单相加,下图这种 f f f的设计方式会使得输入向量 a a a b b b由很少的交互,最终 f f f输出的 p p p的每一维度都只是 a a a b b b的简单相加,因此 f f f仍需要更复杂的设计:

f的结构

  • Recursive Neural Tensor Network

下面介绍的这种 f f f的设计中包含了Tensor Network的结构,因此叫做Recursive Neural Tensor Network。下图展示了这种 f f f的具体设计:

Recursive Neural Tensor Network

我们定义 a a a b b b拼接起来的向量为 x x x,图中方框内的部分会得到一个标量 ∑ i , j W i j x i x j \sum _{i,j}W_{ij}x_{i}x_{j} i,jWijxixj,这样 a a a b b b就因为有了更多的相乘的关系而有了更强的交互。这里使用了多个方框中的结构是为了能够得到一个向量与加号右边的部分相加。需要注意多个方框内的 W W W是不同的。

  • Matrix-Vector Recursive Network

Matrix-Vector Recursive Network这种设计虽然在效果上不如上述方法,但其设计思想值得学习一下。这种方法做的主要的假设是一个词的embedding的一部分代表这个词的意义,另一部分代表这个词如何去影响别的词:

假设

每个输入的词的一部分代表其含义,另一部分代表其如何影响别的词,我们将这一部分排列成一个矩阵。当两个词(以“not”和“good”为例)同时输入到函数 f f f中时,每个词的代表含义的向量将和另一个词的代表影响的矩阵相乘得到两个向量,然后将这两个向量拼接起来再乘以一个权重矩阵 W W W得到新的含义向量;每个词的影响矩阵会拼接到一起然后乘以一个一个权重矩阵 W M W_M WM得到新的影响矩阵,然后将含义向量和影响矩阵排列成新的向量在通过激活函数就是 f f f的输出。该过程如下图所示:

Matrix-Vector Recursive Network

可以推测,像“not”这样的中性词,其含义向量可能为 0 0 0,而其会将与之结合的词的意义反转,所以其影响矩阵可能为对角元素为 − 1 -1 1的对角矩阵;而“good”对与之结合的词没有太大影响,其影响矩阵可能是单位矩阵。

  • Tree LSTM

LSTM通常需要输入三个部分:输入 x t x^t xt,上一个时间点的输出 h t − 1 h^{t-1} ht1和上一个时间点的记忆 m t − 1 m^{t-1} mt1,然后输出两个部分:当前时间点的输出 h t h^t ht和当前时间点的记忆 m t m^t mt

LSTM

Tree LSTM也就是使用LSTM来充当递归神经网络的 f f f

Recursive Neural Network

这里的LSTM输入两个向量,每个向量都包含 h h h m m m,然后输出另一个 h h h m m m

Tree LSTM

三、应用

如果输入的序列有明显的结构层次(比如数学公式),那么使用递归神经网络会有比较好的效果,对于一般的文本递归神经网络的提升并不大,这是因为定义的文本结构也不一定是正确的。

除了应用在情感分析上,递归神经网络也有一些别的应用,比如评估句子相似度(sentence relatedness)。具体的做法是将两个句子输入到递归神经网络中得到其输出,然后将输出输入到一个别的神经网络中得到评估的结果:

sentence relatedness

得到的效果如下,每句话前面的数字代表打分:

效果

上述例子的论文链接:https://arxiv.org/abs/1503.00075

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值