↑ 点击蓝字 关注极市平台

作者丨科技猛兽

审稿丨邓富城

编辑丨极市平台

极市导读

本文为详细解读Vision Transformer的第五篇,主要介绍了MIT HAN LAB 提出的2种构建轻量级Transformer的方法:HAT 和 Lite Transformer,它们向在边缘设备上部署移动级 NLP 应用迈进了一大步。>>本周四晚八点极市直播-邓欣:TIP 2021-多曝光图像融合及超分辨的联合实现方法

考虑到每篇文章字数的限制,每一篇文章将按照目录的编排包含三个小节,而且这个系列会随着Vision Transformer的发展而长期更新。

搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(一)

搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(二)

搞懂Vision Transformer 原理和代码,看这篇技术综述就够了(三)

搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(四)

本文目录

11 Efficient Transformer:HAT:高效的硬件感知Transformer
(来自MIT韩松团队)
11.1 HAT原理分析

12 Efficient Transformer:Lite-Transformer:远近注意力机制的轻量化Transformer
(来自MIT韩松团队)
12.1 Lite-Transformer原理分析

Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息。

虽然推出还不到 4 年,Transformer 已成为自然语言处理(NLP)领域里不可或缺的一环。然而这样流行的算法却需要极高的算力才能实现足够的性能,这对于受到算力和电池严格限制的移动端来说有些力不从心。Transformer 的高性能依赖于极高的算力,这让移动端 NLP 严重受限。本文所介绍的2个工作都是 MIT 与上海交大的研究人员提出的高效的移动端 NLP 架构HAT 和 Lite Transformer,它们向在边缘设备上部署移动级 NLP 应用迈进了一大步。

作者简介:

HAT 和 Lite Transformer 这两个研究都是来自MIT HAN LAB,是由 MIT 电气工程和计算机科学系助理教授韩松领导的。韩松的研究广泛涉足高效的深度学习模型和算法以及高效的计算机体系结构,他在斯坦福读博期间提出的 Deep Compression 模型压缩技术曾获得 ICLR2016 最佳论文,论文 ESE 稀疏神经网络推理引擎 2017 年曾获得芯片领域顶级会议——FPGA 最佳论文奖,引领了世界深度学习加速和深度学习模型压缩的研究,实验室成果对业界影响深远。

11 Efficient Transformer:HAT:高效的硬件感知Transformer (ACL 2020)

论文名称:HAT: Hardware-Aware Transformers for Efficient Natural Language Processing

论文地址:

HAT: Hardware-Aware Transformers for Efficient Natural Language Processing

https://arxiv.org/abs/2005.14187

  • 11.1 HAT原理分析:

Transformer模型在视觉和自然语言处理任务中已经无处不在,而且目前也已有了一些针对Transformer结构进行简化的工作,但是它们都没有考虑到不同硬件对模型结构的影响,即要想把Transformer部署在具体的硬件上面一直都是个难题。这个难题具体是:

神经网络模型 (Transformer)计算量很密集,而硬件平台 (微控制器,移动设备等)往往是资源约束的 (resource-constrained),导致模型的推理过程延迟很长,极其影响用户的体验。同时,模型参数量过大,对部署十分不利。

比如要对一个只有30个词的句子做机器翻译,Transformer-Big model就需要约13 GFLOPs的计算量,在树莓派 (Raspberry Pi)上的Latency将超过20s。

这类问题的解决方法,韩松老师实验室--MIT HAN LAB已经有了大量探索,而且已经有了比较成熟的自动机器学习流水线(AutoML-Pipeline)来解决,具体可以参考下面的链接:

科技猛兽:解读模型压缩3:高效模型设计的自动机器学习流水线

https://zhuanlan.zhihu.com/p/299422728

这个自动机器学习流水线(AutoML-Pipeline)具体来说包含3步:

输入:模型要部署的目标硬件设备。约束条件(Latency,Energy Consumption,Model Size,Memory,FLOPs等)。

输出:部署的模型。

中间过程:

AutoML搜索最适宜的模型架构,最大化精度。


对这个模型进行压缩,减少参数量。


对压缩后的模型进行量化,进一步减少内存占用。


本文介绍的HAT这种方法主要是第1步,即:借助神经架构搜索 (NAS) 的方法,针对不同的硬件,搜索适合该硬件的最佳的Transformer结构。实验表明,在不同硬件下,得到的Transformer结构相比其他模型更小、更快,而且不损失精度,如下图1所示。而且,HAT这种方法可以自然地与第2步模型压缩,第3步量化技术相结合。

图1:借助神经架构搜索 (NAS) 的方法,针对不同的硬件,搜索适合该硬件的最佳的Transformer结构。

在把Transformer往硬件设备部署时,我们往往会忽略掉2点:

1. 计算量FLOPs不可以精确地反映模型推理的延迟Latency。

我们可以从下图2来理解,图2是在3种不同的硬件设备(树莓派ARM CPU,Intel CPU和Nvidia GPU)上面得到的结果,图2说明,在Raspberry ARM CPU上,Embedding dim的大小影响更大,但是对Intel CPUNVIDIA GPU而言,Embedding dim就几乎没有影响。此外,在Raspberry ARM CPU上,FLOPS和Latency大致呈线性关系,但是在Intel CPUNVIDIA GPU上,只有模型的层数(Layer number)呈现这种关系,对FFN的隐藏层维数hidden dim而言,3种硬件设备上相似的FLOPs会导致完全不同的Latency。这说明了,在设计Transformer的时候,如果要追求更加精细的结果,需要考虑到不同硬件的实际条件。

图2:计算量FLOPs不可以精确地反映模型推理的延迟Latency

2. 不同的硬件偏好不同的Transformer架构。

在一个硬件上优化的Transformer模型对于另一个硬件设备来说是次优的,因为Latency受不同硬件平台上不同因素的影响。我们可以从下图3来理解,图3是WMT'14 En-De任务的BLEU score 以及所测量得到的延迟。可以发现针对GPU设计的 HAT (GPU) 在ARM CPU上面就不够高效,反之亦然。

图3:不同的硬件偏好不同的Transformer架构

所以本文的初衷是借助NAS,针对不同的硬件,搜索适合该硬件的最佳的Transformer结构。同时,将Latency作为反馈信号,反馈给搜索过程。这样,HAT就可以搜索各种硬件的专用模型了。

整个HAT方法的流程如下图4所示:首先我们需要构造一个很大的搜索空间,叫做SuperTransformer,它包括了design space中的所有candidates。作者将它训练到收敛,通过权值共享,就能很方便地得到大量的SubTransformer。最后执行Evolutionary Search,并把神经网络模型在目标硬件上的Latency直接作为反馈信号搜索出适合这个目标硬件设备的最佳Transformer。从SuperTransformer中采样子网络,不同子网络中相同的部分共享权重 (Weight Sharing)。如此一来,就不必为每个自网络训练单独的模型,这就大大加快了搜索速度。最后从头训练搜索得到的SubTransformer。通过实验显示,本文搜索出的模型结构不仅更小更快,而且在效果上甚至更好,超过了Evolved Transformer等结构。

图4:HAT方法的流程

HAT具体做法-搜索空间:

NAS方法最重要的问题是搜索空间的设计,HAT在设计搜索空间时打破了Transformer 结构设计的2条常规,分别如图5和7所示,即:

  • 所有 decoder layers 仅仅关注最后一个 encoder layer。

  • 所有layers是identical的。

Arbitrary Encoder-Decoder Attention

先看第1条:解码器的每一层同时关注编码器的多层而不仅仅是最后一层,作者将其命名为Arbitrary Encoder-Decoder Attention,如图5所示。常规Transformer的设计中,所有 decoder layers 仅仅关注最后一个 encoder layer的输出,这就形成了一个信息瓶颈 (information bottleneck),如下图5左侧所示,强制所有的 decoder layers 只学习那些高级的特征,而忽略大量的低级别的信息。Arbitrary Encoder-Decoder Attention的目的就是学习编码器和解码器之间最合适的连接,如下图5右侧所示。该机制没有引入任何额外的参数,使得每个 decoder layer 可以选择多个 encoder layer。

图5:HAT打破常规1:All decoder layers only attend to the last encoder layer

下图6进一步阐释了Arbitrary Encoder-Decoder Attention的机制。一个 decoder layer 中的每个attention可以关注来自多个 encoder layer 的输出,充分利用 encoder layer 提取的特征。来自 encoder layer 的Key和Value在sentence length这个维度被concat在一起,送到cross-attention模块中。

图6:Arbitrary Encoder-Decoder Attention机制。

Heterogeneous Transformer Layers

再看第2条:所有layers可以不是identical的,如下图7所示。以前的Transformer对所有layers重复一个架构。但对HAT的Transformer而言,可以变化的比较重要的参数有:Embedding dim,Hidden dim,Head数,Layer数,再加上第1条解码器的每一层同时关注编码器的多层而不仅仅是最后一层。以上就定义了整个搜索空间。

这里解释下Embedding dim 和 Hidden dim 的区别:

我们知道Q, K, V可以看做是矩阵,其第1维是Sequence length,代表序列的长度。第2维就是Embedding dim ,代表序列中单个向量的长度。

Hidden dim来自FFN层,我们知道FFN会先把[N, Embedding dim]的矩阵变成[N, expansion ratio × Embedding dim]的矩阵,那这个Hidden dim = expansion ratio × Embedding dim。

图7:HAT打破常规2:All the layers are identical

这些超参数的具体设置为:

Embedding dim设置为:[512, 640]

hidden dim设置为:WMT task:[1024, 2048, 372]; IWSLT task:[2048, 1024, 512]

head number设置为:WMT task:[4, 8]; IWSLT task:[4, 2]

decoder layers设置为:[1, 2, 3, 4, 5, 6]

encoder layers统一设置为:[6],因为encoder的Latency只占总Latency的不到5%。

这样定义搜索空间之后,总的SubTransformer数量约为个。

所以,如果要训练所有的模型并且来评估它们的BLEU值,显然是不可能的。于是,本文提出SuperTransformer——作为所有可能的模型结构的一个“父类”——来囊括所有可能的模型。SuperTransformer是搜索空间中“最大”的一个模型,所有的其他模型都是SuperTransformer中的一个子网络,并且共享相同的部分。一个子网络只需要取SuperTransformer中的前端一部分参数即可。

下图是一个示例。蓝色部分表明:如果搜索空间中Embedding维数最大为640,当前想要测评的模型维数是512,那么我们只需要取整个大矩阵的前512维。橙色部分同理:如果搜索空间中Hidden维数最大允许是1024,而当前考虑的模型是768,也只需要取前768维即可。

图8:SuperTransformer的权重共享,一个子网络只需要取SuperTransformer中的前端一部分参数即可。

在SuperTransformer训练中,对所有可能的SubTransformer进行统一采样,并更新相应的权重。在实践中,SuperTransformer只需要像普通Transformer模型一样接受相同步骤的训练,速度快,成本低。经过训练后,我们可以直接在验证集上评估所有的SubTransformer的性能。

HAT具体做法-搜索策略:

给定一个目标硬件与它对应的Latency要求,我们执行Evolutionary Search来找到一个令人满意的SubTransformer。评估SubTransformer的硬件延迟有两种方法:

  • 在线方法,即在搜索过程中测量模型的Latency

  • 离线方法,我们训练一个延迟预测器 (Latency Predictor) 来提供延迟。

作者在实做中使用了离线方法。因为在搜索过程中,我们需要评估所有SubTransformer的性能,那么使用真实数据对每个模型都测量它们的Latency这一过程将大量耗时。基于此,作者提出使用Latency Predictor,这也是MIT HAN LAB的常用套路,在之前的HAQ,APQ中也有使用。即直接训练一个小的神经网络,输入模型结构,预测该模型在此硬件上的Latency。

问:延迟预测器 (Latency Predictor) 的输入和输出是什么?

答:输入是:

1. Encoder layer number, 2. Encoder Embedding dim,3. Encoder hidden dim

dim,4. Encoder average self-attention heads,

5. Decoder layer number,6. Decoder Embedding dim,7. Decoder hidden

dim,8. Decoder average self-attention heads,

9. average encoder-decoder attention heads,10. average number of encoder

layers each decoder layer attends (每个decoder层关注的encoder层数量的均值)。

输出是:Predicted Latency。

问:延迟预测器 (Latency Predictor) 的结构是什么?

答:MIT HAN LAB的很多文章都涉及了Latency Predictor,结构一般是3层的MLP,它的hidden dim本文为400,激活函数为ReLU。为什么用3层而不是1层,5层?因为1层预测不准,3层效果已经很好,超过3层将对准确率提升意义不大,白白增加模型参数。

乍一看这个方法似乎不靠谱,但是实际的效果却很好。如下图9所示。网络预测得到的Latency和实际的几乎没有差别,而我们需要做的,只是从每个硬件中采集真实的训练数据。本文为每个硬件提供了2000个样本,按照8:1:1的方法划分数据集。Latency Predictor只用在搜索过程中,在最后实验的时候还是用的真实测得的Latency。

图9:Latency Predictor很精确

作者使用进化算法来进行搜索过程。如下图10所示。Search Engine仅将Latency小于目标硬件Latency约束的SubTransformer添加到进化算法的种群Population中。进化算法的超参数设置为:一共进行30轮,种群数(population)设置为125,parents为25,mutation population为50,crossover population也为50。

图10:使用进化算法,联合SuperTransformer和Latency Predictor得到适合目标硬件设备的最优模型

下图是HAT的方法概览:

第1步就是定义搜索空间,之后训练一个SuperTransformer并从中采样子网络。

第2步是搜集实际目标硬件Hardware-Latency的数据。

第3步把这个数据训练Latency Predictor。

第4步是借助Latency Predictor,使用进化算法搜索得到最佳的模型结构。

第5步是重新训练搜索得到的模型,得到最终的Performance。

图11:HAT方法概览

总的来说本文的贡献有3点:

  • 基于不同硬件搜索不同的Transformer结构,和硬件实际条件更加契合。针对不同的硬件平台,可以得到低延迟推理的专用模型。(基于不同硬件搜索不同的网络架构其实在MIT HAN LAB之前已有在分类任务上实现。)

  • 提出SuperTransformer搜索范式,大大加快搜索速度 (创新点在arbitrary encoder-decoder attention和heterogeneous layer,搜索策略不新奇,依旧是One-Shot NAS)。

  • 得到了一些设计Transformer的启发,即:GPU更喜欢shallow 和 wide的模型,而ARM CPU更喜欢deep 和 thin的模型。

Experiments:

研究者在四个机器翻译任务和三种硬件平台上进行了实验和分析。四个任务为:WMT‘14 EN-De(英语 - 德语)、WMT’14 EN-Fr(英语 - 法语)、WMT’19 EN-DE(英语 - 德语)、IWSLT‘14 De-En(德语 - 英语);三种硬件为:配备 ARM Cortex-A72 CPU 的树莓派、Intel Xeon E5-2640 CPU 和 Nvidia TITAN Xp GPU。基线模型有Transformer, Levenshtein Transformer, Evolved Transformer,和 Lite Transformer。

下图是在En-De和En-Fr上,不同模型的Latency和BLEU值结果。比如最左侧的2个图是在Raspberry Pi 的 ARM CPU上,HAT比Transformer Big快3.0倍,并且小3.7倍多,甚至效果还更好;在Intel CPU、Nvidia GPU上也有不小的提升。在Nvidia GPU上,蓝色的点对应的是dimension scaling的结果,我们可以看到其连成的线段已经近乎垂直,这说明想靠着dimension scaling的方式减少模型的延迟是根本行不通的。

图12:En-De和En-Fr上,不同模型的Latency和BLEU值结果

下图13为HAT模型和原版Transformer,Evolved Transformer参数量,延迟,计算量,BLEU得分,训练的GPU时长,排放温室气体量以及云计算成本等各项指标的对比。相比于Baseline模型,HAT取得了大幅的加速以及模型参数的缩减。同时在训练时长方面,因为采用了One-Shot NAS的办法,所以优势巨大,因此导致了温室气体的排放量以及云计算成本的下降。

图13:参数量,延迟,计算量等不同指标的对比

专用模型的必要性

两个搜索得到的模型表现如下图14所示。可以看到,GPU 高效模型在 ARM CPU 上并不是最高效的,ARM CPU 高效模型在 GPU 上也不高效 (The efficient model for GPU is not efficient for ARM CPU and vice versa)。这进一步证明了为不同硬件设计专用模型的必要性。

图14:两个搜索得到的模型表现

与 Evolved Transformer 对比

在树莓派上运行 WMT' 14 EN-Fr (英语 - 法语) 任务时,相比 Evolved Transformer,HAT 可以取得 2.7 倍加速,3.7 倍模型压缩,3.2 倍计算量降低,并节省超过 1 万倍的搜索开销。

图15:与 Evolved Transformer 各种指标的对比

与 Levenshtein Transformer 和 Lite Transformer 对比

下图16为不同模型在树莓派上运行 WMT' 14 EN-De (英语 - 德语) 任务的对比。相比其他模型,HAT 可以获得最高的 BLEU 和最低的运行时间。值得注意的是,HAT 方法与 Levenshtein 和 Lite Transformer 中提出的新操作具有正交性 (Orthogonal),可以结合使用。

图16:不同模型在树莓派上运行 WMT' 14 EN-De (英语 - 德语) 任务的对比

与其他压缩方法相兼容

下图17为在 WMT’14 EN-Fr (英语 - 法语) 任务上,对 HAT 搜索模型进行量化的结果,在 4-bit 量化的情况下,HAT 模型与基线 Transformer 有相近的精度,但是模型大小可压缩 25 倍。

图17:HAT与其他压缩方法相兼容

不同硬件上得到的最好的结构

最后来看看使用HAT在不同硬件上得到的最好的结构是怎样的。如下图18所示,可以发现,对Raspberry Pi ARM CPU和NVIDIA GPU,HAT得到的模型结构是很不同的。二者在层数、维度数和Attention方式上都有差别。Raspberry Pi上搜索得到的模型是deep and thin,但GPU上搜索得到的模型是shallow and wide。GPU Latency 对 Embedding dim 和 hidden dim 不敏感,但Raspberry Pi对其敏感度很高。所以这可以用来指导手工设计:在GPU上,我们可以减少layers的同时增加Embedding dim 和 hidden dim,这样一方面能够降低Latency,另一方面也能保持高性能。

图18:HAT在不同硬件上得到的最好的结构

12 Efficient Transformer:Lite-Transformer:远近注意力机制的轻量化Transformer (ICLR 2020)

论文名称:Lite Transformer with Long-Short Range Attention

论文地址:

Lite Transformer with Long-Short Range Attention

https://arxiv.org/abs/2004.11886

  • 12.1 Lite-Transformer原理分析:

Transformer模型因其训练效率高、捕获长距离依赖能力强等特点,已经在自然语言处理中得到广泛应用。在此基础上,现代最先进的模型,如BERT,能够从未标注的文本中学习强大的language representation,甚至在一些很有挑战性的问答任务上超越人类。但它需要大量计算去实现高性能,比如一个Transformer模型翻译一个长度不超过30个单词的句子需要大约10G 的Mult-Adds。而这不适合受限于硬件资源和电池严格限制的移动应用,比如智能手机,手环,物联网设备等。那么如何减少Transformer的计算量呢?看了上面的HAT我们知道一种办法是通过减少Embedding size 。但是这存在的一个问题是:这样做在减少计算量的同时也削弱了Transformer捕获长距离和短距离关系的能力。

Lite-Transformer这项研究提出了一种高效的模块 —— LSRA其核心是长短距离注意力(Long-Short Range Attention,LSRA),其中一组注意力头(通过卷积)负责局部上下文建模,而另一组则(依靠注意力)执行长距离关系建模

这样的专门化配置使得模型在机器翻译、文本摘要和语言建模这3个语言任务上都比原版 transformer 有所提升,基于LSRA所构建的Lite Transformer达到了移动设备计算量所要求的500M Mult-Adds。以WMT 2014 English-German任务为例,在计算量限制为500M Mult-Adds或者100M Mult-Adds时,Lite Transformer的性能比原版 Transformer 的 BLEU 值比分别比 transformer 高 1.2或1.7。结合剪枝和量化技术,研究者进一步将 Lite Transformer 模型的大小压缩到原来的 5%。

对于语言建模任务,在大约 500M MACs 上,Lite Transformer 比 transformer 的困惑度低 1.8。值得注意的是,对于移动 NLP 设置,Lite Transformer 的 BLEU 值比基于 AutoML 的Evolved Transformer 高 0.5,而且AutoML方法所需要的搜索算力超过了250 GPU years,这相当于5辆汽车的终身碳排放量。

Lite Transformer具体方法:

我们将用于文本处理的Self-attention称为1-D attention,用于图像识别的Self-attention称为2-D attention,用于视频处理的Self-attention称为3-D attention。首先看看Self-attention的计算复杂度,如下图19所示:

图19:Self-attention的计算复杂度

图19中的  代表Sequence的长度,  代表Embedding dim。所以Self-attention的计算复杂度为:  。这步近似是因为通常对于图像或者视频来讲,  通常很大。比如说16帧112 × 112的视频,  。

这对于整个Transformer模型的计算量来说有什么坏处?

因为Transformer模型里面的卷积层和FFN的计算量与  呈线性关系,而Transformer模型里面的Self-attention的计算量与  呈平方关系(如上面推导)。所以整个Transformer模型的计算量当  增大时也同样会变得很大。

如何解决这个问题呢?

首先  一般是不能改变的,因为句子,图片或者视频的大小一般是根据数据集定的,不能变化。那么现在能变化的是Embedding dim,也就是这个  。那降低这个Embedding dim会带来什么问题呢?

我们先从另一个角度理解Transformer的结构,如下图20所示。图20上面这个图代表Transformer的1个block,现在我们换个角度,用下面这个图的划分方式来理解。每个block先通过FFN降低维度,再经过Self-attention处理,再通过FFN升高维度。我们把这种设计成为bottleneck design。所以我们可以发现传统Transformer结构的一个非常不好的地方,即:如图21所示,传统的Transformer结构把大量的计算都花费在了FFN结构身上,而且,FFN结构的计算复杂度是  而,Self-attention的计算复杂度是  。当  越小时,FFN结构所占用的计算复杂度的百分比就越大,对于文本翻译这类任务,  一般取几十;对于图像处理这类任务, 一般取几百。所以这种情况对于文本翻译这类任务尤其严重。

那么把大量的计算都花费在了FFN结构身上有什么坏处呢?

不论是文本处理还是图像处理的任务,都需要对序列上下文的关系进行建模,而这个建模的工作是靠Self-attention来完成的。但如果我们像上面预设的减少Embedding size  ,就会使得Self-attention layer的feature dimension减得很小,势必会影响Self-attention layer的性能。而FFN layer却占用了大量的计算量,这就是传统的Transformer结构的不合理之处,即:由于在NLP任务中通常  较小,导致有用的Self-attention layer所占用的计算量比例很小,减少Embedding size会严重影响Self-attention layer的性能,使得我们无法在保证性能的前提下大幅减少计算量。

图20:从另1个角度理解Transformer的结构

图21:传统的Transformer结构把大量的计算都花费在了FFN结构身上

所以作者认为,bottleneck design 对于1-D Self-attention layer来说不是最优的,所以作者首先设计了如下图22所示的Flattened Transformer Block,它使得特征在进入Self-attention layer之前不进行降维,使得attention layer占据了绝大部分计算量。这样的好处是为进一步优化留出更大的空间。作者还在WMT' 14 En-Fr数据集上测试了性能,可以在稍大一点的计算中获得相当的性能,而计算量可以通过LSRA进行大幅降低而不影响性能。

对比一下之前的方法:

之前想通过减少Embedding dim来降低计算量,但是由于 bottleneck design 的缺点,使得Self-attention受到了严重的影响,影响了模型的性能。

现在通过减少LSRA来降低计算量,由于 Flattened Transformer Block,使得计算量可以通过LSRA进行大幅降低而不影响性能。

图22:Flattened Transformer Block使得attention layer占据大部分计算量

如下图23所示为Self-attention layer的可视化,每个格子代表原句的每个单词和目标句子的每个单词之间的关系权重大小。颜色越深表示关系越强。随着权重的增加(颜色加深),源句中的第 个词更加注意目标句中的第  个词。这个可视化图有2个特点,即:稀疏和对角线。稀疏,如图中的蓝色虚线部分所示;对角线,如图中的黄色虚线部分所示。即:Self-attention layer同时捕捉到了稀疏和对角线这2种模式化特征。它们代表了一些特定单词之间的关系:稀疏表示长距离信息间的关系,对角线表示近距离信息间的关系。研究者将前者称为全局 (global) 关系,将后者称为局部 (local) 关系。

图23:Self-attention layer的可视化

那么Self-attention同时捕获长距离信息间的关系近距离信息间的关系,这看似很合理,但是实际上却并不高效。为什么呢?因为这使得Self-attention足够灵活 (Flexible),但不够专门化 (Specialized)。

这句话是什么意思?我们以硬件设计为例,CPU是一种非常general-purpose的硬件设备,换句话讲,CPU非常灵活;而FPGA是一种非常specialized的设备。但是,CPU 等通用硬件的效率却比 FPGA 等专用硬件低。所以作者认为,看似非常灵活的Self-attention实际上是非常低效的,而我们需要的是足够专门化的模块,以得到高效率。

通俗地讲,我们希望Self-attention这个模块更加专门化一点。为了解决该问题,该研究提出一个更专门化的架构,即长短距离注意力 (LSRA)。

图24:以硬件设计为例解释Flexible与Specialized的优缺点

长短距离注意力 (LSRA)哪里专门化呢?在翻译任务中,注意力模块必须捕获全局和局部上下文信息。LSRA 模块遵循两分支设计,如下图25所示。左侧注意力分支负责捕获全局上下文,右侧卷积分支则建模局部上下文。研究者没有将整个输入馈送到两个分支,而是将其沿通道维度分为两部分,然后由后面的 FFN 层进行混合。这种做法将整体计算量减少了 50%。

图25:LSRA模块

左侧分支处理全局信息:是正常的Self-attention模块,不过通道维度减少了一半。

右侧分支处理局部关系:一个自然的想法是对序列应用卷积。为了进一步减少计算量,研究者将普通卷积替换为轻量级的版本,该版本由线性层linear layers和Depth-wise convolution组成。

这里的卷积为1维的Depth-wise Convolution

这里的GLU模块出自论文:Language Modeling with Gated Convolutional Networks,下面简单介绍下GLU模块:

目前语言模型主要基于RNN,这篇文章提出了一种新颖的语言模型,仿照LSTM中的门限机制,利用多层的CNN结构,每层CNN都加上一个输出门限。

图26:GLU模型

GLU模型:

公式中的  是上一层的输出向量 (或者初始输入的词序列向量),  ,。  为词序列的长度,  的词向量的维度,  为卷积核的大小,  ,  为偏置。最后每层的输出每个词的向量表示:。(  为输入,  为模型的层数)。最后把  个层stack起来以后,再乘以linear transformation  和softmax 即得到上下文每个词的representation  。

总之,通过这种方式,研究者将注意力模块和卷积模块并排放置,引导它们对句子进行全局和局部的不同角度处理,从而使LSRA模块更加专门化,以求实现更高的效率。

下图27为原版Transformer模型以及使用LSRA模块得到的Transformer模型的attention weights的可视化结果。显然,LSRA中的Self-attention模块不试图对全局上下文和局部上下文都进行建模,而是只关注全局上下文捕获(因为没有对角线),而将局部上下文捕获留给卷积分支

图27:原版Transformer模型以及使用LSRA模块得到的Transformer模型的attention weights的可视化结果

总的来说本文的贡献有3点:

  • 发现bottleneck design的结构对于1-D attention (文本处理) 来说不是最优的。

  • 提出一种多分支的特征提取器 Long-Short Range Attention (LSRA),其中卷积操作帮助捕捉局部上下文,而attention用来捕捉全局上下文。

  • 基于LSRA所构建的Lite Transformer达到了移动设备计算量所要求的500M Mult-Adds,在3种任务上获得了一致的性能提升,与AutoML-based方法Evolved Transformer相比也获得了性能的提升,并大大减少训练成本。

Experiments:

首先我们介绍下Transformer模型的设计目标,具体来说就是计算量和模型大小的目标值应该怎么选择。

计算量目标:一个ARM Cortex-A72 mobile CPU的算力大概是48 GFLOPs,如果想要每秒完成50个句子的翻译,那么Transformer模型翻译每个句子的计算量上限就是960M FLOPs (480M Mult-Adds)。所以我们把机器翻译任务的计算量要求设置为:翻译一个长度为30个单词的句子的计算量低于500M Mult-Adds (or 1G FLOPs)

参数量目标:MobileNet 设置为7M parameters限制,这里设置为近似值10M。

数据集和评估

作者在机器翻译、文本摘要和语言建模三个任务上进行了实验和评估。

具体而言,机器翻译任务使用了三个基准数据集:IWSLT' 14 德语 - 英语 (De-En)、WMT 英语 - 德语 (En-De)、WMT 英语 - 法语(En-Fr)。

文本摘要任务使用的是 CNN-DailyMail 数据集。

语言建模任务则在 WIKITEXT-103 数据集上进行。

机器翻译实验结果:

IWSLT 实验结果

下图28为Lite Transformer 在 IWSLT' 14 De-En 数据集上的定量结果。并与 transformer 基线方法和 LightConv 做了对比。在大约 100M Mult-Adds 时,Lite Transformer 模型的 BLEU 值比 transformer 高出 1.6。

图28:IWSLT'14 De-En 数据集结果

WMT 实验结果

下图29为Lite Transformer 在 WMT' 14 En-De and WMT' 14 En-Fr 数据集上的定量结果。并与 transformer 基线方法做了对比。Lite Transformer在总计算量和模型参数量之间实现了更好的平衡。在大约 100M Mult-Adds 时,Lite Transformer 模型的 BLEU 值比 transformer 分别高出了 1.2和1.7;在大约 300M Mult-Adds 时,Lite Transformer 模型的 BLEU 值比 transformer 分别高出了 0.5和1.5。

图29:WMT' 14 En-De and WMT' 14 En-Fr 数据集结果

WMT En-Fr数据集实验结果的trade-off曲线如下图30所示。

图30:WMT En-Fr数据集实验结果的trade-off曲线

与其他压缩方法相兼容

与HAT方法一样,Lite Transformer方法也与其他几个经典的模型压缩方法正交,例如剪枝和量化,如图31所示。作者使用K-means将模型权重量化为8位,并根据每一层的敏感度对模型进行剪枝。利用这两种模型压缩技术,作者实现了18.2倍模型大小的压缩,而BLEU分数的下降可以忽略不计。

图31:Lite Transformer方法也与其他几个经典的模型压缩方法正交

与 Evolved Transformer 对比

相比 Evolved Transformer,在大约 100M Mult-Adds 时,Lite Transformer 模型的 BLEU 值比 Evolved transformer 高出了 0.5;在大约 300M Mult-Adds 时,Lite Transformer 模型的 BLEU 值比 Evolved transformer 高出了 0.2。

图32:与 Evolved Transformer 各种指标的对比

总结:

本文介绍了 MIT HAN LAB 提出的2种构建轻量级Transformer的方法。HAT 通过NAS方法,结合延迟预测器,搜索Super Transformer的最优解,Lite-Transformer通过设计轻量化的长短距离注意力 (LSRA) 模块,遵循两分支设计,左侧注意力分支负责捕获全局上下文,右侧卷积分支则建模局部上下文,减少整体的计算量。在设计轻量化的Transformer的时候,一般的想法是从 Embedding dim,Hidden dim,Head数,Layer数,解码器关注的编码器位置 这五个维度减少Transformer的model size,必要时可以从诸如LSRA的轻量化结构入手。

推荐阅读

搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(四)

2021-03-16

搞懂Vision Transformer 原理和代码,看这篇技术综述就够了(三)

2021-02-26

搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(二)

2021-01-24

极市原创作者激励计划 #

极市平台深耕CV开发者领域近5年,拥有一大批优质CV开发者受众,覆盖微信、知乎、B站、微博等多个渠道。通过极市平台,您的文章的观点和看法能分享至更多CV开发者,既能体现文章的价值,又能让文章在视觉圈内得到更大程度上的推广。

对于优质内容开发者,极市可推荐至国内优秀出版社合作出书,同时为开发者引荐行业大牛,组织个人分享交流会,推荐名企就业机会,打造个人品牌 IP。

投稿须知:

1.作者保证投稿作品为自己的原创作品。

2.极市平台尊重原作者署名权,并支付相应稿费。文章发布后,版权仍属于原作者。

3.原作者可以将文章发在其他平台的个人账号,但需要在文章顶部标明首发于极市平台

投稿方式:

添加小编微信Fengcall(微信号:fengcall19),备注:姓名-投稿

△长按添加极市平台小编

△点击卡片关注极市平台,获取最新CV干货

觉得有用麻烦给个在看啦~  

搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(五)相关推荐

  1. 【深度学习】搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了

    作者丨科技猛兽 编辑丨极市平台 导读 本文对Vision Transformer的原理和代码进行了非常全面详细的解读,一切从Self-attention开始.Transformer的实现和代码以及Tr ...

  2. 搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了

    ↑ 点击蓝字 关注极市平台 作者丨科技猛兽 编辑丨极市平台 极市导读 本文对Vision Transformer的原理和代码进行了非常全面详细的解读,一切从Self-attention开始.Trans ...

  3. 搞懂C++为什么难学,看这篇就够了!

    学C++能干什么?  往细了说,后端.客户端.游戏引擎开发以及人工智能领域都需要它. 往大了说,构成一个工程师核心能力的东西,都在C++里. 跟面向对象型的语言相比,C++是一门非常考验技术想象力的编 ...

  4. 搞懂JavaScript全局变量与局部变量,看这篇文章就够了

    目录 1.什么是全局变量和局部变量 2.全局变量和局部变量的声明 2.1 全局变量的声明 2.2 局部变量的声明 3.全局变量和局部变量一些常见问题 3.1全局变量跟局部变量重名 3.2 零散变量的问 ...

  5. Android 动态分区详解(一) 5 张图让你搞懂动态分区原理

    文章目录 0. 导读 1. 动态分区详解的背景 1.1 背景 1.2 动态分区的本质 2. Linux device mapper 驱动 3. Android 动态分区布局 3.1 动态分区布局 3. ...

  6. Swin Transformer原理与代码精讲

    课程链接:Swin Transformer原理与代码精讲--计算机视觉视频教程-人工智能-CSDN程序员研修院 Transformer在许多NLP(自然语言处理)任务中取得了最先进的成果. Swin ...

  7. php service原理,轻松搞懂WebService工作原理

    用更简单的方式给大家谈谈WebService,让你更快更容易理解,希望对初学者有所帮助. WebService是基于网络的.分布式的模块化组件. 我们直接来看WebService的一个简易工作流程: ...

  8. Handler原理剖析,看这篇就够了

    Handler原理剖析,看这篇就够了 本篇文章将会对Handler进行深层次的剖析,结合关系剖析图.代码走向剖析图以及10个常见问题,希望看完文章的同学都能有所收获,加深对Handler的了解! 一. ...

  9. redis详细介绍附实例代码--看一篇就够了

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html redis介绍详解附实例代码- ...

  10. 单细胞测序技术之研究必看8篇经典综述

    单细胞测序技术之研究必看8篇经典综述 单细胞生物学最近几年是非常热门的话题.在这一领域中,不得不提Single-cell sequencing单细胞测序技术.使不同细胞类型得以精细区分,使得科学家们在 ...

最新文章

  1. SpringBoot第八篇:springboot整合mongodb
  2. android 数字时钟代码大全,Android自定义view实现数字时钟
  3. 鸿洋android屏幕适配四部曲-传送门
  4. JS模式--职责链模式
  5. Oracle中限定日期,Oracle 日期的一些简单使用
  6. python 自动输入_Python自动输入【新手必学】
  7. Execution Order of Event Functions, unity 3d 事件函数的执行顺序
  8. 简单网络聊天程序java_基于Java实现hello/hi简单网络聊天程序
  9. GitHub 标星 1.6w+,前方宝藏项目出没!| 原力计划
  10. python 灰度图像转彩色_彩色图像--伪彩处理 灰度图转伪彩色图像
  11. SylixOS学习三—— SylixOS的引导与安装1
  12. 小程序 图片加载慢卡
  13. 上海大华条码称代码_上海大华计价电子秤 使用软件 TM-H 大华条码称设置15KG
  14. UML入门以及Plant UML工具介绍
  15. NYOJ:71-独木舟上的旅行
  16. java随机获取字母,Java程序获取随机字母
  17. Base64(本地存储加密解密)
  18. Docker容器无法启动,里面的配置文件如何修改
  19. php+时间戳+星座,php 根据日期显示星座的简单示例
  20. 地产2022价值启示录:房企必须闯过的“三重门”

热门文章

  1. oracle 11g dataguard创建的简单方法
  2. 长连接与心跳包 Persistent connection and HearBeats
  3. 题目66:矩阵中的路径
  4. STM32(十一)- 串行FLASH文件系统FatFs
  5. 阿里云ubuntu16.04安装ruby
  6. BUAA软工第0次作业
  7. Web---HTTP请求、重定向、转发和数据压缩
  8. iOS设计模式 - 单例
  9. js可以选择时间的日历控件
  10. WinDbg / SOS Cheat Sheet