Pretrained-Model-02-Transformer-XL阅读笔记
文章题目:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
发表会议及时间:2019-ACL
1、背景知识
2、相关工作
Valilla Transformer ( https://arxiv.org/abs/1808.04444 )的训练和测试阶段信息流过程
训练阶段:
测试阶段:
- 训练阶段:将文本分割为多个片段,进行单独的训练,片段之间的信息无法交流
- 测试阶段:首先使用X1~X4(假设片段长度为4)来预测X5,然后使用X2~X5的信息来预测X6,需要不断的迁移信息来进行预测,造成了时间的浪费
3、模型结构
参考博客:
https://www.lyrn.ai/2019/01/16/transformer-xl-sota-language-model/
https://blog.****.net/Magical_Bubble/article/details/89060213
针对上述问题,本文提出了Transformmer-XL,其中包括两个创新点
- 片段级递归机制
- 相对位置编码
3.1、片段级递归机制
为了解决 Vallina Transformer 训练过程中不同片段之间无法信息交流的问题,作者提出了片段级递归机制,与Vanilla Transformer的基本思路一样,Transformer-XL仍然是使用分段的方式进行建模,但其与Vanilla Transformer的本质不同是在于引入了段与段之间的循环机制,使得当前段在建模的时候能够利用之前段的信息来实现长期依赖性。处理过程如下图公式所示
在训练阶段,处理后面的段时,每个隐藏层都会接收两个输入:
- 该段的前面隐藏层的输出,与vanilla Transformer相同(上图的灰色线)。
- 前面段的隐藏层的输出(上图的绿色线),可以使模型创建长期依赖关系。
这两个输入会被拼接,然后用于计算当前段的Key和Value矩阵。对于某个段的某一层的具体计算公式如下:
- 其中,
表示第几段,n表示第几层,h表示隐层的输出
- SG() 表示在进行
+1 片段 信息处理时不再计算
片段的梯度
- 第二个公式则与 Transformer 中Q,K,V计算方法相同,不过此时的输入 拼接了上一个片段的隐藏状态
- 第三个公式则进行Transformer的计算
原则上只要GPU内存允许,该方法可以利用前面更多段的信息,测试阶段也可以获得更长的依赖。
训练阶段 :
测试阶段 :
- 其中绿色部分为segemnt-level recurrence机制,实际使用时的缓存的segemnt可以是不仅限于上一状态
- RNN的语言模型的recurrence dependency在同一层layer之间,而本模型可以在不同layer之间,因此depency
length为 O(N*L) - 在测试阶段,与vanilla Transformer相比,其速度也会更快。在vanilla Transformer中,一次只能前进一个step,并且需要重新构建段,并全部从头开始计算;而在Transformer-XL中,每次可以前进一整个段,并利用之前段的数据来预测当前段的输出。
3.2、相对位置编码
在原始的Vallina Transformer模型中,不同片段中相同位置采用的编码机制获得的编码结果是相同的,因此无法区分不同片段中相同位置的元素信息,因此本文提出了相对编码机制
3.3、加速计算小技巧
对应原文附录B
4、实验结果与分析
4.1、数据集介绍
4.2、实验结果对比