X-former系列(Transformer大家族)

Transformer提出大致时间线:

Transformer 分类:

目录

  • Vanilla Transformer(2017)
  • Reformer(2020.1)
  • Linear Transformer(2020.1):注意力计算线性复杂度
  • Performer(2020.9)
  • Longformer(2020.4)
  • Informer(2020.12)
  • Autoformer(2021.6)
  • Transformer-XL(2019.1):引入跨层的循环机制,支持长距离依赖建模
  • Compressive Transformer(2019.11):增加压缩记忆模块,增长捕捉的语义长度
  • Infinite-former(2021.9):使用连续空间注意力框架,它的注意力复杂性与上下文的长度无关

1. Vanilla Transformer(2017)

注意力机制:

理想情况下,位置嵌入(Positional Encoding)的设计应该满足以下条件:

  • 它应该为每个字输出唯一的编码
  • 不同长度的句子之间,任何两个字之间的差值应该保持一致
  • 它的值应该是有界的

相对位置编码Sinusoidal Position Encoding):可区别位置关系但无法区别前后关系
绝对位置编码Learned Positional Embedding):不同位置随机初始化可学习参数编码

绝对位置编码展开:

2. Reformer(2020)

一个基于局部敏感哈希(LSH)的注意力模型,引入了可逆的Transformer层,有助于进一步减少内存占用量。复杂度从 O(N^2) 降为 O(N logN),N 为句子长度。

模型的关键思想,是附近的向量应获得相似的哈希值,而远距离的向量则不应获得相似的哈希值,因此被称为“局部敏感”。

并且,标准残差 Layer 替换为可逆残差 Layer,使得训练中只存储一次激活值,而不是 N 次,N 为 Layer 数量。

3. Linear Transformer(2020)

【论文翻译】

这个模型通过使用基于核的自注意力机制、和矩阵产品的关联特性,将自注意力的复杂性从二次降低为线性O(N)。已经被证明可以在基本保持预测性能的情况下,将推理速度提高多达三个数量级。

  • 将softmax  attention 线性化: 使用特征图的线性点积来逼近 softmax
  • 具有线性复杂度和常数内存的自回归变换器模型

Attention自注意力机制广义公式,Q 和 K 利用相似(sim)函数计算出一个分数,之后除以分数总和获得 Attention 权重,之后去 V 里取值:

接着用核函数 ,对 sim 函数进行处理,再利用结合律,将 Q 运算提出来

简化

4. Performer(2020)

这个模型利用正交随机特征(ORF),采用近似的方法避免存储和计算注意力矩阵。
 

5. Autoformer

Autoformer算法与代码分析_布川酷籽的博客-CSDN博客

6. Transformer-XL(2020)

原Transformer的问题:

  • segments之间独立训练,所以不同的token之间,最长的依赖关系,就取决于segment的长度;
  • 出于效率的考虑,在划分segments的时候,不考虑句子的自然边界,而是根据固定的长度来划分序列,导致分割出来的segments在语义上是不完整的(context fragmentation

Transformer-XL很有RNN的味道:设法利用之前的segment留下的信息eval时滚动向前,但每次要重新计算整个segment,eval的时候滚动向前,不用重复计算前面segment因为每次在滚动向前,这样就需要使用相对位置编码,而不能使用绝对位置编码。

围绕如何建模长距离依赖,提出Transformer-XL:

Segment-Level Recurrence 片段递归

提出片段级递归机制(segment-level recurrence mechanism),引入一个记忆(memory)模块(类似于cache或cell),循环用来建模片段之间的联系。这部分输出是通过cache的机制传导过来,所以不会参与梯度的计算。原则上只要GPU内存允许,该方法可以利用前面更多段的信息。

 在预测阶段
如果预测 x4 ​我们只要拿之前预测好的 [x1, x2, x3] 的结果拿过来,直接预测。同理在预测 x5 ​的时候,直接在 [x1,x2,x3,x4] 的基础上计算,不用像Vanilla Transformer一样每次预测一个字就要重新计算前面固定个数的词。

Relative Position Encodings 相对位置编码

在memory的循环计算过程中,避免时序混淆,需要位置编码可重用

其中:

  • R_{i-j} 表示的是i和j的相对距离,是sinusoid encoding matrix,没有额外的训练参数。实际上和vanilla的位置编码一样的,关键是这里的位置编码只给key用,而key的长度,在第一个片段和query的长度一样,之后的片段,key长度=上一个片段hidden state长度+当前片段key的长度,因此 R_{i-j} 是能够表示出key的相对距离的
  • 因为无论query在序列中的绝对位置如何,其相对于自身的相对位置都是一样的与在序列中的绝对位置无关,应当保持不变.。因此用两个可训练的参数u、v
  • vanilla版本的key位置编码与embedding都是采用同样的变化矩阵,xl中,把key的位置编码和embedding分别用了不同的线性变化

每个分项分别代表的含义如下:

  • (a)描述了基于内容的Attention,即没有添加原始位置编码的原始分数;
  • (b)描述了内容对于每个相对位置的bias,即相对于当前内容的位置偏置;
  • (c)描述了全局的内容偏置,用于衡量key的重要性;
  • (d)描述了全局的位置偏置,根据query和key之间的距离调整重要性。

7. Compressive Transformers(2020)

【代码】

这个模型是Transformer-XL的扩展,但不同于Transformer-XL,后者在跨段移动时会丢弃过去的激活,而它的关键思想则是保持对过去段激活的细粒度记忆。

压缩如下:

其中d是隐藏层的维度,c是压缩比例,c越大 压缩越多

压缩算法步骤

首先 有 2个memory: 一个是存放正常的前几个segment的hidden state ,计做 m, 一个是存放压缩的记忆模块 cm。

压缩函数 f_c不同构建方式:

  • max/mean pooling: kernel 和步长设置为 压缩比例 c。 这个是最快最简单的baseline。
  • 1D convolution :kernel和步长也是设置为c.
  • dilated convolutions :膨胀卷积。卷积压缩方法 包含需要训练的参数。
  • most-used :memories 存储 通过他们的平均attention 和最常使用来存储。这个来源于垃圾回收机制,不常用的记忆模块被删除掉。

Compressive Transformer 和 Transformer-XL比较

  计算复杂度

7.  Infinite-transformer

References

A Survey of Transformers(2021),https://arxiv.org/abs/2106.04554

Efficient Transformers: A Survey(2020)

Transformers Meet Visual Learning Understanding: A Comprehensive Review(2022)

Transformer 是 CNN 是 GNN 是 RNN ? - 知乎

有哪些令你印象深刻的魔改transformer?

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值