论文:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks

一、译文:

ABSTRACT

自然语言是分层结构的:较小的单元(例如短语)嵌套在较大的单元(例如子句)中。当较大的组件结束时,嵌套在其中的所有较小的组件也必须结束。虽然标准的LSTM体系结构允许不同的神经元在不同的时间尺度上跟踪信息,但它并没有明确地偏向于对成分层次结构建模。本文提出通过对神经元进行排序来增加这种诱导偏差;一个主输入和遗忘门的向量确保当一个给定的神经元被更新时,按照顺序跟随它的所有神经元也被更新。我们的新递归结构,有序神经元LSTM (on -LSTM),在语言建模、无监督解析、目标语法评估和逻辑推理四个不同的任务上都取得了良好的性能。

1 INTRODUCTION

自然语言具有连续的显性形式,如口语和书面语,但语言的基本结构并不是严格的连续的。这种结构通常是树状的。语言学家们就确定这种结构的一套规则或语法达成了一致意见,并规定单个单词如何组合成更大的有意义的单位,也称为“成分”。人类的大脑也可以隐式地获得语言的潜在结构:在语言习得过程中,儿童不会得到带注释的解析树。受生物神经系统中信息处理和通信模式的启发,人工神经网络方法对潜在结构的诱导引起了人们更多的兴趣。从实用的角度来看,将树结构集成到神经网络语言模型中可能有以下几个重要原因:

(i)获得一个抽象层次不断增加的层次表示,这是深度神经网络的一个关键特征;

(ii)对语言的成分效应进行建模和通过提供梯度反向传播的快捷方式帮助解决长期依赖问题;

(iii)通过更好的归纳偏差改进泛化,同时可能减少对大量训练数据的需要。

近年来,能够推断并利用树状结构更好地表达自然语言句子的深度神经网络技术的研究受到了极大的关注。

给定一个句子,预测相应的潜在树结构的一种直接方法是通过一个有监督的语法分析器。这些解析器生成的树被用来指导将单词语义组合成句子语义,甚至帮助在给定之前单词的情况下预测下一个单词。但是,受监督的解析器受到限制,原因有以下几个:1)很少有语言具有用于有监督解析器训练的全面注释数据;ii)在某些领域,语法规则往往会被打破;iii)语言会随着使用的时间而变化,所以语法规则可能会进化。

另一方面,语法归纳法仍然是一个有待解决的问题,它的定义是在不访问专家标记的数据的情况下,从原始语料库学习语法结构。最近许多这样的尝试都因为引入了一个琐碎的结构而受挫,或者遇到了使用强化学习学习分支策略(RL)导致的训练困难。此外,一些方法的实现和训练相对复杂,如Shen等(2017)提出的PRPN模型。

递归神经网络(RNNs)已被证明在语言建模任务中非常有效。RNNs显式地对数据施加一个链结构。这种假设似乎与语言潜在的非顺序结构不一致并且采用深度学习方法对自然语言数据进行处理存在一定的困难,会导致捕获长期依赖,实现良好的泛化,处理否定等问题。同时,也有证据表明,具有足够能力的LSTMs可能通过隐式编码树结构来实现句法处理机制,如Gulordava等人(2018年)以及最近的Lakretz等人(2019年)展示的。我们认为,下面的问题仍然存在:通过有倾向的学习这种潜在树结构的体系结构是否能获得更好的语言模型?

在这项工作中,我们介绍了有序神经元,一个新的归纳倾向的递归神经网络。这种归纳倾向促进了存储在每个神经元内的信息的生命周期的分化:高级神经元存储长期信息,这些信息被保存了大量步骤,而低级神经元存储短期信息,这些信息可以很快被遗忘。为了避免高阶和低阶神经元之间的严格划分,我们提出了一种新的激活函数,称为累积softmax或cumax(),用于主动分配神经元来存储长/短期信息。我们使用cumax()函数来生成一个主输入向量,而遗忘门确保当一个给定的神经元被更新(擦除)时,按照顺序跟随它的所有神经元也被更新(擦除)。基于cumax()和LSTM体系结构,我们设计了一个新的模型on-LSTM,它偏向于执行类似树的组合操作。我们的模型在语言建模、无监督选区解析、目标句法评价(Marvin & Linzen, 2018)和逻辑推理(Bowman et al., 2015)四项任务上都取得了良好的性能。对无监督选区解析的结果表明,所提出的归纳倾向比先前提出的模型更符合人类专家提出的语法原则。实验还表明,在需要捕获长期依赖关系的任务中,ON-LSTM模型的性能优于标准LSTM模型,并能更好地泛化较长的序列。

2 RELATED WORK

已有文献利用树结构来完成自然语言任务。Socher等(2010);Alvarez-Melis & Jaakkola (2016);周等(2017);Zhang等(2015)在专家标记的树库上使用监督学习来预测解析树。Socher等人(2013)和Tai等人(2015)使用来自外部解析器的解析信息显式地对树结构建模。后来,Bowman等人(2016)利用监督解析器的先导(Klein & Manning, 2003)来训练堆栈增强神经网络。

从理论上讲,RNNs和LSTMs可以对上下文无关文法和上下文敏感文法生成的数据进行建模(Gers & Schmidhuber, 2001)。然而,最近的研究结果表明,在LSTMs中引入结构信息是有益的。Kuncoro et al.(2018)表明,RNNGs (Dyer et al., 2016)在主谓一致任务上表现优于LSTMs (Linzen et al., 2016), RNNGs对句法结构具有明显的建模倾向。在我们的论文中,我们运行了Marvin & Linzen(2018)最近提供的更广泛的语法测试套件。Bowman等(2014;2015)也证明了树结构模型对于数据由递归程序生成的下游任务更有效。有趣的是,Shi等人(2018)认为,虽然指定的语法树可能不是理想的,但某种层次结构(可能依赖于任务)可能会有所帮助。然而,如何从观测数据有效地推断这种结构仍然是一个悬而未决的问题。

从数据中学习底层语法的任务被称为语法归纳(Chen, 1995;科恩等人,2011)。早期的工作将句法结构纳入到语言建模的上下文中(Roark, 2001;Charniak, 2001;Chelba & Jelinek, 2000)。最近,有人尝试使用神经模型为下游任务合并一些结构(Grefenstette et al., 2015;Sun等,2017;Joulin & Mikolov, 2015)。一般来说,这些工作用堆栈扩充了一个主要的递归模型,并专注于解决算法任务。Yogatama等人(2018)关注于语言建模和句法评估任务(Linzen等人,2016),但他们没有显示出模型学习的结构与黄金标准解析树的匹配程度。Shen等人(2017)引入了解析-读取-预测网络(parsing- read- predict Networks, PRPN)模型,该模型试图通过解决语言建模任务来执行解析。该模型使用自我注意来组合之前的状态,其中注意范围由学习的“句法距离”控制。作者表明,这个值对应于解析树的深度。然而,在使用PRPN模型时增加的复杂性使其在实践中变得笨拙。

另一种可能的解决方案是开发具有不同递归时间尺度的模型,作为捕获这个层次结构的一种方法。El Hihi & Bengio (1996);Schmidhuber (1991);Lin等人(1998)描述了以预先确定的时间尺度捕获层次结构的模型。最近,Koutnik等人(2014)提出了Clockwork RNN,它通过在不同的时间尺度上更新来分割RNN的隐藏状态。这些方法通常对数据建模中涉及的层次结构的规律性做出了强有力的假设。Chung等人(2016)提出了一种方法,与Clockwork RNN不同,该方法将学习多尺度层次递归。然而,模型仍然有一个层次结构的预先确定的深度,这取决于层的数量。我们的工作更接近于Rippel et al。(2014),提出使用嵌入dropout mask归纳一个层次结构的表示单元:单元不是独立随机下降但每当单位下降,所有的单位,按照顺序也下降了。我们的工作可以被看作是cumax()激活平均值实现的dropout的软松弛。此外,我们建议根据特定的输入设置更新掩码,并将整个模型应用于顺序数据。因此,我们的模型可以根据观察到的数据调整结构,而Clockwork RNN和嵌套dropout都将预定义的层次结构强加给隐藏的表示。

3 ORDERED NEURONS

给定一个标记序列S = (x_1,...,x_T)及其相应的单位树(图2(a)),我们的目标是在处理观察序列时推断出未被观察到的树结构,即在每个时间步t计算隐藏状态h_t。在每个时间步,理想情况h_t将包含当前叶子节点x_t到跟节点S路径上的所有节点的信息。在图2(c)中,尽管只有局部被观测到,我们将说明h_t如何包含包括x_t在内的所有组成部分的信息。这种直觉表明,树中的每个节点都可以由一组处于隐藏状态的神经元表示。然而,虽然隐藏状态的维数是预先确定的,但是不同的时间步长和句子中连接叶子和根节点的路径长度可能是不同的。因此,模型的一个要求是动态地将隐藏状态的维数重新分配到每个节点。

鉴于这些要求,我们引入有序神经元,这是一种归纳倾向,迫使神经元在不同的时间尺度上表示信息。在我们的模型中,高级神经元包含从几个时间步骤到整个句子的长期或全局信息,表示根节点附近的节点。低级别神经元编码的短期或局部信息只持续一个或几个时间步长,表示更小的成分,如图2(b)所示。通过控制单个神经元的更新频率,以完全数据驱动的方式学习高阶和低阶神经元之间的区别:为了删除(或更新)高阶神经元,模型应该首先删除(或更新)所有低阶神经元。换句话说,一些神经元总是比其他神经元更新得更频繁(或更少),而这个顺序是作为模型架构的一部分预先确定的。

4 ON-LSTM

在本节中,我们提出了一个新的RNN单元,ON-LSTM(“有序神经元LSTM”)。新模型采用了与标准LSTM类似的体系结构,报告如下:

                                                                            f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)                                              (1)

                                                                             i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)                                                (2)

                                                                            o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)                                               (3)

                                                                         \widehat{c}_t = tanh(W_c x_t + U_c h_{t-1} + b_c)                                             (4)

                                                                                   h_t = o_t \odot tanh(c_t)                                                         (5)

一个选区解析树和提议的ON-LSTM的隐藏状态之间的对应关系。0令牌序列S = (x1, x2, x3)及其对应的选区树如(a)所示,我们提供了(b)中树结构的块视图,其中S和VP节点都跨越了一个以上的时间步长。高级节点的表示应该在多个时间步骤中保持相对一致。(c)隐藏状态神经元群更新频率的可视化。在每个时间步长,给定输入字,完全更新深灰色块,而部分更新浅灰色块。这三组神经元有不同的更新频率。最上面的组更新频率较低,而较低的组更新频率较高。

 

与LSTM的不同之处在于,我们用一个新函数替换了细胞状态c_t的更新函数,这个新函数将在下面的小节中进行解释。遗忘门f_t和输入门x_t用于控制细胞状态c_t上的擦除和写入操作,与以前一样。由于LSTM中的门独立作用于每个神经元,因此通常很难辨别神经元之间的信息层次。为此,我们建议通过强制执行神经元更新的顺序,使每个神经元的门依赖于其他神经元。

4.1 ACTIVATION FUNCTION: cumax()

为了强制执行更新频率的顺序,我们引入了一个新的激活函数:

                                                               \widehat{g} = cumax(...) = cumsum(softmax(...)),                                 (6)

式中,cumsum表示累积和。我们将表明矢量\widehat{g}可以被看作是一个二进制的期望门g=(0,...,0,1,...,1)。这个二进制门将细胞状态分成两段:0段和1段。因此,模型可以对这两个部分应用不同的更新规则来区分长/短期信息。用d表示分类随机变量,该变量表示g中第一个1的索引:

                                                                                 p(d)=softmax(...)                                                     (7)

变量d表示两个段之间的分界点。通过评估在第k个分离点成为分割点之前的分离点概率我们可以计算g中第k个值为1的概率,就是d\leq k=(d=0)\vee (d=1) \vee ... \vee(d=k)。因为类别是互斥的,我们可以通过计算累积分布函数:

                                                                  p(g_k=1)=p(d \leq k)=\sum_{i \leq k} p(d=i)                                       (8)

理想情况下,g应该采用离散变量的形式。不幸的是,计算图中包含离散变量时的梯度并不是平凡的(Schulman et al., 2015),因此在实际中,通过计算softmax的累加得到p(d \leq k)去使用连续松弛法。由于g_k是二进制的,这相当于计算\math{E}[g_k]。因此\widehat{g} = E[g]

4.2 STRUCTURED GATING MECHANISM

基于cumax()函数,我们引入一个主忘记门\widetilde{f}_t和主输入门\widetilde{i}_t

                                                                   \widetilde{f}_t=cumax(W_{\widetilde{f}}x_t + U_{\widetilde{f}}h_{t-1} + b_{\widetilde{f}})                                          (9)

                                                                 \widetilde{i}_t=1-cumax(W_{\widetilde{i}}x_t + U_{\widetilde{i}}h_{t-1} + b_{\widetilde{i}})                                       (10)

根据cumax()激活的性质,主忘记门中的值从0单调地增加到1,而主输入门中的值从1单调地减少到0。这些门用作单元状态更新操作的高级控制。使用主门,我们定义了一个新的更新规则:

                                                                                  w_t = \widetilde{f}_t \odot \widetilde{i}_t                                                                (11)

                                                  \widehat{f}_t = f_t \odot w_t + ( \widetilde{f}_t-w_t)= \widetilde{f}_t \odot (f_t \odot \widetilde{i}_t + 1 - \widetilde{i}_t)                                 (12)

                                                   \widehat{i}_t = i_t \odot w_t + ( \widetilde{i}_t-w_t)= \widetilde{i}_t \odot (i_t \odot \widetilde{f}_t + 1 - \widetilde{f}_t)                                 (13)

                                                                           c_t = \widehat{f}_t \odot c_t + \widehat{i}_t \odot \widehat{c}_t                                                        (14)

为了解释新的更新规则背后的直觉,我们假设主门是二进制的:

主忘记门\widetilde{f}_t控制模型的消除行为。假设\widetilde{f}_t = (0,...,0,1,...,1),分割点是d_t。根据式(12)和式(14),存储在前一细胞状态c_{t-1}的第一个d^f_t神经元中的信息将被完全删除。在解析树中(例如图2(a)),这个操作类似于关闭前面的成分。大量的归零神经元,即一个大的d^f_t,代表了解析树中高级成分的结束,因为状态中的大部分信息将被丢弃。相反,一个小的d^f_t表示低级组成部分的结束,因为高级信息被保留以供进一步处理。

主输入门\widetilde{i}_t它是为了控制模型的写机制。假设\widetilde{i}_t=(1,...,1,0,...,0),分割点是dt。给定式(13)和式(14),大的d^i_t表示当前输入的x_t包含需要保存几个时间步骤的长期信息。相反,一个小d^i_t意味着当前输入x_t提供本地信息,可以擦除\widetilde{f}_t在接下来的几个步骤。

产品的两个主门w_t代表\widetilde{f}_t\widetilde{i}_t的重叠。每当一个重叠存在(\exists k, w_{tk} > 0),相应的神经元编码段的不完整的成分包含一些以前的词汇x_t和当前输入。由于这些组件是不完整的,所以我们希望更新各自块中的信息。在标准LSTM模型中,该段由f_ti_t进一步控制,以便在块内实现更细粒度的操作。例如,在图2中,单词x_3嵌套在组成部分S和VP中。在这个时间步,重叠的灰色块代表这些成分,这样\widetilde{f}_t\widetilde{i}_t可以决定是否重置或更新这些块中的每个神经元。

由于主门只关注粗粒度控制,因此用与隐藏状态相同的维度对它们进行建模在计算上是昂贵且不必要的。在实践中,我们设置\widetilde{f}_t\widetilde{i}_tD_m = \frac{D}{C}维向量,D是隐藏状态的维度,C是一个块大小的因素。我们将每个维数重复C次,然后再与f_ti_t进行逐元素的乘法。这种缩减大大减少了需要添加到LSTM的额外参数的数量。因此,每个c大小块中的每个神经元共享相同的主门。

5 EXPERIMENTS

我们对所提出的模型进行了四项任务的评估:语言建模、无监督成分句法分析、目标语法评估(Marvin & Linzen, 2018)和逻辑推理(Bowman et al., 2015)。

5.1 LANGUAGE MODELING

词级语言建模是对模型处理各种语言现象(如共现、句法结构、动主语一致等)能力的宏观评价。我们通过测量Penn TreeBank (PTB)上的perplexity来评估我们模型(Marcus et al., 1993;Mikolov, 2012)的任务。

为了公平比较,我们严格遵循AWD-LSTM中引入的模型超参数、正则化和优化技术(Merity et al., 2017)。我们的模型使用了一个三层ONLSTM模型,隐藏层为1150个单元,嵌入尺寸为400。对于主门,缩小因子C = 10。加上计算主门的矩阵,我们的参数略有增加,从2400万增加到2500万。我们根据验证性能手动搜索on-lstm的一些dropout值。单词向量上用于dropout的值,LSTM层之间的输出,最后一个LSTM层的输出,以及其中的嵌入dropout(0.5, 0.3, 0.45, 0.1)。循环权重矩阵的dropout采用0.45的。

如表1所示,我们的模型在共享相同的层数、嵌入维数和隐藏状态单元的情况下,比标准的LSTM性能更好。回想一下,主门只控制信息如何存储在不同的神经元中。值得注意的是,我们可以在不添加跳跃连接或显著增加参数数量的情况下提高强LSTM模型的性能。

5.2 UNSUPERVISED CONSTITUENCY PARSING

无监督成分句法分析任务将模型感应的潜在树结构与人工专家注释的树结构进行比较。实验采用Htut et al(2018)提出的参数设置。我们在语言模型任务中用我们最好的模型,使用WSJ10数据集和WSJ测试集做测试。WSJ10有7422个句子,其是WSJ数据集去除空元素和标点并限制单词数最多为10个。WSJ的测试集包含2416个不同长度的句子。值得注意的是,WSJ10测试集包含来自PTB数据集的训练、验证和测试集的句子,而WSJ测试使用与PTB测试集相同的句子集。

为了从预训练的模型中推断句子的树结构,我们使用零向量初始化隐藏状态,然后像在语言建模任务中那样将句子输入模型。在每个时间步长,我们计算出d^f_t的估计值:

                                           \widehat{d}^f_t = E[d^f_t] = \sum_{k=1}^{D_m} kp_f(d_t = k)=\sum_{k=1}^{D_m}\sum_{i=1}^kp_f(d_t =k)=D_m-\sum_{k=1}^{D_m} \widetilde{f}_{tk}                 (15)

其中p_f为与主遗忘门关联的分裂点上的概率分布,D_m为隐藏状态的大小。给定\widehat{d}^f_t,我们可以使用沈et al .(2017)在无监督成分句法分析中的自顶向下的贪婪解析算法。我们首先对\{ \widehat{d}^f_t \}进行递减排序。对应排序后序列中第一个\widehat{d}^f_t,我们把句子分成((x_{<i}), (x_i, (x_{>i})))。然后,我们递归地对成分(x_{<i})(x_{>i})重复这个操作,直到每个成分只包含一个单词。

性能如表2所示。on- lstm的第二层在WSJ测试集中实现了最好的无监督成分句法分析结果,而第一层和第三层的性能并不好。一种可能的解释是,第一层和最后一层可能过于专注于捕获对语言建模任务有用的本地信息,因为它们分别直接暴露于输入标记和输出预测,因此可能不鼓励学习更抽象的树结构。由于WSJ的测试集包含了不同长度的句子,而这些句子在训练中是没有被观察到的,因此我们发现ON-LSTM比以前的模型对长句子提供了更好的泛化和健壮性。我们也看到ON-LSTM模型可以为短语检测提供强有力的结果,包括ADJP(形容词短语)、PP(介词短语)和NP(名词短语)。该特性可以使许多下游任务受益,如问题回答、命名实体识别、联合引用解析等。

5.3 TARGETED SYNTACTIC EVALUATION

Marvin & Linzen(2018)提出了有针对性的句法评价任务。它是一组任务,根据三种不同的结构敏感语言现象来评估语言模型:主谓一致、反身回指和负极性项。给定大量最少不同的英语句子对,每对句子由一个语法和一个非语法的句子组成,语言模型应该为一个语法句子分配比一个非语法句子更高的概率。

使用发布的codebase2和Marvin & Linzen(2018)中提出的相同设置,我们在Wikipedia的9000万单词子集上训练我们的on-LSTM模型和基线LSTM语言模型。两种语言模型都有两层650个单元,批大小为128,dropout为0.2,学习率为20.0,经过40个epoch的训练。输入嵌入为200维,输出嵌入为650维。

表3显示,on-LSTM在长期依赖情况下性能更好,而基线LSTM在短期依赖情况下性能更好。这可能是由于隐藏状态下的单位数量相对较少,不足以同时考虑长期和短期的信息。我们还注意到,新产品导入测试用例的结果在不同超参数间具有异常高的方差。这个结果可能是由于Marvin & Linzen(2018)讨论的非语法线索。尽管如此,on-lstm实际上在验证集上实现了更好的perplexity。

5.4 LOGICAL INFERENCE

我们还分析了该模型在Bowman等人(2015)描述的逻辑推理任务上的性能。该任务基于一种包含六个单词和三个逻辑操作的词汇表的语言,or、and、not。描述两句之间关系的逻辑关系有七种相互排斥的关系:两种类型的蕴涵关系、等价关系、穷尽矛盾和非穷尽矛盾以及两种类型的语义独立性。与自然语言推理任务类似,这个逻辑推理任务要求模型预测给定一对句子的正确标签。训练/测试分割如原始codebase3中描述的那样,并留出10%的训练集作为验证集。

我们在这个数据集上评估了on-LSTM和标准LSTM。给定一对句子(s_1, s_2),我们将这两个句子都输入一个RNN编码器,以最后一个隐藏状态(h_1, h_2)作为句子嵌入。(h1, h2, h1\odot h2, abs(h1 - h2))的串联作为多层分类器的输入,给出了7个标签上的概率分布。在我们的实验中,RNN模型在一个隐层中参数化400个单元,输入嵌入大小为128。在不同层之间应用0.2的dropout。这两种模型都是针对包含6个或更少逻辑操作的序列进行训练的,并在最多包含12个操作的序列上进行测试。

图3显示了on-LSTM和标准LSTM在逻辑推理任务上的性能。两种模型对短序列(≤3)的精度均接近100%,而on-lstm在长度大于3的序列上的性能更好。在训练中不存在的较长序列(≥7)上,性能差距继续增大。因此,与标准LSTM模型相比,ON-LSTM模型在面对不同长度的结构化数据时具有更好的泛化性能。树结构模型由于具有ground truth结构作为输入,可以在该数据集上获得较强的性能(Bowman et al., 2015)。相同复合函数的递归应用程序非常适合这项任务。我们还包括RRNet (Jacob et al., 2018)的结果,它可以从下游任务感应潜在的树结构。注意,结果可能不具有可比性,因为没有提供用于训练的超参数。

6 CONCLUSION

本文提出了一种新的递归神经网络感应偏压——有序神经元。基于这一思想,我们提出了一种新的循环单元on-lstm,它包括一个新的门控机制和一个新的激活函数cumax(·)。这使得递归神经网络更接近于执行树状组合操作,通过将包含长期和短期信息的隐藏状态神经元分开分配。模型在无监督区域解析上的性能表明,on-lstm以一种与人类专家注释相一致的方式引入了自然语言的潜在结构。感应偏压还使on - lstm能够在语言建模、长期依赖和逻辑推理任务上获得良好的性能。

二、解析

1 回顾

通过前面的译文我们知道作者介绍了一种LSTM的变种:ON-LSTM,其中ON表示“Ordered Neurons”,即为有序神经元,也就是这个变种中的神经元是经过排序的,作者认为这样做可以表达更加丰富的信息。

对于基础的LSTM我们知道其可由下面几个公式描述:

                                                                  f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)                                                   (16)

                                                                    i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)                                                    (17)

                                                                   o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)                                                   (18)

                                                                  \widetilde{c}_t = tanh(W_c x_t + U_c h_{t-1} + b_c)                                               (19)

                                                                        c_t = f_t \odot c_{t-1} + i_t \odot \widetilde{c}_t                                                       (20)

                                                                             h_t = o_t \odot tanh(c_t)                                                          (21)

其中,f_t,i_t, o_t分别是遗忘门、输入门、输出门,具体情况这里不再细说,有了门之后就可以整合生成当前时间的c_th_t。基础LSTM模型可以用下图表示:

论文:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks_第1张图片 基本LSTM模型

 在常见的神经网络中,神经元通常是无序的,比如遗忘门f_t是一个向量,向量的各个元素的位置没有什么规律。如果把LSTM运算过程中涉及到的所有向量的位置按照同一方式重新打乱,权重的顺序也相应地打乱,然后输出结果可以只是原来向量的重新排序(考虑多层的情况下,甚至可以完全不变),信息量不变,不影响后续网络对它的使用。

换言之,LSTM以及普通的神经网络都没有用到神经元的序信息,ON-LSTM则试图把这些神经元排个序,并且用这个序来表示一些特定的结构,从而把神经元的序信息利用起来。

2 自然语言和序列信息

ON-LSTM的思考对象是自然语言。一个自然句子通常能表示为一些层级结构,这些结构如果人为地抽象出来,就是我们所说的语法信息,而ON-LSTM希望能够模型在训练的过程中自然地学习到这种层级结构,并且训练完成后还能把它解析出来(可视化),这就利用到了前面说的神经元的序信息。

为了达到这个目标,我们需要有一个层级的概念,层级越低代表语言中颗粒度越小的结构,而层级越高则代表颗粒度越粗的结构,比如在中文句子中,“字”可以认为是最低层级的结构,词次之,再上面是词组、短语等。层级越高,颗粒度越粗,那么它在句子中的跨度就越大。

论文:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks_第2张图片

3 ON-LSTM基础思想

"层级越高,颗粒度越粗,那么它在句子中的跨度就越大"是ON-LSTM的设计指导思想。首先,这要求我们在设计ON-LSTM的编码时能区分高低层级的信息;其次,这也告诉我们,高层级的信息意味着它要在高层级对应的编码区间保留更久(不那么容易被遗忘门过滤掉),而低层级的信息则意味着它在对应的区间更容易被遗忘。

按照上面的指导思想,假设ON-LSTM中的神经元都是排序好的,向量c_t中index越小的元素,表示层级越低的信息,index越大的元素表示层级越高的信息,ON-LSTM的门结构和输出结构与基本LSTM相同,如(16),(17),(18),(19),(21)所示。不同之处在\widetilde{c}_tc_t的更新机制不同。

接下来,初始化一个全零的c_t,即没有任何记忆,或者想象为一个空的U盘。然后,我们将历史信息和当前输入按一定规律存入到c_tt中(即更新c_t)。每次在更新c_t之前,首先预测两个整数d_fd_i,分别表示历史信息h_{t-1}和当前输入x_t的层级:

                                                                              d_f=F_1(x_t,h_{t-1})                                                             (22)

                                                                               d_i=F_2(x_t,h_{t-1})                                                             (23)

至于F_1F_2的具体结构,我们后面再补充,先把核心思路讲清楚。有了d_fd_i之后,那么有两种可能:

1、d_f \leq d_i,这意味着当前输入x_t的层级要高于历史记录h_{t-1}的层级,那就是说,两者之间的信息流有交汇,当前输入信息要整合到高于等于d_f的层级中,方法是:

                                                   c_t = \begin{pmatrix} \widehat{c}_{t,<d_f}\\ f_{t, [d_f:d_i]} \odot c_{t-1,[d_f:d_i]} + i_{t,[d_f:d_i]} \odot \widehat{c}_{t, [d_f:d_i]} \\ c_{t-1,>d_i} \end{pmatrix}                                    (24)

这个公式是说,由于当前输入层级更高,它影响到了交集[d_f:d_i]的部分,这部分由普通的LSTM更新公式来更新,小于d_f的部分,直接覆盖为当前输入\widehat{c}_t对应的部分,大于d_i的部分,保持历史记录c_{t-1}对应的部分不变。

这个更新公式是符合直觉的,因为我们已经将神经元排好序了,位置越前的神经元储存越低层结构信息。而对于当前输入来说,显然更容易影响低层信息,所以当前输入的“波及”范围是[0:d_i](自下而上),也可以理解为当前输入所需要的储蓄空间就是[0:d_i];而对于历史记录来说,它保留的是高层信息,所以“波及”范围是[d_f:d_{max}]自上而下,d_{max}是最高层级),或许说历史信息所需要的储蓄空间是[d_f:d_{max}]。在不相交部分,它们“各自为政”,各自保留自己的信息;在相交部分,信息要进行融合,退化为普通的LSTM。

论文:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks_第3张图片 ON-LSTM设计图。主要想法是将LSTM的神经元排序,然后分段更新。

 

2、d_f > d_i,这意味着历史记录h_{t-1}和当前输入x_t互不相交,那么对于[d_i:d_f]的区间“无人问津”,所以只好保持初始状态(即全零,可以理解为没有东西写入);而剩下部分,当前输入直接把自己的信息写入到[0:d_i]区间,而历史信息直接写入到[d_f:d_{max}]区间。这种情况下,当前输入和历史信息合并起来都不能占满整个储蓄空间,从而空下了一些剩余容易(中间那部分全零):

                                                                               c_t=\begin{pmatrix} \widehat{c}_{t, \leq d_i} \\ 0_{(d_i:d_f)} \\ c_{t-1, \geq d_f} \end{pmatrix}                                                              (25)

 

其中(d_f:d_i)表示大于d_i、小于d_f的区间;而前面的[d_i:d_f]表示大于等于d_i、小于等于d_f的区间。

至此,我们能够理解ON-LSTM的基本原理了,它将神经元排序之后,通过位置的前后来表示信息层级的高低,然后在更新神经元时,先分别预测历史的层级d_f和输入的层级d_i,通过这两个层级来对神经元实行分区间更新。

论文:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks_第4张图片 ON-LSTM分区间更新图示。图上数字都是随机生成的,最上为历史信息,最下为当前输入,中间为当前整合的输出。最上方黄色部分为历史信息层级(主遗忘门),最下方绿色部分为输入信息层级(主输入门),中间部分黄色则是直接复制的历史信息,绿色则是直接复制的输入信息,紫色是按照LSTM方式融合的交集信息,白色是互不相关的“空白地带”。从历史信息(最上层黄色部分)的复制传递中,我们就可以析出对应的如右图的层次结构(注意右图的层次结构与作图的过程不是精确对应的,仅作粗略示意,读者应侧重对图像与模型的直观感知而不是细抠对应关系)。

这样一来,高层信息就可能保留相当长的距离(因为高层直接复制历史信息,导致历史信息可能不断被复制而不改变),而低层信息在每一步输入时都可能被更新(因为低层直接复制输入,而输入是不断改变的),所以就通过信息分级来嵌入了层级结构。更通俗地说就是分组更新,更高的组信息传得更远(跨度更大),更低的组跨度更小,这些不同的跨度就形成了输入序列的层级结构。

(请反复阅读这段话,必要时对照上图,直接完全理解为止,这段话称得上是ON-LSTM的设计总纲。)

4  ON-LSTM建模

1)分段softmax

由3中我们可以知道,模型中的d_id_f的预测是关键,很多能够输出整数的函数是不可导的,无法进行反向传播,这里选择“soft”方案,为了进行“soft”,引入记号1_k,表示第k个位置为1,其余位置为0的d_{max}维向量,(24),(25)可以改写为:

                                                                  \widetilde{f}_t = \overrightarrow{cumsum}(1_{d_f}),\ \widetilde{i}_t = \overleftarrow{cumsum}(1_{d_i})                                           (26)

                                                                                    w_t = \widetilde{f}_t \odot \widetilde{i}_t(表示交集)                                                  (27)

                                            c_t = w_t \odot(f_t \odot c_{t-1} + i_t \odot \widehat{c}_t) + (\widetilde{f}_t - w_t) \odot c_{t-1} + (\widetilde{i}_t-w_t) \odot \widehat{c}_t                     (28)

其中:

                                                     \overrightarrow{cumsum}([x_1, ...,x_n]) = [x_1, x_1+x_2, ..., x_1+x_2+...+x_n]                        (29)

                                                     \overleftarrow{cumsum}([x_1, ...,x_n]) = [x_1+x_2+...+x_n, ...,x_1+x_2, x_1]                        (30)

w_t \odot(f_t \odot c_{t-1} + i_t \odot \widehat{c}_t)表示交集部分,(\widetilde{f}_t - w_t) \odot c_{t-1}表示大于max(d_f,d_i)的部分,(\widetilde{i}_t-w_t) \odot \widehat{c}_t表示小于min(d_f,d_i)的部分。

注意,这里指的是(28)所给出的结果,跟(24),(25)分情况给出的结果,是完全等价的。这只需要留意到\widetilde{f}_t给出了一个从d_f位开始后面全是1、其他位全是0的d_{max}维向量,而\widetilde{i}_t给出了一个从0到d_i位全是1、其他位全是0的d_{max}维向量,那么w_t = \widetilde{f}_t \odot \widetilde{i}_t正好给出了交集部分为1、其余全是0的向量(如果没有交集,那就是全0向量),所以w_t \odot(f_t \odot c_{t-1} + i_t \odot \widehat{c}_t)这部分就是在处理交集部分;而\widetilde{f}_t - w_t得到一个从max(d_f,d_i)位开始后面全是1、其他位全是0的d_{max}维向量,正好标记了历史信息的范围[d_f, d_{max}]去掉了交集之后的部分;而\widetilde{i}_t-w_t得到一个从0 \sim min(d_f, d_i)位全是1、其他位全是0的d_{max}维向量,正好标记了当前输入的范围[0, d_i]去掉了交集之后的部分。

现在,c_t的更新公式由式(28)来描述,两个one hot向量1_{d_f}, 1_{d_i}由两个整数d_fd_i决定,而这两个整数本身是由模型F_1F_2预测出来的,所以我们可以干脆直接用模型预测1_{d_f}, 1_{d_i}就是了。当然,就算预测出来两个one hot向量,也没有改变整个更新过程不可导的事实。但是,我们可以考虑将1_{d_f}, 1_{d_i}用一般的浮点数向量来代替,比如:

                                                            1_{d_f}\approx softmax(W_{\widetilde{f}}x_t + U_{\widetilde{f}}h_{t-1}+b_{\widetilde{f}})                                                (31)

                                                             1_{d_i}\approx softmax(W_{\widetilde{i}}x_t + U_{\widetilde{i}}h_{t-1}+b_{\widetilde{i}})                                                  (32)

这样一来,我们用一个h_{t-1}x_t的全连接层,来预测两个向量并且做softmax,就可以作为1_{d_f}, 1_{d_i}的近似,并且它是完全可导的,从而我们将它们取代1_{d_f}, 1_{d_i}代入到(28)中,就得到ON-LSTM中主门公式:

                                                   \widetilde{f}_t = \overrightarrow{cumsum}(softmax(W_{\widetilde{f}}x_t + U_{\widetilde{f}}h_{t-1} + b_{\widetilde{f}}))                                        (33)

                                                   \widetilde{i}_t = \overleftarrow{cumsum}(softmax(W_{\widetilde{i}}x_t + U_{\widetilde{i}}h_{t-1} + b_{\widetilde{i}}))                                          (34)

c_t的更新公式由式(28)来描述。将式(16)(17)(18)(19)(33)(34)(27)(28)(21)组合起来就是ON-LSTM的整个更新公式。示意图如下:

论文:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks_第5张图片 ON-LSTM运算流程示意图。主要是将分段函数用cumax光滑化变成可导。

 

5 实现

作者实现:https://github.com/yikangshen/Ordered-Neurons

Reference:

https://arxiv.org/abs/1810.09536?context=cs

https://spaces.ac.cn/archives/6621

你可能感兴趣的:(NLP,深度学习)