Convolutional Sequence to Sequence Learning翻译

摘要

序列到序列学习的流行方法是通过循环神经网络将输入序列映射到可变长度的输出序列。我们介绍了一种完全基于卷积神经网络的架构。与循环模型相比,在训练过程中所有元素的计算都可以完全并行化,从而更好地利用GPU硬件,由于非线性单元的数目是固定的并且与输入长度无关,因此更容易优化。我们使用门控线性单元简化了梯度传播,并且为每个解码器层配备了单独的注意力模块。我们同时在GPU和CPU的WMT’14的英语-德语和WMT’14的英语-法语翻译上优于Wu et al的深度LSTM模型的准确性。

1.介绍

序列到序列的学习在许多任务中都取得了成功,例如机器翻译,语音识别和文本摘要。迄今为止,最主要的方法是使用一系列双向循环神经网络(RNN)对输入序列进行编码,并与另一组解码器RNN生成可变长度输出,这两个解码器RNN均通过软注意力机制进行对接。在机器翻译中,已证明该体系结构大大优于传统的基于短语的模型。
  卷积神经网络尽管有许多优点,但在序列建模中却很少见。与循环层相比,卷积创建固定大小上下文的表示,但是,通过在彼此之上堆叠几层,可以轻松地使网络的有效上下文大小变大。这允许精确控制要建模的依赖项的最大长度。卷积网络不依赖于前一时刻的计算,因此允许在序列中的每个元素上并行化。这与RNN保持整个过去的隐藏状态相反,该状态阻止了序列中的并行计算。
  多层卷积神经网络在输入序列上创建分层表示,其中附近的输入元素在较低的层进行交互,而遥远的元素在较高的层进行交互。与循环网络建模的链式结构相比,分层结构提供了通过较短路径捕获远距离依赖关系的能力。对于获得在n个单词的窗口内捕获关系的特征表示,我们可以通过使用宽度为 k k 的卷积核进行 O ( n k ) O(\frac{n}{k}) 卷积运算,然而对于循环神经网络需要进行 O ( n ) O(n) 次运算。卷积网络的输入通过恒定数量的卷积核和非线性映射,而循环网络对第一个单词最多应用 n n 次运算和非线性映射,而对最后一个单词仅应用一次运算。固定应用于输入的非线性数也可以简化学习。
  最近的工作已经将卷积神经网络应用于序列建模,例如Bradbury等,他们介绍了一系列卷积层之间的循环池化或Kalchbrenner等人研究没有注意力机制的神经翻译。但是,在大型基准数据集上,这些方法都没有表现出优于现有结果的改进。门控卷积先前已由Meng等人探索用于机器翻译,但他们的评估仅限于一个小型数据集,并且该模型与传统的基于计数的模型一起使用。部分卷积的架构在较大的任务上表现出出色的性能,但其解码器仍然是循环网络。
  在本文中,我们提出了一种全卷积的序列到序列建模架构。我们的模型配备了门控线性单元和残差连接。我们还在每个解码器层使用注意力,并证明每个注意力层仅增加了可忽略的开销。这些选择的组合使我们能够解决大规模问题(第3节)。
  我们在几个大型数据集上以机器翻译和文本摘要任务评估我们的方法,并与文献中报告的当前最好体系结构进行比较。在WMT’16的英语-罗马尼亚语翻译中,我们达到了一个新的水平,比之前的最佳成绩高1.9 BLEU。在WMT’14的英语-德文中,我们比Wu等人强大的LSTM模型高了0.5 BLEU,并在WMT’14 英语-法语的表现优于Wu等人的似然训练系统,提升了1.6 BLEU。此外,对于未训练过的句子,我们的模型可以在GPU和CPU硬件上实现比Wu等人更快地翻译(第4节,第5节)。

2.基于循环的序列到序列学习

序列到序列建模已成为基于循环神经网络的编码器-解码器架构的同义词。(1)编码器RNN处理输入序列 x = ( x 1 , . . . , x m ) \pmb x=(x_1,...,x_m) 中的m个元素,并返回状态表示 z = ( z 1 , . . . . , z m ) \pmb z=(z_1,....,z_m) 。(2)解码器RNN根据 z \pmb z 产生从左到右的输出序列 y = ( y 1 , . . . , y n ) \pmb y=(y_1,...,y_n) ,一次一个元素。为了产生输出 y i + 1 y_{i+1} ,解码器基于上一状态 h i h_i ,上一目标语言单词 y i y_i 的嵌入 g i g_i 以及根据编码器输出 z \pmb z 得到的条件输入 c i c_i ,计算新的隐藏状态 h i + 1 h_{i+1} 。基于该通用公式,提出了各种编码器-解码器体系结构,其主要区别在于条件输入和RNN的类型。
  (1)不加注意力的模型通过为所有 i i 设置 c i = z m c_i=z_m 来仅考虑最终的编码器状态 z m z_m ,或者简单地用 z m z_m 初始化第一时刻的解码器状态,在这种情况下 c i c_i 为是恒定的。(2)具有注意力机制的架构将每个时刻的 c i c_i 作为 ( z 1 , . . . , z m ) (z_1,... ,z_m) 的加权总和。其中权重称为注意力得分,它使网络在生成输出序列时将注意力集中在输入序列的不同部分。 注意力分数是通过将每个编码器状态 z j z_j 与先前的解码器状态 h i h_i 和最后的预测 y i y_i 的组合进行基本比较来计算的;结果归一化为输入元素上的概率分布。
  在编码器-解码器模型中,循环网络的流行选择是长短期记忆网络(LSTM)和门控循环单元(GRU)。两者都通过门控机制扩展了Elman RNN,该机制允许记忆先前时刻中的信息,以便对长距离依赖性进行建模。最近的方法还依赖于双向编码器来构建过去和未来的上下文表示。具有多层的模型通常依赖于捷径或残差连接。

3.基于卷积的序列到序列结构

在这里插入图片描述
  接下来,我们介绍一种用于序列到序列建模的全卷积架构,从而代替RNN计算中间编码器状态 z \pmb z 和解码器状态 h \pmb h

3.1 位置嵌入

首先,我们将输入元素 x = ( x 1 , . . . , x m ) \pmb x=(x_1,...,x_m) 作为 w = ( w 1 , . . . , w m ) \pmb w=(w_1,...,w_m) 嵌入向量空间中,其中 w j R f w_j∈\mathbb R^f 是嵌入矩阵 D R V × f \mathcal D∈\mathbb R^{V×f} 中的一列。我们还通过嵌入输入元素的绝对位置编码 p = ( p 1 , . . . , p m ) \pmb p=(p_1,...,p_m) 为模型添加了序列表示,其中 p j R f p_j∈\mathbb R^f 。将两者组合以获得最终的输入元素表示 e = ( w 1 + p 1 , . . . , w m + p m ) \pmb e=(w_1+p_1,...,w_m+p_m) 我们对解码器网络已经生成的输出元素进行类似的处理,以产生输出元素表示,这些表示将反馈到解码器网络 g = ( g 1 , . . . , g n ) \pmb g=(g_1,...,g_n) 。位置嵌入在我们的体系结构中很有用,因为它们使我们的模型了解当前正在处理输入或输出中序列的哪一部分(第5.4节)。

3.2 卷积块结构

编码器和解码器网络都共享一个简单的块结构,该结构基于固定数量的输入元素来计算中间状态。对于解码器网络,我们将第 l l 个块的输出表示为 h l = ( h 1 l , . . , h n l ) \pmb h^l=(h^l_1,..,h^l_n) 对于编码器网络,我们将其表示为 z l = ( z 1 l , . . . , z m l ) \pmb z^l=(z^l_1,...,z^l_m) ;我们可以互换地使用块和层。每个块包含一维卷积,然后是非线性变换。对于具有单个块且内核宽度为 k k 的解码器网络,每个结果状态 h i 1 h^1_i 包含有 k k 个输入元素信息的融合表示。将几个块彼此堆叠会增加以某种状态表示的输入元素的数量。例如,堆叠6个 k = 5 k=5 的块会导致输入字段为25个元素,即每个输出取决于25个输入。非线性变换允许网络利用整个输入字段,或者在需要时集中于较少的元素。
  每个卷积核被参数化为 W R 2 d × k d W∈\mathbb R^{2d×kd} b w R 2 d b_w∈\mathbb R^{2d} ,并以 X R k × d X∈\mathbb R^{k×d} 作为输入,其是嵌入在 d d 维中的 k k 个输入元素的串联,并将它们映射到单个输出元素 Y R 2 d Y∈\mathbb R^{2d} ,后者具有两倍输入元素的尺寸;随后的层在前一层的 k k 个输出元素上运行。我们选择门控线性单元(GLU)作为非线性变换,它们对卷积 Y = [ A   B ] R 2 d Y=[A~B]∈\mathbb R^{2d} 的输出实施简单的门控机制:
v ( [ A   B ] ) = A σ ( B ) v([A~B])=A\otimes \sigma (B)
其中 A , B R d A,B∈\mathbb R^d 是非线性的输入, 是逐点乘法,输出 v ( [ A   B ] ) R d v([A~B])∈\mathbb R^d Y Y 大小的一半。门 σ ( B ) σ(B) 控制当前上下文的哪些输入与A是相关的。Oord等人也引入了类似的非线性,其将tanh应用于A,但Dauphin等人表明,GLU在语言建模的情况下表现更好
h i l = v ( W l [ h i k / 2 l 1 , . . . , h i + k / 2 l 1 ] + b w l ) + h i l 1 h^l_i=v(W^l[h^{l-1}_{i-k/2},...,h^{l-1}_{i+k/2}]+b^l_w)+h^{l-1}_i
  对于编码器网络,我们通过在每层上填充输入来确保卷积层的输出与输入长度匹配。但是,对于解码器网络,我们必须注意,解码器没有将来可用的信息。具体来说,我们在输入的左侧和右侧分别用零个向量填充 k 1 k−1 个元素,然后从卷积输出的末尾删除 k k 个元素。
  我们还添加了线性映射以在嵌入大小 f f 和大小为 2 d 2d 的卷积输出之间进行投影。我们将这样的变换应用于w,当将嵌入内容馈送到编码器网络、编码器输出 z j u z^u_j 、在softmax h L \pmb h^L 之前的解码器的最后一层以及计算注意力得分(1)之前的所有解码器层 h l \pmb h^l 时。

3.3 多步注意力

我们为每个解码器层引入了一种单独的注意力机制。为了计算注意力,我们将当前的解码器状态 h i l h^l_i 与上一状态目标元素 g i g_i 的嵌入结合起来:
d i l = W d l h i l + b d l + g i (1) d^l_i=W^l_dh^l_i+b^l_d+g_i\tag{1}
  对于解码器层 l l ,状态 i i 和源元素 j j 的注意力 a i j l a^l_{ij} 被计算为解码器状态摘要 d i l d^l_i 与最后一个编码器块 u u 的每个输出 z j u z^u_j 之间的点积:
a i j l = e x p ( d i l z j u ) t = 1 m e x p ( d i l z t u ) a^l_{ij}=\frac{exp(d^l_i\cdot z^u_j)}{\sum^m_{t=1}exp(d^l_i\cdot z^u_t)}
  当前解码器层的条件输入 c i l c^l_i 是编码器输出以及输入元素嵌入 e j e_j 的加权总和(图1中右侧):
c i l = j = 1 m a i j l ( z j u + e j ) (2) c^l_i=\sum^m_{j=1}a^l_{ij}(z^u_j+e_j)\tag{2}
  这与仅计算 z j u z^u_j 的注意力和加权总和的循环网络方法略有不同。我们发现添加 e j e_j 是有益的,它类似于键值记忆网络,其中键是 z j u z^u_j ,值是 z j u + e j z^u_j+e_j 。编码器输出 z j u z^u_j 提供潜在的输入元素的上下文信息,并且 e j e_j 提供有关特定输入元素的点信息,这在进行预测时很有用。一旦计算出 c i l c^l_i ,就将其简单地添加到相应解码器层 h i l h^l_i 的输出中。
  与单步注意相比,这可以看作是具有多个“跳跃”的注意力。特别地,第一层的注意力确定了有用的源上下文,然后将其馈送到第二层,在计算其余注意力时,该上下文将考虑此信息。解码器还可以随时访问上层前 k 1 k-1 个时刻的注意力,这是因为条件输入 c i k l 1 , . . . , c i l 1 c^{l-1}_{i-k},... ,c^{l-1}_{i} 作为 h i k l 1 , . . . , h i l 1 h^{l-1}_{i-k},...,h^{l-1}_{i} 的一部分输入到 h i l h^l_i 中。与循环网络中的信息需要经过多次非线性变换相比,该模型更容易考虑模型已经考虑了哪些先前的输入。总体而言,我们的注意力机制会考虑我们之前曾关注过的单词,并在每个时刻执行多次注意力“跳跃”。在附录§C中,我们绘制了深度解码器的注意力得分,并表明在不同的层上要关注源的不同部分。
  与RNN相比,我们的卷积结构还允许将注意力计算分配到序列的所有元素上(图1中间)。我们分别批处理每个解码器层的计算。

3.4 归一化策略

我们通过权重初始化(第3.5节)和扩展网络的各个部分来稳定学习,以确保整个网络的方差不会发生显着变化。特别是,我们缩放了残差块的输出,并关注抑制激活的方差。 我们将残差块的输入和输出的总和乘以 0.5 \sqrt{0.5} ,以将总和的方差减半。这假定两个被加数具有相同的方差,这并不总是正确的,但实际上是有效的。
  注意力产生的条件输入 c i l c^l_i m m 个向量的加权和,如公式(2)所示,我们通过按 m 1 / m m\sqrt{1/m} 缩放来抵消方差的变化;我们将乘以 m m 来放大输入,使其达到原始大小,这假设了注意力得分是均匀分布的。通常情况并非如此,但我们发现它在实践中效果很好。
  对于具有多次注意力的卷积解码器,我们通过使用注意力机制的数量来缩放编码器层的梯度。我们排除源词嵌入。我们发现这可以稳定学习,因为否则编码器接收的梯度太大。

3.5 参数初始化

当添加不同层的输出时应用归一化激活,例如残差连接,需要仔细考虑权重初始化。我们进行初始化的动机与进行标准化的动机相同:在整个前向计算和反向传播过程中抑制激活的方差。所有嵌入均从均值0和标准差0.1的正态分布初始化。对于其输出未直接带入门控线性单元的层,我们以 N ( 0 , 1 / n l ) \mathcal N(0,\sqrt{1/n_l}) 初始化权重,其中 n l n_l 是与每个神经元的输入连接数。这样可以确保保持正态分布输入的方差。
  对于紧随GLU激活的层,我们提出了一种权重初始化方案,方法是改编自(He et al., 2015b; Glorot & Bengio, 2010;附录A)。如果GLU输入以均值为0分布并且具有足够小的方差,则我们可以用输入方差的1/4近似输出方差(附录A.1)。 因此,我们初始化权重,以使GLU激活的输入具有层输入方差的4倍。 这是通过从 N ( 0 , 4 / n l ) N(0,\sqrt{4/n_l}) 提取其初始值来实现的。构建网络时,偏差始终设置为零。
  我们将dropout应用于某些层的输入,以便以 p p 的概率保留输入。这可以看成是伯努利随机变量的乘积,以概率为 p p 取原值的 1 / p 1/p ,,否则为0。dropout的应用将导致方差按 1 / p 1/p 缩放。我们旨在通过初始化具有较大权重的各个层来恢复传入的方差。具体来说,对于输出要服从GLU的层,我们使用 N ( 0 , 4 p / n l ) N(0,\sqrt{4p/n_l}) ,否则使用 N ( 0 , p / n l ) N(0,\sqrt{p/n_l}) (附录A.3)。

4.实验设置

4.1 数据集

我们考虑了三个主要的WMT翻译任务以及一个文本摘要任务。
  (1)WMT’16 English-Romanian
  我们使用与Sennrich等人相同的数据和预处理方式,但删除超过175个单词的句子。这样就产生了280万个句子对进行训练,我们在newstest2016上进行了评估。我们使用200K类型的源词汇和80K类型的目标词汇对基于单词的模型进行实验。我们还考虑了40K类型的联合源和目标字节对编码(BPE)。
  (2)WMT’14 English-German
  我们使用与Luong等人相同的设置,这包含450万个句子对进行训练,我们在newstest2014.3上进行测试。作为词汇,我们使用基于BPE的40K子词类型。
  (3)WMT’14 English-French
  我们使用完整的训练集(3600万个句子对),删除超过175个单词的句子以及源/目标长度比超过1.5的句子对。样就产生了3550万个句子对用于训练。结果报告在newstest2014上。我们使用具有40K BPE类型的源词汇和目标词汇。
  在所有设置中,训练数据的一小部分用作验证集(每个数据集约0.5-1%),用于早期停止和学习率退火。
  (4)Abstractive summarization
  我们对Gigaword语料库进行了训练,并与Rush等进行了相同的预处理,这产生了380万个训练数据,其中有190K用于验证。我们评估了包含500个文章标题对的DUC-2004测试数据,并报告了基于召回的ROUGE的三种变体,即ROUGE-1(一元组合),ROUGE-2 (二元组)和ROUGE-L(最长公共子串)。我们还评估了2000对Gigaword测试集,该测试集与Rush等人使用的测试集相同,我们报告了F1 ROUGE与以前的工作类似。 类似于Shen等人,我们使用3万个单词的来源和目标词汇,要求输出至少14个单词。

4.2 模型参数及优化

除非另有说明,否则我们将512个隐藏单元用于编码器和解码器。所有嵌入(包括解码器在最终线性层之前产生的输出)的维数为512;我们对隐藏和嵌入尺寸之间的线性层映射使用相同的尺寸(第3.2节)。
  我们使用Nesterov的加速梯度法训练了卷积模型,并使用动量值为0.99,如果其范数超过0.1,则对梯度进行了归一化。我们使用0.25的学习率,一旦验证困惑性停止改善,我们将在每个epoch后将学习率降低一个数量级,直到其降至 1 0 4 10^{-4} 以下。
  除非另有说明,否则我们将使用batch size为64个句子。我们限制了mini-batch中的最大单词数,以确保带有长句子的批处理仍适合GPU内存。如果超过阈值,我们将简单地拆分批次,直到达到阈值,然后分别处理各部分。通过每个mini-batch的非填充字符数对梯度进行标准化。除查找表外,我们还对所有层使用权重归一化。
  除了嵌入和解码器输出上的dropout外,我们还将dropout应用于卷积块的输入 所有模型均在Torch中实现,并在单个Nvidia M40 GPU上进行了训练,但WMT’14 EnglishFrench除外,我们在单个机器上使用多GPU设置。 我们通过在每张卡上维护模型的副本并分割批次来同步训练多达八个GPU,以便每个工作人员计算梯度的1/8。最后,我们通过Nvidia NCCL对梯度求和。

4.3 评估

我们报告每个模型的三次运行的平均结果,每次运行仅在初始随机种子上有所不同。翻译结果是通过集束搜索生成的,我们通过句子长度对对数似然分数进行归一化。我们使用宽度为5的集束。我们将集束搜索中最终假设的对数似然除以它们的长度 y |\pmb y| 。 对于WMT’14 English-German,我们在单独的开发集(newstest2015)上调整长度归一化常数,并通过 y α |\pmb y|^α 对对数似然进行归一化。在其他数据集上,我们发现长度标准化没有任何好处。
  对于基于单词的模型,我们根据生成后的注意力得分执行未知单词替换。通过在预先计算的词典中查找具有最大注意力得分的源单词来替换未知单词。如果字典不包含翻译,那么我们只需复制源词。从快速对齐中获得的单词对齐训练数据中提取字典。每个源单词都映射到最经常对齐的目标单词。在我们的多步注意力(第3.3节)中,我们仅对所有层的注意力得分进行平均。最后,我们计算区分大小写的标记化BLEU,但WMT’16 English-Romanian中使用的是经过标记的BLEU与Sennrich等人类似。

猜你喜欢

转载自blog.csdn.net/qq_28385535/article/details/107555331