Transformer XL原理介绍

1. 引言

在自然语言处理中,当前深度学习主流的结构是RNN和Transformer,因为这两种结构能够比较好地捕捉文本的上下文信息,但是,我们知道RNN主要的问题是梯度消失和梯度爆炸的问题,而且其捕捉上下文的长度没有Transformer那么强大,而Transformer虽然能力比较强,但是在预测时会受到训练时所设定的最大长度限制,因此,本文将介绍一个Transformer模型的变体,即Transformer XL(extra long),该模型是CMU和谷歌大脑在2019年提出来的,通过引入了递归的机制和相对位置编码,解决了Transformer长度限制的问题,作者在实验中发现,Transformer XL能捕捉到的文本长度比RNN长80%。

2. Transformer XL原理介绍

2.1 Vanilla Transformer

在介绍Transformer模型之前,先介绍另一个模型,该模型是2018年由Al-Rfou等人提出来的,作者称之为Vanilla Transformer,该模型其实本质上还是Transformer,只是将原来的句子进行切片,切成一个一个固定长度的短句子进行训练,如下图中的(a)所示,然后在预测时,采用训练时所设定的长度窗口,在句子上进行平移,从而不断获得句子的预测,如下图中的(b)所示,虽然这样操作可以解决句子的长度限制问题,但是存在两个主要的缺点:①每次平移后,模型都是从头开始计算,并没有利用前面计算得到的上文信息,因此,会出现一种“上下文断裂”的情况;②在预测时,当句子的长度比较长时,计算速度会非常慢,因为每次窗口只移动一个时间步,这样会导致很多信息重复计算。作者在实验中发现,采用Transformer XL模型,速度是Vanilla Transformer的1800多倍。
在这里插入图片描述

2.2 Segment-Level Recurrence

为了克服Vanilla Transformer模型的缺点,Transformer XL引入了一种递归的机制,即通用将句子按照固定的长度 L L L分成若干个子句,然后在训练和预测时,依次将每个子句传入Transformer模型,并且将每个子句在Transformer中各层的输出传递给下一个子句,如下图(a)中绿色线,在下一个子句每一层的计算中,将上一个子句对应上一层的输出与当前子句对应层的输入进行拼接,这样在每一个子句的预测时,就可以考虑到前面各个子句的信息。

记两个连续的子句为 s τ = [ x τ , 1 , ⋯   , x τ , L ] \mathbf{s}_{\tau}=\left[x_{\tau, 1}, \cdots, x_{\tau, L}\right] sτ=[xτ,1,,xτ,L] s τ + 1 = [ x τ + 1 , 1 , ⋯   , x τ + 1 , L ] \mathbf{s}_{\tau+1}=\left[x_{\tau+1,1}, \cdots, x_{\tau+1, L}\right] sτ+1=[xτ+1,1,,xτ+1,L],记第 τ \tau τ个子句第 n n n层的输出为 h τ n ∈ R L × d \mathbf{h}_{\tau}^{n} \in \mathbb{R}^{L \times d} hτnRL×d,其中 d d d表示隐藏层的维度,则第 τ + 1 \tau+1 τ+1个子句 s τ + 1 \mathbf{s}_{\tau+1} sτ+1 n n n层的输出计算如下:

h ~ τ + 1 n − 1 = [ S G ( h τ n − 1 ) ∘ h τ + 1 n − 1 ] q τ + 1 n , k τ + 1 n , v τ + 1 n = h τ + 1 n − 1 W q ⊤ , h ~ τ + 1 n − 1 W k ⊤ , h ~ τ + 1 n − 1 W v ⊤ h τ + 1 n =  Transformer-Layer  ( q τ + 1 n , k τ + 1 n , v τ + 1 n ) \begin{array}{l}{\widetilde{\mathbf{h}}_{\tau+1}^{n-1}=\left[\mathrm{SG}\left(\mathbf{h}_{\tau}^{n-1}\right) \circ \mathbf{h}_{\tau+1}^{n-1}\right]} \\ {\mathbf{q}_{\tau+1}^{n}, \mathbf{k}_{\tau+1}^{n}, \mathbf{v}_{\tau+1}^{n}=\mathbf{h}_{\tau+1}^{n-1} \mathbf{W}_{q}^{\top}, \widetilde{\mathbf{h}}_{\tau+1}^{n-1} \mathbf{W}_{k}^{\top}, \widetilde{\mathbf{h}}_{\tau+1}^{n-1} \mathbf{W}_{v}^{\top}} \\ {\mathbf{h}_{\tau+1}^{n}=\text { Transformer-Layer }\left(\mathbf{q}_{\tau+1}^{n}, \mathbf{k}_{\tau+1}^{n}, \mathbf{v}_{\tau+1}^{n}\right)}\end{array} h τ+1n1=[SG(hτn1)hτ+1n1]qτ+1n,kτ+1n,vτ+1n=hτ+1n1Wq,h τ+1n1Wk,h τ+1n1Wvhτ+1n= Transformer-Layer (qτ+1n,kτ+1n,vτ+1n)

其中, S G ( ⋅ ) \mathrm{SG}(\cdot) SG()表示stop-gradient, [ h u ∘ h v ] \left[\mathbf{h}_{u} \circ \mathbf{h}_{v}\right] [huhv]表示将两个序列进行拼接, W \mathbf{W} W表示模型的参数。这里主要的不同点在于计算K和V时,使用的是 h ~ τ + 1 n − 1 \widetilde{\mathbf{h}}_{\tau+1}^{n-1} h τ+1n1,其中,包含了来自上一个子句的信息 h τ n − 1 \mathbf{h}_{\tau}^{n-1} hτn1。由于每个子句都会递归地使用上一个子句的信息,因此,随着层数的加深,每个子句中每个时间步可以利用到的前面的序列信息长度应该是 O ( N × L ) O(N \times L) O(N×L),如下图中(b)所示。在实际训练中和预测中,对于每个子句,还可以考虑前面多几个子句的信息,而不是仅使用上一个子句。作者在实验中通过一个参数 M M M来表示考虑的上文的长度信息,在训练时,令 M = L M=L M=L,即只考虑一个子句信息,但是在预测时,可以将其扩增几个倍数。

Transformer XL除了可以捕捉更长的文本信息外,也提高了模型预测的速度,因为我们知道Transformer XL在预测时每次是平移一个子句的长度,而不是像Vanilla Transformer一样每次只平移一个时间步。
在这里插入图片描述

2.3 Relative Positional Encodings

虽然Transformer XL通过切分子句,并引入递归的思想解决了句子长度的限制问题,但是还忽略了一个问题,即positional encoding。在Transformer中,通过一个positional encoding来表征句子的时序信息,记为 U ∈ R L max ⁡ × d \mathbf{U} \in \mathbb{R}^{L_{\max } \times d} URLmax×d,其中, U i \mathbf{U}_{i} Ui表示第 i i i个位置的绝对位置信息, L m a x L_{max} Lmax表示句子的最大长度,我们知道,Transformer中,会将词汇embedding信息与位置信息进行元素相加,然后作为整个模型的原始输入,那么,如果Transformer XL也采用这样的方式进行计算的话,其表达式如下:
h τ + 1 = f ( h τ , E s τ + 1 + U 1 : L ) h τ = f ( h τ − 1 , E s τ + U 1 : L ) \begin{aligned} \mathbf{h}_{\tau+1} &=f\left(\mathbf{h}_{\tau}, \mathbf{E}_{\mathbf{s}_{\tau+1}}+\mathbf{U}_{1 : L}\right) \\ \mathbf{h}_{\tau} &=f\left(\mathbf{h}_{\tau-1}, \mathbf{E}_{\mathbf{s}_{\tau}}+\mathbf{U}_{1 : L}\right) \end{aligned} hτ+1hτ=f(hτ,Esτ+1+U1:L)=f(hτ1,Esτ+U1:L)

其中, E s τ ∈ R L × d \mathbf{E}_{\mathbf{s}_{\tau}} \in \mathbb{R}^{L \times d} EsτRL×d表示子句 s τ \mathbf{s}_{\tau} sτ的embedding信息,可以看到,两个子句 s τ , s τ + 1 \mathbf{s}_{\tau}, \mathbf{s}_{\tau+1} sτ,sτ+1用的都是同一个位置信息,这会导致模型没法区分两个子句的顺序信息。

为了克服这个问题,作者引入了一种新的Positional Encoding方法,即Relative Positional Encodings。我们知道,Transformer在 q i q_{i} qi k j k_{j} kj的注意力时,根据矩阵的分配律,可以得到如下:
A i , j a b s = E x i ⊤ W q ⊤ W k E x j ⎵ ( a ) + E x i ⊤ W q ⊤ W k U j ⎵ ( b ) + U i ⊤ W q ⊤ W k E x j ⎵ ( c ) + U i ⊤ W q ⊤ W k U j ⎵ ( d ) \begin{aligned} \mathbf{A}_{i, j}^{\mathrm{abs}} &=\underbrace{\mathbf{E}_{x_{i}}^{\top} \mathbf{W}_{q}^{\top} \mathbf{W}_{k} \mathbf{E}_{x_{j}}}_{(a)}+\underbrace{\mathbf{E}_{x_{i}}^{\top} \mathbf{W}_{q}^{\top} \mathbf{W}_{k} \mathbf{U}_{j}}_{(b)} \\ &+\underbrace{\mathbf{U}_{i}^{\top} \mathbf{W}_{q}^{\top} \mathbf{W}_{k} \mathbf{E}_{x_{j}}}_{(c)}+\underbrace{\mathbf{U}_{i}^{\top} \mathbf{W}_{q}^{\top} \mathbf{W}_{k} \mathbf{U}_{j}}_{(d)} \end{aligned} Ai,jabs=(a) ExiWqWkExj+(b) ExiWqWkUj+(c) UiWqWkExj+(d) UiWqWkUj

作者认为,其实在每次计算时,只要让模型可以知道句子的相对位置信息即可,因此,基于这个思想,作者将上式中(b)和(d)项中的 U j \mathbf{U}_{j} Uj替换为 R i − j \mathbf{R}_{i-j} Rij,用来表征相对位置信息,然后将©中的 U i ⊤ W q ⊤ \mathbf{U}_{i}^{\top} \mathbf{W}_{q}^{\top} UiWq采用一个可训练的 u ∈ R d u \in \mathbb{R}^{d} uRd向量替代,对于(d)中的 U i ⊤ W q ⊤ \mathbf{U}_{i}^{\top} \mathbf{W}_{q}^{\top} UiWq,同样采用一个可训练的 v ∈ R d v \in \mathbb{R}^{d} vRd替代,最后,对于 W k \mathbf{W}_{k} Wk,采用两个矩阵进行替代 W k , E \mathbf{W}_{k, E} Wk,E W k , R \mathbf{W}_{k, R} Wk,R。最终修正后的表达式如下:
A i , j r e l = E x i ⊤ W q ⊤ W k , E E x j ⎵ ( a ) + E x i ⊤ W q ⊤ W k , R R i − j ⎵ ( b ) + u ⊤ W k , E E x j ⎵ ( c ) + v ⊤ W k , R R i − j ⎵ ( d ) \begin{aligned} \mathbf{A}_{i, j}^{\mathrm{rel}} &=\underbrace{\mathbf{E}_{x_{i}}^{\top} \mathbf{W}_{q}^{\top} \mathbf{W}_{k, E} \mathbf{E}_{x_{j}}}_{(a)}+\underbrace{\mathbf{E}_{x_{i}}^{\top} \mathbf{W}_{q}^{\top} \mathbf{W}_{k, R} \mathbf{R}_{i-j}}_{(b)} \\ &+\underbrace{u^{\top} \mathbf{W}_{k, E} \mathbf{E}_{x_{j}}}_{(c)}+\underbrace{v^{\top} \mathbf{W}_{k, R} \mathbf{R}_{i-j}}_{(d)} \end{aligned} Ai,jrel=(a) ExiWqWk,EExj+(b) ExiWqWk,RRij+(c) uWk,EExj+(d) vWk,RRij

采用这种相对位置编码后,假设对于一个 N N N层的Transformer,不失一般性,在只有一个multi-heads的情况下,Transformer XL每一层的计算如下:
在这里插入图片描述
其中, h τ 0 : = E s τ \mathbf{h}_{\tau}^{0} :=\mathbf{E}_{\mathbf{s}_{\tau}} hτ0:=Esτ表示词汇的embedding。虽然采用相对位置编码使得模型可以区分不同的子句相对位置,但是,我们可以注意到,在计算multi-heads attention时,此时 W k , R n R i − j \mathbf{W}_{k, R}^{n} \mathbf{R}_{i-j} Wk,RnRij的计算时间是二次方的,严重影响了模型的计算速度,因此,为了克服这个问题,作者通过推导将其计算时间转化为线性的。

我们知道,对于配对 ( i , j ) (i, j) (i,j) i − j i-j ij的取值范围为 [ 0 , M + L − 1 ] [0,M+L-1] [0,M+L1],因此,可以将 W k , R R i − j \mathbf{W}_{k, R} \mathbf{R}_{i-j} Wk,RRij的计算转化为如下:
在这里插入图片描述
此时,对于每一个配对的 ( i , j ) (i, j) (i,j) i − j i-j ij,都可以通过位置索引直接从矩阵 Q Q Q中获取到,为了便于表示,我们记 Q k = W k , R R M + L − 1 − k \mathbf{Q}_{k}=\mathbf{W}_{k, R} \mathbf{R}_{M+L-1-k} Qk=Wk,RRM+L1k,此时,对于 q τ , i n ⊤ W k , R n R i − j \mathbf{q}_{\tau, i}^{n} \top \mathbf{W}_{k, R}^{n} \mathbf{R}_{i-j} qτ,inWk,RnRij的计算,可以表示如下:
在这里插入图片描述
因此,可以定义:
在这里插入图片描述
可以发现,对于 B \mathbf{B} B中的每一行,其实就是 B ~ \widetilde{\mathbf{B}} B 中每一行分别向左移动 L 、 L − 1 、 L − 2 、 . . . L、L-1、L-2、... LL1L2...个单位,因此,通过这样的方式可以把计算时间转化为线性的。

同理,对于 v ⊤ W k , R n R i − j v^{\top} \mathbf{W}_{k, R}^{n} \mathbf{R}_{i-j} vWk,RnRij的计算,采用同样的方法可以定义矩阵:
在这里插入图片描述
以及:
在这里插入图片描述
此时,对于 D \mathbf{D} D中的每一行,其实就是 d ~ \widetilde{\mathbf{d}} d 向左移动一定单位后的结果。

3. 总结

以上就是Transformer XL的介绍,感觉还是有一定复杂度的。最后总结一下:

  • Transformer XL由于加入递归机制和相对位置编码,因此,解决了文本长度的限制问题以及Vanllia Transformer中上下文信息断裂、预测速度慢的问题。
  • 由于采用相对位置编码,因此,计算速度相比Transformer要慢一点。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值