论文:《Transformer Quality in Linear Time》 博客:FLASH:可能是近来最有意思的高效Transformer设计 开源地址:https://github.com/ZhuiyiTechnology/GAU-alpha

    本文主要记录了苏神博客《FLASH:可能是近来最有意思的高效Transformer设计》的学习笔记,方便日后快速回忆相关内容。
    2022-06-15-FLASH&GAU学习笔记 - 图1
    Flash模型脉络图
    文章摘要:

    本文介绍了Google新出的一个高效Transformer工作,里边将Attention和FFN融合为一个新的GAU层,从而得到了Transformer变体FLASH-Quad,作者还进一步提出了一种“分块混合”线性化方案,得到了具有线性复杂度的FLASH。目前的实验结果显示,不管FLASH-Quad还是FLASH,跟标准Transformer相比都是更快、更省、更好。

    FLASH 的优势:

    1、提出了一种新的Transformer变体,它依然具有二次的复杂度,但是相比标准的Transformer,它有着更快的速度、更低的显存占用以及更好的效果; 2、提出一种新的线性化Transformer方案,它不但提升了原有线性Attention的效果,还保持了做Decoder的可能性,并且做Decoder时还能保持高效的训练并行性。

    FLASH&GAU要点:

    1. 标准的Transformer其实是Attention层和FFN层交替构建的;

    image.png
    image.png

    1. GLU(Gated Linear Unit,门控线性单元)对FFN做了改进,效果更好

    image.png
    image.png

    1. GLU各个token之间没有进行交互,也就是矩阵U,V 的每一行都是独立运算的。为了补充这点不足,加入Attention矩阵来融合token之间的信息,实现Attention和FFN的一个简单而自然的融合,也即 GAU(Gated Attention Unit,门控注意力单元)

    image.png
    image.png

    1. GAU示意图及其伪代码

    image.png

    1. FLASH-Quad:将Transformer的Attention+FFN换成了两层GAU(苏神比较过两层GAU的计算量和参数量大致相当于Attention+FFN组合)。只要一个头的GAU,就可以达到Transformer的多头注意力机制相同甚至更好的效果。尽管FLASH-Quad和Transformer都是二次复杂度,但FLASH-Quad效果更好、速度更快、显存占用量更低;
    2. 进一步将FLASH-Quad从二次复杂度降至线性复杂度,提出了 FLASH(Fast Linear Attention with a Single Head)。FLASH采取了“局部-全局”分块混合的方式:
      1. 分块:对于长度为n的输入序列,我们将它不重叠地划分为n/c个长度为c的块;
      2. 混合:将GAU的 Attention 和线性 Attention二者的结果结合起来,整合到GAU中,得到线性版本的GAU

    image.png
    image.png
    image.png

    1. 线性 Attention

    image.pngimage.png
    image.png