算法上,论文中还提到了一些创新点。包括引入Wordpiece来对单词进行更细粒度的建模,来解决上面提到的不常见词语的问题;以及在Decoding结束之后,搜索最佳输出序列的时候,引入coverage penalty的概念,来鼓励Decoder输出更加完整的翻译句子,以解决有时候NMT有时候无法完整的翻译整句的情况。
工程上,报告里面着重谈到了几个性能优化的重点:
引入Risidual Connection
8层的LSTM堆叠起来,大大增加了神经网络的表达能力,在海量的数据下可以获得更好的模型效果。不过这样的堆叠会直接导致模型太庞大不可训练,在梯度反向传播的时候,很容易出现梯度弥散或梯度爆炸的问题。过去的研究证明[5],Residual Connection的方式,直接去学习残差可能会带来更好的效果,避免了深度网络中反向传播中出现的梯度反向传播可能会发生的问题。在上面的Google NMT架构图中,从倒数第三层开始都会引入Residual Connection。
大量的并行优化
与此同时,在工程上Google也进行了非常多的优化,来减少训练和实时翻译时候的延迟问题。比如训练数据的时候,数据会分成n等份,交给不同的GPU去异步训练,然后再汇总到统一的参数服务器;同时,Encoder和Decoder的不同层的LSTM会在不同的GPU上运行,因为更上一层的LSTM不必等到下一层的神经网络完全计算完毕再开始工作;即使对于最后的Softmax输出层,如果最后输出词的维度太大,也会划分到不同的GPU上并行处理。可谓不放过丝毫并行的机会。
底层基础计算平台的支持。Google NMT采用了自家的Tensorflow深度学习框架,并运行在Google专门为深度学习打造的TPU(Tensor Processing Unit)上,当年的AlphaGo也是由TPU提供支持。在对于模型参数的计算上,也大量应用了Quantized计算的技术:
由于神经网络参数涉及大量的耗时的浮点数运算,通过Quantization的方法,将模型参数由浮点数类型转换到一个更低精度(比如8bit),虽然会有一些精度的损失,但是可以大大减少计算量以及最终训练模型的体积。
从软件框架到定制硬件,相互配合,追求最极致的性能。在这篇报告里,有着长长的作者列表,最后赫然列着Google工程架构大神Jeffrey Dean的名字,他是当年一手创造了Map Reduce、Big Table等产品的Google奠基者之一。
本文来源:不详 作者:佚名