ICML 2017,大体思路:卷积+一个线性门控单元,替代了传统的RNN进行language modeling,后来的Facebook将这个用于机器翻译,提出了卷积版的seq2seq模型。原文链接:Language Modeling with Gated Convolutional Networks
摘要
当前流行的语言建模模型是基于RNN的。在这类任务上的成功经常和他们捕捉unbound context有关。这篇文章中我们提出了一个通过堆叠convolutions的finite context方法,卷积可以变得更有效因为他们可以在序列上并行。我们提出了一个新型的简单的门控机制,这个门控机制表现的要比Oord et al.(2016b)要好,我们也探究了关键架构决策的影响。我们提出的方法在WikiText-103上达到了最好的效果,even though it features long-term dependencies,在Google Billion Words上也达到了最好的效果。Our model reduces the latency to score a sentece by an order of magnitude compared to a recurrent baseline. 据我们所知,这是在大规模语言任务上第一次一个非循环结构的方法超越了强有力的循环模型。
引言
$$P(w\_0, ..., w\_N) = P(w\_0)\prod^N\_{i=1}P(w\_i \mid w\_0, ..., w\_{i-1})$$其中$w_i$是单词表中的单词下标。语言模型对语音识别(Yu & Deng, 2014)和机器翻译(Koehn, 2010)来说是很重要的一部分。 最近,神经网络(Bengio et al., 2014; Mikolov et al., 2010; Jozefowicz et al., 2016)已经展示出了比传统n-gram模型(Kneser & Ney, 1995; Chen & Goodman, 1996)更好的语言模型。这些传统模型不能解决数据稀疏的问题,这个问题导致这些方法很难对大量的上下文进行表示,因此也不能回长范围的依赖进行表示。神经语言模型通过在连续空间中对词的嵌入解决了这个问题。当前最好的语言模型是基于LSTM(Hochreiter et al., 1997)的模型,LSTM理论上可以对任意长度的依赖进行建模。 在这篇文章中,我们引入了新的门控卷积网络,并且用它进行语言建模。卷积网络可以被堆叠起来来表示大量的上下文并且在越来越长的有着抽象特征(LeCun & Bengio, 1995)的上下文中提取层次特征。这使得这些模型可以通过上下文为$N$,卷积核宽度为$k$,$O(\frac{N}{k})$的操作对长时间的依赖关系进行建模。相反,循环网络将输入看作是一个链式结构,因此需要一个线性时间$O(N)$的操作。 层次的分析输入与传统的语法分析相似,传统的语法分析建立粒度增加的语法树结构,比如,包含名词短语和动词短语的句子,短语中又包含了更内在的结构(Manning & Schutze, 1999; Steedman, 2002)。层次结构也会让学习变得更简单,因为对于一个给定的上下文大小,相比链式结构,非线性单元的数量会减少,因此减轻了梯度消失的问题(Glorot & Bengio, 2010)。 现代的硬件对高度并行的模型支持的很好。在循环神经网络中,下一个输出依赖于之前的隐藏状态,而之前的隐藏状态在序列中元素上是不能并行的。然而,卷积神经网络对这个计算流程支持的很好因为卷积是可以在输入元素上同时进行的。 对于RNN来说想要达到很好的效果(Jozefowicz et al., 2016),门的作用很重要。我们的门控线性单元为深层的结构对梯度提供了一条线性的通道,同时又保留了非线性的特性,减少了梯度消失的现象。 我们展示了门控卷积网络比其他的已经发表的语言模型都要好,比如在Google Billion Word Benchmark(Chelba et al., 2013)上的LSTM。我们也评估了我们的模型在处理长范围依赖关系WikiText-103上的能力,在这个数据集上,模型是以段落为条件进行输入的,而不是一个句子,我们在这个数据集(Merity et al., 2016)上获得了最好的效果。最后,我们展示了门控线性单元获得了更好的精度以及相比于Oord et al., 2016的LSTM门收敛的更快。
方法
$$h\_l(X) = (X \ast W + b) \otimes \sigma(X \ast V + c)$$其中,$m$,$n$分别是输入和输出的feature map的数量,$k$是patch size,$X \in \mathbb{R}^{N \times m}$是层$h_l$的输入(要么是词嵌入,要么是前一层的输出),$W \in \mathbb{R}^{k \times m \times n}$,$b \in \mathbb{R}^n$,$V \in \mathbb{R}^{k \times m \times n}$,$c \in \mathbb{R}^n$是学习到的参数,$\sigma$是sigmoid function,$\otimes$是矩阵间的element-wise product。 当卷积输入时,我们注意$h_i$不包含未来单词的信息。我们通过移动卷积输入来防止卷积核看到未来的上下文(Oord et al., 2016a)来解决这个问题。特别地,我们在序列的开始加入了$k-1$宽度的0作为padding补全,假设第一个输入的元素是序列的开始元素,起始的标记我们是不预测的,$k$是卷积核的宽度。 每层的输出是一个线性变换$X \ast W + b$通过门$\sigma(X \ast W + b)$调节。与LSTM相似的是,这些门乘以矩阵的每个元素$X \ast W + b$,并且以层次的形式控制信息的通过。我们称这种门控机制为Gated Linear Units(GLU)。通过在输入$E$上堆叠多个这样的层,可以得到每个词$H = h_L \circ … \circ h_0(E)$的上下文表示。我们将卷积和门控线性单元放在了一个preactivation residual block,这个块将输入与输出相加(He et al., 2015a)。这个块有个bottleneck结构,可以使计算更高效并且每个块有5层。 获得模型预测结果最简单的是使用softmax层,但是这个选择对于语料库很大和近似来说一般计算起来很慢,像noise contrastive estimation(Gutmann & Hyvarinen)或层次softmax(Morin & Bengio, 2005)一般更常用。我们选了后者的改良版adaptive softmax,这个算法将higher capacity分配给出现频率更高的单词,lower capacity分配给频率低的单词(Grave et al., 2016a)。这使得在训练和测试的时候内存占用更少且计算速度更快。
门控机制
$$\nabla[tanh(X) \otimes \sigma(X)]=tanh'(X) \nabla X \otimes \sigma(X) + \sigma'(X) \nabla X \otimes tanh(X)$$$$\nabla [X \otimes \sigma(X)] = \nabla X \otimes \sigma(X) + X \otimes \sigma'(X) \nabla X$$有一条路径$\nabla X \otimes \sigma(X)$对于在$\sigma(X)$中的激活的门控单元没有减小的因数。这可以被理解为一个跳过乘法的连接帮助梯度传播过这些层。我们通过实验比较了不同的门策略后发现门控线性单元可以收敛地更快且困惑度的值更好。