2017年6月,Google Brain在论文《Attention Is All You Need》中提出的Transformer架构,彻底摒弃了RNN的循环机制,采用一种self-attention的方式进行全局处理。我也在博客Attention Is All You Need(Transformer)算法原理解析有所介绍。html
Transformer结构的特色:算法
Vanilla Transformer是Transformer和Transformer-XL中间过分的一个算法,因此在介绍Transformer-XL以前咱们先来了解下Vanilla Transformer。网络
Vanilla Transformer的原理图:
架构
Vanilla Transformer论文中使用64层模型,并仅限于处理 512个字符这种相对较短的输入,所以它将输入分红段,并分别从每一个段中进行学习,以下图所示。 在测试阶段如需处理较长的输入,该模型会在每一步中将输入向右移动一个字符,以此实现对单个字符的预测。函数
Vanilla Transformer的三个缺点:性能
Transformer-XL架构在vanilla Transformer的基础上引入了两点创新:学习
以克服Vanilla Transformer的缺点。与Vanilla Transformer相比,Transformer-XL的另外一个优点是它能够被用于单词级和字符级的语言建模。测试
Transformer-XL仍然是使用分段的方式进行建模,但其与Vanilla Transformer的本质不一样是在于引入了段与段之间的循环机制,使得当前段在建模的时候可以利用以前段的信息来实现长期依赖性。以下图所示:编码
在训练阶段,处理后面的段时,每一个隐藏层都会接收两个输入:spa
在预测阶段:
若是预测\(x_{11}\)咱们只要拿以前预测好的[\(x_1\),\(x_2\)...\(x_{10}\)]的结果拿过来,直接预测。同理在预测\(x_{12}\)的时候,直接在[\(x_1\),\(x_2\)...\(x_{10}\),\(x_{11}\)]的基础上计算,不用像Vanilla Transformer同样每次预测一个字就要从新计算前面固定个数的词。
在Transformer中,一个重要的地方在于其考虑了序列的位置信息。在分段的状况下,若是仅仅对于每一个段仍直接使用Transformer中的位置编码,即每一个不一样段在同一个位置上的表示使用相同的位置编码,就会出现问题。好比,第\(i_2\)段和第\(i_1\)段的第一个位置将具备相同的位置编码,但它们对于第\(i\)段的建模重要性显然并不相同(例如第\(i_2\)段中的第一个位置重要性可能要低一些)。所以,须要对这种位置进行区分。
能够将Transformer-XL中的attention的计算分为以下四个部分: