选自arXiv
作者:Antonio Valerio Miceli Barone等
机器之心编译
参与:Nurhachu Null、李泽南
在神经机器翻译问题中,不同的堆叠架构已经多次在不同研究中展现出了良好的表现,而深度转换架构(Deep transition architecture)则成功地用于语言建模等用途中。爱丁堡大学与 Charles University 的研究者们对这两种架构的多个组合形式在 WMT 翻译任务中的表现进行了测试,并提出了结合堆叠与深度转换的新型神经网络:BiDeep RNN。
论文:Deep Architectures for Neural Machine Translation
论文链接:https://arxiv.org/abs/1707.07631
越来越多的实验正在不断证明:神经机器翻译的质量会随着模型深度的增加而提高。然而,虽然人们已经提出了一些不同结构的变体,并不断增加模型的深度,但是至今仍然没有与之相关的全面对比研究。
在这篇论文的工作中,我们描述并评价了几个现存的在神经机器翻译中引入深度的方法。此外,我们还探索了包括深度转换循环神经网络(RNN)在内的几种新颖的结构变体,并且我们还改变了在深度解码器中使用 attention 的方式。我们引入了一个新型的「BiDeep」RNN 的架构,它结合了深度翻译 RNN 和 stacked RNN。
我们的评估是在在英语-德语之间的 WMT 新闻翻译数据集上进行的,我们在训练和推理的过程中都使用了具有一块 GPU 的机器。我们发现新提出的几种架构在运算速度和翻译质量方面都比现存的方法要好。我们在一个深度为 8 的 BiDeep RNN 上得到了最佳的性能提升,在较强的测试基准上得到了 1.5BLEU 的提升。
EMNLP 2017 新闻机器翻译任务:http://www.statmt.org/wmt17/translation-task.html
为了便于使用,这些代码将被开源。
神经机器翻译结构
在本论文中,我们主要考虑了以下几个结构:门控循环单元(GRU,Cho 等人,2014),
2.1 基础结构
我们使用 Nematus 机器翻译系统作为我们的基础结构,Sennrich 等人(2017)对此做了深度的描述。我们使用层归一化对它做了扩展,结果证明我们的结构既能够提升翻译质量,又能够让训练过程变得更快。
在我们的讨论中,以下这两种早就存在的深度类型是与之相关的:
- 正如 Firat 和 Cho 在 2016 年的论文中所描述的,每个输出单词的解码 RNN 中的循环翻译深度由两个 GRU 转换组成,并且两个 GRU 之间还有一个注意力(attention)机制。
- 在注意力网络中计算对齐得分的前馈深度,以及在输出网络中预测目标单词的前馈深度。这两个网络都是具有 tanh 隐藏层的多层感知机。
2.2 深度转换结构
在一个深度转换 RNN(DT-RNN)中,每一个时间步骤中的下一状态都通过有序地使用多转换层来实现,这有效地使用了内嵌循环单元的前馈网络。在我们的实验中,这些转换层是拥有独立可训练参数的 GRU 块,将其中一个块的输出「状态」与下一个块的输入「状态」相连接。要注意的是,每个 GRU 并不是独自循环的,循环仅仅存在于整个多层单元的整体水平上,因为最后一个 GRU 转换器当前时间步骤的输出「状态」将继续作为第一个 GRU 下一个时间步骤的输入「状态」。
图 1. 深度转换解码器
将这个结构应用在神经机器翻译(NMT)中是一个创新的贡献。
2.3 堆叠的结构
让多层 RNN(我们的实验中使用的是 GRU)运行相同数量的时间步骤便得到了一个堆叠 RNN(stacked RNN),正因为有这样的连接方式,所以每一个最底部(如下图)的 RNN 都会从外界获得「外部」输入,而每一个更高层的 RNN 会将它下面的 RNN 的输出「状态」作为其「外部」输入。处在不同深度的状态之间的残差连接也被用来改善信息流。要注意的是,与深度转换 GRU 不同的是,堆叠 RNN 中的 GRU 转换块由一个独自循环的单元组成,因为它自身的状态在不同的时间步骤之间循环。
图 2. 交替的堆叠解码器(Zhou 等人,2016)
图 3. 双向对的解码器
图 4. 堆叠 RNN(stacked RNN)解码器
2.4 双深度架构
我们引入了双深度 RNN(BiDEEP RNN),这是一个通过结合堆叠的深度转换器得到的新型结构。
BiDeep 编码器是这样得到的:将堆叠解码器中的 Ds 个单独的循环 GRU 单元用多层深度转换单元替换每个多层转换单元都由 Ls 个 GRU 转换块组成。
例如,BiDeep 代替解码器的过程可以定义如下:
其中,每个多层单元 DTDRUk 被定义为:
也可以在每一个堆叠水平拥有不同的转换深度。
BiDeep 解码器也是类似的定义,将循环单元(如 GRU,rGRU,cGRU 或者 crGRU)用深度多层转换单元替换。
本文为机器之心编译,转载请联系本公众号获得授权。