Transformer-XL和XL-net

Transformer-XL

Transformer-XL是针对Transformer不能处理长序列而设计的。Transformer最多只能处理长度为512的序列,当序列超过512时,Transformer会使用步长为1长度为512的滑动窗口,Transformer会在每个窗口内单独训练。具体做法是在编码时,将长序列按照512为单位划分为多个段单独提取特征;在解码时,使用滑动窗口对每个位置单独解码。这种做法会造成几个问题:
(1) 无法识别长度大于512的依赖
(2) 编码时会造成碎片,无法识别碎片断裂处前后的依赖,即使距离很短
(3) 解码时每个滑动窗口都需要执行整个Transformer的解码过程,效率较低

针对这些问题,人们提出了Transformer的改进版Transformer-XL,专门用来使用Transformer处理长序列。Transformer-XL主要做了两个改进:循环机制和相对位置。

循环机制

循环机制就是解除一个窗口长度的限制,但也限制每层每个位置最多只能将信息传递给后面$k$个位置,其中$k$是窗口大小。举个例子,在第一层第1个位置,最远可以将信息传递到第二层第k个位置,然后继续传递到第三层第$2k$个位置,直到第$n$层第$(n-1)k$个位置。在原来的窗口Transformer方法中,无论是第几层,第1个位置都是最远只能将信息传递到第$k$个位置。这样做虽然每层依然受到窗口大小$k$的限制,但是只要加大层数,每个位置就能影响更远的位置,比起原来最多受窗口内位置的影响要好很多。设$F[i,j]$表示第$i$层第$j$个位置的状态,则$F[i,j]$依赖于$F[i-1,j-k+1],F[i-1,j-k+2]…,F[i-1,j-1],F[i-1,j]$,所以在每次处理窗口$[i,i+1,…,i+k-2,i+k-1]$时,只需要缓存上一个窗口$[i-k,i-k+1,…,i-2,i-1]$的状态就可以了,当处理完当前窗口,就可以把上一个窗口的状态缓存替换成当前窗口的状态缓存,用于处理下一个窗口,循环往复,直到每一层每一个位置的状态都求出来就可以了。这就是循环机制。

相对位置

在原先使用Transformer时,使用到了位置编码,在计算attention有以下公式:

我们可以把第一项看作是计算词$i$和词$j$内容的联系,把第二项看作是计算词$i$在位置$j$的联系,把第三项看作是计算词$j$在位置$i$的联系,把第四项看作是计算位置$i$和位置$j$的联系。我们可以看到位置$i$和位置$j$都是绝对位置。在处理长序列时,两个窗口内部都有自己的绝对位置,当两个窗口联系在一起计算时,绝对位置的用法就会出现大问题,所以需要引入相对位置。使用相对位置计算attention的公式如下:

可以看到有以下几点变动:
(1) $W_k$矩阵变成了两个矩阵$W_{ke}$和$W_{kr}$,分别表示对键在内容上的计算矩阵和键在相对位置上的计算矩阵
(2) $p_j$变成了$r_{j-i}$,使用$i$和$j$的相对位置编码替换位置$j$的绝对位置编码
(3) $p_iW_q$变成了$u$和$v$,因为使用相对编码后不再需要绝对编码,所以无论在哪个位置$p_iW_q$都可以是相同的,所以换成了统一的向量$u$和$v$。注意到在score的计算中,四项都含有自己的意义,所以将$p_iW_q$在不同的项替换成不同的向量。

以上就是Transformer-XL的全部内容,更详细的讲解可以查看文章:https://blog.csdn.net/magical_bubble/article/details/89060213

XL-net

XL-net和GPT以及Bert一样,都是一种通用的NLP预训练模型。XL-net和GPT都是自回归模型,而Bert是自编码模型。一句话概括,自回归模型就是使用自己的上文去预测下一个词,而自编码模型就是使用的上下文去完形填空。Bert这种自编码模型有一个缺点就是忽略了需要填空的词的相互影响,举个例子现在需要填两个空,这两个空的单词是“New”和“York”,显然这两个词是相关的,但是Bert只是使用这两个词的上下文去预测这两个词而没有加上使用“New”去预测“York”或加上使用“York”去预测“New”。同时因为在实际使用Bert时,除非是完型填空任务,实际语料库是不会出现[MASK]这个标记的,但是在Bert的预训练时需要去预测[MASK],这使得预训练和实际使用时输入语料不相符。针对Bert的这些问题,XL-net被人提出了。XL-net和GPT一样是自回归模型,使用上文去预测下一个词。

随机乱序

XL-net会随机打乱序列的顺序多次,然后对每个序列进行自回归预训练,综合各个序列的输出结果进行参数学习与预测。目标函数如下:

也就是各个序列的似然函数的期望最大,通俗点就是最大化各个随机序列的似然函数的平均值。

双流注意力

XL-net希望使用上文的内容和位置以及当前位置去预测当前位置的内容,这里的位置并不是指在序列中的位置,因为序列是有多种排序的,这里的位置,举个例子,比如原顺序序列第$i$个位置的词$z_i$在当前序列位于位置$j$,则当前序列位置$j$的位置信息是与$i$相关的而不是与$j$相关。这种位置信息主要用于区分在同一个位置的不同词,因为我们不能知道词的内容,词的内容是用于预测的,所以使用词的位置信息区分。设$F[i,z_j]$表示前$i$层$z_0,z_1,…,z_j$的位置信息和内容信息;$G[i,z_j]$表示前$i$层$z_1,z_2,…,z_{j-1}$个位置的位置信息和内容信息加上前$i$层$z_j$的位置信息。则有以下递推式:

其中,$h$是一个函数,里面的内容我们这里不关心。我们可以看到$F$和$G$的递推是两个过程使用同一个函数,且G依赖于F。我们是想使用G去预测当前位置的内容,然后求$G$就需要求$F$。这就是双流注意力。

XL-net还使用了Transformer-XL代替Transformer作为学习器,提高了处理长序列的能力。以上就是XL-net的全部内容,更详细的讲解可以看这篇文章:https://www.cnblogs.com/jiangxinyang/p/11534492.html