注:无遮盖结点(Unshaded nodes)还没有完成的时候,白遮盖节点(nodes shaded white)已经完成了它的计算。蓝遮盖层(Layers shaded blue)也处于计算的过程或已经完成了计算。这也就是为什么只使用了单一双向的循环神经网络(RNN)。双向层是两个循环神经网络组成的,一个从左至右另一个从右至左。这意味着计算第一个输出需要等待从右边到你现在位置共 N 个计算量(N 是序列的长度) 如果层级是双向的,全部这一层就会在任何后面的相关性层开始计算前完成计算。但是如果使用的是单向层级,我们的计算就能有够多的灵活性与并行性。在上面的例子中,仅仅关注编码部分,最前面的四层网络全都是同时计算结点。这是上层神经网络不依赖于所有下层网络节点唯一可能性,只要是直属下层的。如果是双向神经网络,那就不可能了。
并行(解码器侧):由于使用解码器侧的所有输出的注意机制,解码器侧必须等待,直到所有编码器完成处理。但在编码器完成时,解码器能以和编码器侧相同的并行方式执行任务。通常,注意机制将使用解码器的最顶部输出来查询注意机制,但 GNMT 架构使用最低的解码器层来查询注意机制以最小化依赖图,并且允许最大并行化。在上面的例子中,如果我们使用最高的解码器层作为注意(attention),我们将无法开始计算解码器的第二输出,因为解码器的第一个输出仍在进行中。 旁注(强制教育和训练对生产):在训练期间,我们已经知道英语句子需要翻译成什么。这允许我们具有比在预测时更高的并行性水平。由于我们已经有了所有正确的词(在右下角的「已知」翻译),我们可以强迫系统使用它。强制教育是你给神经网络下一个词的正确答案,即使它实际上已经预测出错误的词。这种方式是有效的,训练将继续迫使神经网络输出正确的词,系统最终会输出正确的结果。这种方式允许你在计算第一个输出字的过程中「作弊」并计算第二个输出字。在原有情况下,我们需要等待系统逐词输出,而且不能加入「已知」的翻译。 旁注(多 GPU):这种并行化只有在多 GPU 情况下才有效率。在 GNMT 论文中,他们的图示实际上是根据 GPU 的数量来标记每个图层的。对于编码器和解码器而言,谷歌的方法使用了八个 GPU——每层一个。它对单 GPU 有没有意义?通常,在计算给定图层时,GPU 应该达到高利用率(假设你能够设置合理的批量大小,网络大小和序列长度)。这项工作有关重新排序的依赖性,重新排序允许立即进行更多的计算,允许更好地利用更多的设备。在 GPU 情况下,并行计算并不会提高效率,而在多 GPU 的情况下,这种重新排序能够显著加快速度。 V6:残差是新的热点 八层神经网络至少对循环神经网络已经是很深了,从一般经验法则来看,除了一些异常情况或特定结构外,更深的神经网络是更难以训练的。当然这有许多原因,最直观的就是有更深的梯度需要计算路径,它消失或爆炸(vanishing or exploding)的风险就越高。幸运的是,现在有很多很有潜力的方式来解决这一问题。 一个解决梯度消失(vanishing gradients)的方法就是使用残差网络(residual networks),著名的卷积神经网络(CNN)就是训练数百层深度残差网络组成神经网络。想法是相当简单的,通过默认一层神经网络计算一个恒等函数(identity function)。这是很有道理的,如果你在一层上面做得挺好,就不会期望二或三层运行得差。最坏的情况也是第二层和第三层只会不加修改地「复制」第一层输出。所以每层只需要学习一个恒等函数。 不幸的是,学习这样的恒等函数(identity function)好像对多数神经网络不算太麻烦。更糟的是后面的的层级作为监督信号会打乱前面层级的训练,也就是它打算要去方向是持续改变的。同样地,第一层在有很多层级在它下面的情况下也就根本不会训练地很好。
为了解决这个问题,我们侧重构建这些层级在表达恒等函数时不同权重的表现。
集众家所长的谷歌神经机器翻译 (责任编辑:本港台直播) |