本文将继续介绍关于transformer在 non-auto regression方面的研究,今天要介绍的是Google Brain的工作Blockwise Parallel Decoding for Deep Autoregressive Models。
本文将继续介绍关于transformer在 non-auto regression方面的研究,今天要介绍的是Google Brain的工作Blockwise Parallel Decoding for Deep Autoregressive Models。
接下来我们介绍一下Sharing Attention Weights for Fast Transformer这篇文章。实际上这篇文章之前还有两个关于加速Transformer推理的文章,一个类似Latent Transformer的引入离散隐变量的类VAE的方法,另一个是引入语法结构达到non-auto regression的方法。个人感觉没什么意思,就直接跳过了。本文要介绍的这篇文章比较有意思,引入共享权重的概念。从近期关于Bert小型化的研究(比如DistilBERT,ALBERT,TinyBERT等)来看,实际上Transformer中存在着大量的冗余信息,共享权重的方法应该算是剔除冗余信息的一种有效的手段,因此这篇文章还是比较有意思的。
从题目就可以看出来,本文将要介绍一种半自动回归的机器翻译解码技术。之前我们介绍了各种非自动回归的解码技术,其中有一个Latent Transformer是先用auto-regression生成一个短序列,然后用这个短序列并行生成目标序列。当时我们说这其实算是一种半自动回归的方法。今天我们要介绍另一种半自动回归的方法——SAT。
本文继续介绍关于transformer在non-auto regression方面的研究,今天要介绍的是Gu et al. 2018 发表在ICLR 2018上的文章Non-autoregressive neural machine translation 。
之前提到Auto-regression的decoding方法使得transformer在推理上的表现很慢,所以很多研究者在这方面做了很多研究,本文就介绍一个使用Non-Auto Regression的方法——Discrete Latent Variable。该方法与Auto-regression方法相比,效果上要稍差 一些,但是取得了比其他Non-auto regression方法都好的结果,而效率上也有很大的提升。
Transformer虽然在训练上比RNN和CNN快,但是在做推理(decoding)的时候由于采用的是Auto-regression不能做到并行计算,所以速度很慢(甚至可能比纯RNN还要慢),所以针对这种情况很多研究者提出了decoding时也能采用并行计算的改进方案,下面要介绍的这个transformer大家族的以为成员就是其中之一:Average Attention Network。
之前我们介绍了擎天柱的工作原理以及内部构造。对擎天柱已经有了深入的了解,那么本文就来介绍一下汽车人家族中的其他成员——Transformer的各种变种。
Transformer现在已经被广泛应用于NLP领域的各项任务中,并且都取得了非常好的效果。其核心层使用了自注意力机制,关于为什么使用自注意力机制,作者提出了三点原因:
前面介绍了Transformer的pytorch
版的代码实现,下面我们再介绍一下tensorflow
版的代码实现。
前面介绍了Transformer的模型结构,最后也给出了pytorch
版本的代码实现,但是始终觉得不够过瘾,有些话还没说清楚,因此,这篇文章专门用来讨论Transformer的代码细节。