Transormer-XL
主要工作
研究问题
固定长度的上下文设置对于模型的限制。
文章贡献
- 介绍一种segment级别的递归机制。
- 提出一种新的位置编码方式。
模型介绍
Vanilla Transformer
为解决问题:如何将任意长度的上下文输入表示为有限大小的上下文。
方法1:给一个无限内存和计算能力,用一个无条件的Transformer处理整个上下文序列,类似于前馈神经网络。
方法2:而可行的方法是划分整个语料库为更短的可控制的片段大小,并且只在各序列上训练模型,忽略先前划分的上下文信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROLBG3xD-1669618280242)(C:\Users\Liu\Desktop\Learning\研究生\截图\image-20221107144415043.png)]
存在问题:无论在前向还是后向中都无法获取片段划分之间的信息。
局限性1:模型最大依赖长度受限于划分长度。
局限性2:简单地将序列划分为固定长度的片段会导致上下文碎片化问题。
在评估阶段,使用类似滑动窗口的方法进行预测,每次滑动只预测一个word。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zcp1pcvw-1669618280243)(C:\Users\Liu\Desktop\Learning\研究生\截图\image-20221107144527713.png)]
Segment-level Recurrence with state reuse
解决问题:使用有限长度上下文的局限性。
方法:在Transformer结构中引入循环机制。
- 在训练阶段,将前一段计算的隐藏状态序列固定并缓存,作为模型处理下一个新片段的扩展上下文。这种方法可以使模型利用先前片段的信息。
计算方式:
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{aligned} &\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{aligned}
h
τ+1n−1=[SG(hτn−1)∘hτ+1n−1]qτ+1n,kτ+1n,vτ+1n=hτ+1n−1Wq⊤,h
τ+1n−1Wk⊤,h
τ+1n−1Wv⊤,hτ+1n= Transformer-Layer (qτ+1n,kτ+1n,vτ+1n).
其中:
- n n n:表示第 n n n层;
- h h h:表示隐藏状态;
- S G ( ⋅ ) SG(·) SG(⋅):表示停止梯度;
- [ h u ∘ h v ] [h_u\circ h_v] [hu∘hv]:表示两个隐藏层之间的拼接操作;
与Transformer最大的区别在于 k , v k,v k,v使用了扩展的上下文信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2eXeJBdd-1669618280244)(C:\Users\Liu\Desktop\Learning\研究生\截图\image-20221107145720242.png)]
在评估阶段,可以重用来自前面的片段表示,而不是重新计算。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlFCcS3U-1669618280244)(C:\Users\Liu\Desktop\Learning\研究生\截图\image-20221107150152225.png)]
relative positional encoding
存在问题:如果采用Transformer中的位置编码方式,那么对于
s
τ
s_\tau
sτ与
s
τ
+
1
s_{\tau+1}
sτ+1,模型无法区分其位置信息的区别。公式如下:
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)
解决方法:只在隐藏状态中编码相对位置信息。
- 将相同的信息注入到每一层的注意力分数中,而不是将bias静态地加入到初始嵌入中。
- 对于 q τ , i q_{\tau,i} qτ,i与 k τ , j k_{\tau,j} kτ,j,我们只关注他们的相对位置,例如 i − j i-j i−j。
- 绝对位置信息可以从相对位置信息中递归恢复。
query向量
q
i
q_i
qi与key向量
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)
Exi⊤Wq⊤WkExj+(b)
Exi⊤Wq⊤WkUj+(c)
Ui⊤Wq⊤WkExj+(d)
Ui⊤Wq⊤WkUj.
使用相对位置编码后,分数可以表示为:
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)
Exi⊤Wq⊤Wk,EExj+(b)
Exi⊤Wq⊤Wk,RRi−j+(c)
u⊤Wk,EExj+(d)
v⊤Wk,RRi−j.
- R i − j R_{i-j} Ri−j表示相对位置编码。
其中的变化有:
- 使用相对位置编码 R i − j R_{i-j} Ri−j替换绝对位置编码 U j U_j Uj;
- 使用可训练的参数 u , v u,v u,v代替query U i ⊤ W q ⊤ U_i^\top W_q^\top Ui⊤Wq⊤;
- 分离 W k , E W_{k,E} Wk,E和 W k , R W_{k,R} Wk,R分别用于生成基于内容的key向量和基于位置的key向量。
公式中每个部分的含义:
- ( a ) (a) (a):表示基于内容的地址;
- ( b ) (b) (b):捕获依赖相关的位置bias;
- ( c ) (c) (c):控制全局的内容bias;
- ( d ) (d) (d):编码全局的位置bias;
加上相对位置编码后,Transformer-XL的attention机制:
h
~
τ
n
−
1
=
[
S
G
(
m
τ
n
−
1
)
∘
h
τ
n
−
1
]
q
τ
n
,
k
τ
n
,
v
τ
n
=
h
τ
n
−
1
W
q
n
⊤
,
h
~
τ
n
−
1
W
k
,
E
n
⊤
,
h
~
τ
n
−
1
W
v
n
⊤
A
τ
,
i
,
j
n
=
q
τ
,
i
n
⊤
k
τ
,
j
n
+
q
τ
,
i
n
⊤
W
k
,
R
n
R
i
−
j
+
u
⊤
k
τ
,
j
+
v
⊤
W
k
,
R
n
R
i
−
j
a
τ
n
=
Masked-Softmax
(
A
τ
n
)
v
τ
n
o
τ
n
=
LayerNorm
(
Linear
(
a
τ
n
)
+
h
τ
n
−
1
)
h
τ
n
=
Positionwise-Feed-Forward
(
o
τ
n
)
\begin{aligned} \widetilde{\mathbf{h}}_\tau^{n-1}=& {\left[\mathrm{SG}\left(\mathbf{m}_\tau^{n-1}\right) \circ \mathbf{h}_\tau^{n-1}\right] } \\ \mathbf{q}_\tau^n, \mathbf{k}_\tau^n, \mathbf{v}_\tau^n=& \mathbf{h}_\tau^{n-1} \mathbf{W}_q^{n \top}, \widetilde{\mathbf{h}}_\tau^{n-1} \mathbf{W}_{k, E}^n{ }^{\top}, \widetilde{\mathbf{h}}_\tau^{n-1} \mathbf{W}_v^{n \top} \\ \mathbf{A}_{\tau, i, j}^n=& \mathbf{q}_{\tau, i}^n{ }^{\top} \mathbf{k}_{\tau, j}^n+\mathbf{q}_{\tau, i}^n{ }^{\top} \mathbf{W}_{k, R}^n \mathbf{R}_{i-j} \\ &+u^{\top} \mathbf{k}_{\tau, j}+v^{\top} \mathbf{W}_{k, R}^n \mathbf{R}_{i-j} \\ \mathbf{a}_\tau^n=& \text { Masked-Softmax }\left(\mathbf{A}_\tau^n\right) \mathbf{v}_\tau^n \\ \mathbf{o}_\tau^n=& \text { LayerNorm }\left(\text { Linear }\left(\mathbf{a}_\tau^n\right)+\mathbf{h}_\tau^{n-1}\right) \\ \mathbf{h}_\tau^n=& \text { Positionwise-Feed-Forward }\left(\mathbf{o}_\tau^n\right) \end{aligned}
h
τn−1=qτn,kτn,vτn=Aτ,i,jn=aτn=oτn=hτn=[SG(mτn−1)∘hτn−1]hτn−1Wqn⊤,h
τn−1Wk,En⊤,h
τn−1Wvn⊤qτ,in⊤kτ,jn+qτ,in⊤Wk,RnRi−j+u⊤kτ,j+v⊤Wk,RnRi−j Masked-Softmax (Aτn)vτn LayerNorm ( Linear (aτn)+hτn−1) Positionwise-Feed-Forward (oτn)
其中
- h τ 0 : = E s τ h^0_\tau:=E_{s_\tau} hτ0:=Esτ
优缺点
优点
- 在训练阶段使用之前的fragment信息,提高模型利用上下文信息的能力。
- 在评估阶段因为使用了之前fragment信息,避免了再次运算,提升了评估的速度。
缺点:
- 模型应用成本高,采用空间换取时间的方法,消耗显存或内存。
问题
-
在注意力分数计算 t e r m ( c ) term (c) term(c)和 t e r m ( d ) term (d) term(d)中,为什么要用可训练的参数 u , v u,v u,v替换 U i U_i Ui?
-
S G ( h τ n − 1 ) SG(h_\tau^{n-1}) SG(hτn−1),这个停止梯度(stop-gradient)是什么意思,有什么作用呢?
间换取时间的方法,消耗显存或内存。
问题
-
在注意力分数计算 t e r m ( c ) term (c) term(c)和 t e r m ( d ) term (d) term(d)中,为什么要用可训练的参数 u , v u,v u,v替换 U i U_i Ui?
-
S G ( h τ n − 1 ) SG(h_\tau^{n-1}) SG(hτn−1),这个停止梯度(stop-gradient)是什么意思,有什么作用呢?
-
能不能采用全局绝对位置编码呢?