zoukankan      html  css  js  c++  java
  • Transformer模型---decoder

    一、结构

    1.编码器

    Transformer模型---encoder - nxf_rabbit75 - 博客园

    2.解码器

    (1)第一个子层也是一个多头自注意力multi-head self-attention层,但是,在计算位置i的self-attention时屏蔽掉了位置i之后的序列值,这意味着:位置i的attention只能依赖于它之前的结果,不能依赖它之后的结果。因此,这种self-attention也被称作masked self-attention。

    (2)第二个子层是一个多头注意力multi-head attention层,用于捕获decoder output和encoder output之间的attention。第三个子层是一个简单的全连接层。

    (3)和encoder一样:每个子层都使用残差直连,并且残差直连之后跟随一个layer normalization:LN;decoder所有层的输入、输出的向量维度也是$d_{model}=512$维。

    二、Tips

    1.使用multi-head attention的三个适用场景:

      encoder-decoder attention:使用multi-head attention,输入为encoder的输出和decoder的self-attention输出,其中encoder的self-attention作为 key and value,decoder的self-attention作为query

      encoder self-attention:使用 multi-head attention,输入的Q、K、V都是一样的(input embedding and positional embedding)
      decoder self-attention:在decoder的self-attention层中,deocder 都能够访问当前位置前面的位置

    2.decoder的masked self-attention

    注意encoder里面是叫self-attention,decoder里面是叫masked self-attention。

    这里的masked就是要在做language modelling(或者像翻译)的时候,不给模型看到未来的信息。

    3.优化

    三、Transformer vs CNN vs RNN

     1.假设输入序列长度为n,每个元素的维度为$d:{x_1,...,x_n}$,输出序列长度也为n,每个元素的维度也是d:${y_1,...,y_n}$,从每层的计算复杂度、并行的操作数量、学习距离长度三个方面比较Transformer、CNN、RNN三个特征提取器:

    1.每层的计算复杂度:

      考虑到n个key和n个query两两点乘,因此self-attention每层计算复杂度为$O(n^2*d)$

      考虑到矩阵(维度为$n*n$)和输入向量相乘,因此RNN每层计算复杂度为$O(n*d^2)$

      对于k个卷积核经过n次一维卷积,因此CNN每层计算复杂度为$O(k*n*d^2)$,如果考虑深度可分离卷积,则计算复杂度下降为$O(k*n*d+n*d^2)$

    因此:

      当$n<d$时,self attention要比RNN和CNN快;

      当$n>d$时,可以使用受限self attention,即:计算attention时仅考虑每个输出位置附近窗口的r个输入。这将带来两个效果:每层计算复杂度降为$O(r*n*d)$

      最长学习距离降低为r,因此需要执行$O(n/r)$次才能覆盖到所有输入。

    2.并行操作数量:

    可以通过必须串行的操作数量来描述:

      对于self-attention,CNN,其串行操作数量为O(1),并行度最大;

      对于RNN,其串行操作数量为O(n),较难并行化。

    3.最长计算路径:

    覆盖所有输入的操作的数量

      对于self-attention,最长计算路径为O(1);对于self-attention stricted,最长计算路径为O(n/r);

      对于常规卷积,则需要O(n/k)个卷积才能覆盖所有的输入;对于空洞卷积,则需要$O(log_kn)$才能覆盖所有的输入;

      对于RNN,最长计算路径为O(n)

    4.作为额外收益,self-attention可以产生可解释性的模型:

    通过检查模型中的注意力分布,可以展示与句子语法和语义结构相关的信息。

    参考文献:

    【1】BERT专题系列(二):Transformer (Attention is all you need)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

    【2】NLP学习(5)----attention/ self-attention/ seq2seq/ transformer - Lee_yl - 博客园

  • 相关阅读:
    C++中使用stringstream进行类型转换操作
    代理模式
    观察者模式 VS 责任链模式
    10.模板方法模式
    2.里氏替换原则
    单一职责原则
    规格模式
    策略模式的扩展——策略枚举
    策略模式 VS 桥梁模式
    原型模式【下】
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/11945195.html
Copyright © 2011-2022 走看看