2019-06-27 Transformer-XL 笔记

  1. Transformer-XL是为了解决Transformer 对于Long-term 依赖问题而提出来了,那么Transformer对于Long-term dependency 的支持不好吗?

其实上面问题和“有了Transformer 之后还需要RNN吗?” 问题一样,要回答这个问题需要明确RNN 和Transformer的特点,Transformer天生就比RNN 快,并且Self-Attention 相当于是对有依赖的Tokens 建立短路,所有梯度更新自然要比RNN 快,但是Transformer获得高性能同时牺牲了RNN的Long-Term Dependency 功能,RNN 天生就具备将历史Token 作为当前Token的特征输入。所以Transformer 对于长文本来说是有硬伤的。故RNN 和Transformer 的取舍还要要依据具体任务而定。

  1. Al-Rfou 提出了基于Transformer 的长文本解决方案有问题问题吗?

有问题,否则就没有Transformer-XL了,具体问题如下:

  1. 将长文本分成长度相同的若干段,每个段独立训练,段和段之间没有信息交互,当前段看不到之前段的信息,造成Segment fragmentation 问题,并且段之间分开训练影响效果。
  2. 预测阶段根据段的长度,每次只移动一个Token位置,也就是说下一段和当前段的重合部分都需要重新计算,假设句子长度为L,段长为t,则计算次数为L(L-1),其中L(L-1)-(L/t)都是重复计算,效率低下。
  1. Transformer-XL提出有哪些创新点?

因为RNN 具有long-term能力,Transformer 对段内特征提取性能好,且计算速度快,所以Transformer-XL 主要是将RNN 和 Transformer 结合,并提出了Relative Position Encoding。它的Rnn Mechanism 和 Relative Position Encoding的结合不仅解决了Long-term dependency 问题而且还解决了segment fragmentation 问题。

  1. 什么是Segment-leve Recurrence?

Segment-leval 相对于vanilla Transformer 而言,输入发生了变化,Al-Rfou 提出的Segment Transformer 是将长句分成fixed-length 的segment,训练时各segment 之间没有信息交互,Transformer输入是原始Word Embedding + Position Encoder,Transformer-XL 为了解决信息交互问题,提出了Segment-Level Recurrence,每个Segment 计算完成之后,就将各层各Token的输出缓存,以备后续Segment使用。假设当前Segment,第一层输出为 (l0,l1,l2,l3),则下一个Segment 的输出除了vanilla 输入 还有前一层的输出结果,t0的输入包括(l1,l2,3),具体参看论文。

  1. Segment-leve Recurrence带来了什么好处?
  1. 训练时将pre-Segment 的信息传递到了after-Seggment,提高信息使用效率,对性能肯定有提升
  2. 提高Token的依赖长度,vanilla Trans 中Token 依赖长度就是Segment 长度,而Segment-Level Recurrence 的依赖长度随着层数提高程指数增长,大大提高long-term 感知范围
  3. 在预测阶段,可以以Segment 为单位处理输入,因为pre-Segment 的结果都在缓存中,after-Segment可以直接使用,不需要重新计算,将计算复杂度从L*(L-1)降低到L/t
  1. 什么是 Relateive Position Encoding?

RNN + Transformer 之后就需要解决一个段内Position Encoder 问题,因为如果使用Vanilla Transformer 的PE,则任意两个段相同位置的PE是相同的,这显然是不正确的因为他们在句子中的绝对位置并不一样,对最终结果的权重也不同,所以Transformer-XL提出了Relative Position Encoding,其主要是将原来的Transformer 的Position Encoding 替换成了相对位置Encoder;如果将Transformer Attention公式展开,就会发现一共4个部分,可以分别从上下文角度和位置角度看待,Trans-XL 是将展开的PE替换成了相对Encoder,将Key,拆成两部分分别对应Content Key 和Position Key,此外还有两个待训练的向量,表示在计算 Attention score时 Content,和Position的权重。

以上只是个人拙见,有错误处还请各位指出。。。

你可能感兴趣的:(2019-06-27 Transformer-XL 笔记)