Transformer模型技术长文
作者:互联网
Transformer模型技术长文
可高效处理长文本的模型Longformer、和堪称“升级版”Transformer的BigBird模型,到底有什么区别?
Transformer的其他各种变体(X-former)到底都长什么样、又有哪些新应用?
由于Transformer模型的发展速度日新月异,一天一个样,哪怕是隔段时间回来研究,模型可能也已经多了不少。
Transformer模型,是谷歌在2017年推出的NLP经典模型(Bert就是用的Transformer)。
本文参考链接
https://mp.weixin.qq.com/s/btdnjKVVSuLZH15bXmihlw
论文链接: https://www.arxiv-vanity.com/papers/2009.06732
https://mp.weixin.qq.com/s/_th7rXfZDuSu2xo7gdPp0w
https://www.cnblogs.com/zhongzhaoxie/p/13064374.html
Transformer论文及相关代码:
- Read the Attention Is All You Need paper, the Transformer blog post (Transformer: A Novel Neural Network Architecture for Language Understanding), and the Tensor2Tensor announcement.
- Watch Łukasz Kaiser’s talk walking through the model and its details
- Play with the Jupyter Notebook provided as part of the Tensor2Tensor repo
- Explore the Tensor2Tensor repo.
Transformer相关工作:
- Depthwise Separable Convolutions for Neural Machine Translation
- One Model To Learn Them All
- Discrete Autoencoders for Sequence Models
- Generating Wikipedia by Summarizing Long Sequences
- Image Transformer
- Training Tips for the Transformer Model
- Self-Attention with Relative Position Representations
- Fast Decoding in Sequence Models using Discrete Latent Variables
- [Adafactor: Adaptive Learning Rates with Sublinear Memory Cost](https://arxiv.org/abs/1804.04235
在机器翻译任务上,Transformer表现超过了RNN和CNN,只需要编/解码器就能达到很好的效果,可以高效地并行化。
好消息是,这里有一篇Transformer模型的“最新动向”,集中探讨Transformer新模型对于自注意力机制(Self-attention)的改进,并对这些模型进行对比。
此外,还有模型在NLP、计算机视觉和强化学习等各个领域的最新应用。
标准Transformer模型
标准的Transformer模型是什么样的。
Transformer的核心部分,是右边的两个黑色实线框圈起来的两部分,左边是编码器(Encoder),右边是解码器(Decoder)。
可以看见,编/解码器主要由两个模块组合成:前馈神经网络(图中蓝色的部分)和注意力机制(图中玫红色的部分),解码器通常多一个(交叉)注意力机制。
Transformer最重要的部分,就是注意力机制。
通俗来讲,注意力机制在图像处理中的应用,是让机器“像人一样特别注意图像的某个部分”,就像在看图时,通常会“特别关注”图中的某些地方。
自注意力机制是定义Transformer模型特征的关键,其中一个重点难题就在于时间复杂度和空间复杂度上。
由于注意力机制直接将序列(sequence)两两比较,导致计算量巨大(计算量变成O(n²))。
最近,大量论文提出了新的Transformer“变种”,根本目的都是加速模型的效率,但如果一篇篇去看,可能有点眼花缭乱。
为此,Google AI的研究人员特意整理了一篇Transformer模型的发展论文,仔细讲解出处。
“变种”后的Transformer模型
2种分类方法
按使用方法来分类的话,Transformer模型可以分成如下3类:
只用编码器:可用于分类
只用解码器:可用于语言建模
编码器-解码器:可用于机器翻译
但如果按这些变种的提高效率的原理,也就是“高效方法”来分类,那么Transformer模型的这些“变种”则可以被分成如下几类:
Fixed Patterns(固定模式):将视野限定为固定的预定义模式,例如局部窗口、固定步幅块,用于简化注意力矩阵;
Learnable Patterns(可学习模式):以数据驱动的方式学习访问模式,关键在于确定token相关性。
Memory(内存):利用可以一次访问多个token的内存模块,例如全局存储器。
Low Rank(低秩):通过利用自注意力矩阵的低秩近似,提高效率。
Kernels(内核):通过内核化的方式提高效率,其中核是注意力矩阵的近似,可视为低秩方法的一种。
Recurrence(递归):利用递归,连接矩阵分块法中的各个块,最终提高效率。
可以看见,近期Transformer相关的研究都被分在上面的图像中了,非常清晰明了。
了解完分类方法后,接下来就是Transformer模型的各种变体了。
17种经典“X-former”
1、Memory Compressed Transformer(2018)
这是让Transformer能更好地处理长序列的早期尝试之一,主要修改了两个部分:定位范围注意、内存压缩注意。
前者旨在将输入序列分为长度相似的模块,并在每个部分中运行自注意力机制,这样能保证每个部分的注意力成本不变,激活次数就能根据输入长度线性缩放。
后者则是采用跨步卷积,减少注意力矩阵的大小、以及注意力的计算量,减少的量取决于跨步的步幅。
2、Image Transformer(2018)
这是个受卷积神经网络启发的Transformer变种,重点是局部注意范围,即将接受域限制为局部领域,主要有两种方案:一维局部注意和二维局部注意。
不过,这种模型有一个限制条件,即要以失去全局接受域为代价,以降低存储和计算成本。
3、 Set Transformer(2019)
这个模型是为解决一种特殊应用场景而生的:输入是一组特征,输出是这组特征的函数。
利用了稀疏高斯过程,将输入集大小的注意复杂度从二次降为线性。
4、Sparse Transformer(2019)
这个模型的关键思想,在于仅在一小部分稀疏的数据对上计算注意力,以将密集注意力矩阵简化为稀疏版本。
不过这个模型对硬件有所要求,需要自定义GPU内核,无法直接在TPU等其他硬件上使用。
5、Axial Transformer(2019)
这个模型主要沿输入张量的单轴施加多个注意力,每个注意力都沿特定轴混合信息,使沿其他轴的信息保持独立。
由于任何单轴的长度通常都比元素总数小得多,因此这个模型可以显著地节省计算和内存。
6、Longformer(2020)
Sparse Transformer的变体,通过在注意力模式中留有空隙、增加感受野来实现更好的远程覆盖。
在分类任务上,Longformer采用可以访问所有输入序列的全局token(例如CLS token)。
7、Extended Transformer Construction(2020)
同样是Sparse Transformer的变体,引入了一种新的全局本地注意力机制,在引入全局token方面与Longformer相似。
但由于无法计算因果掩码,ETC不能用于自动回归解码。
8、BigBird(2020)
与Longformer一样,同样使用全局内存,但不同的是,有独特的“内部变压器构造(ITC)”,即全局内存已扩展为在sequence中包含token,而不是简单的参数化内存。
然而,与ETC一样,BigBird同样不能用于自动回归解码。
9、Routing Transformer(2020)
提出了一种基于聚类的注意力机制,以数据驱动的方式学习注意力稀疏。为了确保集群中的token数量相似,模型会初始化聚类,计算每个token相对于聚类质心的距离。
10、Reformer(2020)
一个基于局部敏感哈希(LSH)的注意力模型,引入了可逆的Transformer层,有助于进一步减少内存占用量。
模型的关键思想,是附近的向量应获得相似的哈希值,远距离的向量不应获得相似的哈希值,因此称为“局部敏感”。
11、Sinkhorn Transformer(2020)
这个模型属于分块模型,以分块的方式对输入键和值进行重新排序,并应用基于块的局部注意力机制来学习稀疏模式。
12、Linformer(2020)
这是基于低秩的自注意力机制的高效Transformer模型,主要在长度维度上进行低秩投影,在单次转换中按维度混合序列信息。
13、Linear Transformer(2020)
这个模型通过使用基于核的自注意力机制、和矩阵产品的关联特性,将自注意力的复杂性从二次降低为线性。
目前,已经证明可以在基本保持预测性能的情况下,将推理速度提高多达三个数量级。
14、Performer(2020)
这个模型利用正交随机特征(ORF),采用近似的方法避免存储和计算注意力矩阵。
15、Synthesizer models(2020)
这个模型研究了调节在自注意力机制中的作用,合成了一个自注意力模块,近似了这个注意权重。
16、Transformer-XL(2020)
这个模型使用递归机制链接相邻的部分。基于块的递归可被视为与其他讨论的技术正交的方法,因为没有明确稀疏密集的自注意力矩阵。
17、Compressive Transformers(2020)
这个模型是Transformer-XL的扩展,但不同于Transformer-XL,后者在跨段移动时会丢弃过去的激活,关键思想是保持对过去段激活的细粒度记忆。
整体来说,这些经典模型的参数量如下:
视觉Transformer
Transformer 是一种基于注意力的编码器-解码器架构,彻底改变了自然语言处理领域。受这一重大成就的启发,最近,在将类似于 Transformer 的结构应用于计算机视觉 (CV) 领域上进行了一些开创性工作,这已经证明了在各种 CV 任务上的有效性。与现在的卷积神经网络 (CNN) 相比,视觉 Transformer (ViT) 依靠有竞争力的建模能力,在 ImageNet、COCO 和 ADE20k 等多个基准上取得了十分优异的性能。在中,全面回顾了针对三个基本 CV 任务(分类、检测和分割)的一百多种不同的视觉 Transformer,其中提出了一种分类法,根据动机、结构和使用场景来组织这些方法。由于训练设置和面向任务的差异,还在不同的配置上评估了这些方法,以方便直观地进行比较,而不仅仅是各种基准测试。此外,披露了一系列基本但未经开发的方面,这些方面可能使 Transformer 从众多架构中脱颖而出,例如,不充分的高级语义嵌入以弥合视觉和顺序 Transformer 之间的差距。最后,提出了三个有前景的未来研究方向,以供进一步研究。
> 1. 论文和代码地址
论文题目:A Survey of Visual Transformers
发表单位:中国科学院、东南大学、联想研究院、联想
论文地址:https://arxiv.org/abs/2111.06091
提交时间:2021年11月11日
> 2. 动机
ViT 发展速度十分迅速!
图1. Transformer 在NLP和CV中的应用和发展进程
如上图左边所示,Transformer 逐渐成为自然语言处理 (NLP) 的主要深度学习模型。从上图右图所示,在过去的一年中,针对不同的领域提出了数百种基于 Transformer 的视觉模型。
图2. ViT 的分类
2020年发表了几篇关于 Transformer 的评论,其中 Tay 等人回顾了 NLP 中 Transformers 的效率,Khan 等人和 Han 等人总结了早期的视觉 Transformer 和之前的注意力模型,以及一些没有系统方法的语言模型。最近对 Transformer 的综述是 Lin 等人介绍的,提供了对 Transformer 各种变体的系统综述,并粗略地提到了在视觉上的应用。基于这些观察,旨在全面回顾最近的 ViT,并系统地对这些现有方法进行分类:
- 全面性和可读性。全面综述了100多种 ViT 的三个基本任务:分类、检测和分割。选择并分析了50多个代表性模型,如上图所示,不仅从一个角度对每个模型进行了详尽的分析,而且还通过渐进、对比和多视角分析等方式建立了之间的内在联系。
- 直观的比较。由于这些 ViT 在各种任务中遵循不同的训练方案和超参数设置,因此本次调查通过在不同的数据集和限制上将分开来呈现多个横向比较。更重要的是,总结了为每个任务设计的一系列有前景的组件,包括:用于主干的具有层次结构的浅层局部卷积,用于颈部检测器的具有稀疏注意力的空间先验加速,以及用于分割的通用掩码预测方案。
- 深入分析。进一步在以下方面提供了重要的见解:从序列到视觉任务的转换过程,Transformer 与其他视觉网络之间的对应关系,以及不同任务中采用的可学习嵌入(即类token、对象查询、掩码嵌入)的相关性。最后,概述了未来的研究方向。例如,编码器-解码器的 Transformer 主干可以通过学习的嵌入来统一三个子任务(分类、检测和分割)。
> 3. 最初的 Transformer
图3. Transformer 中的注意力层
图4. Transformer 整体架构
最初的Transformer架构如上图4所示。
> 4. 分类中的 Transformer
受到在 NLP 中 Transformer 优异发展的启发,一些研究人员试图将 Transformer 引入图像分类。与传统CNN相比,Vision Transformer(ViT)首次在主流分类基准上实现了类似甚至更高的性能。本节全面回顾了 2021 年 6 月之前发布的 40 多个 Transformer 主干,并根据其动机和实现将分为六类,如下图 5 所示。
基于提出的分类,首先介绍了 ViT,用于图像分类的原始视觉 Transformer。然后讨论了 Transformer Enhanced CNN 方法,该方法利用Transformer来增强CNN主干的远程依赖性。Transformer 具有很强的全局建模能力,但在早期忽略了局部信息。因此,CNN Enhanced Transformer 方法利用适当的卷积归纳偏置来增强 Transformer,而 Local Attention Enhanced Transformer 方法重新设计补丁分区和注意力块以增强 Transformer 的局部性并保持无卷积架构。此外,CNN 在性能和计算效率方面从经验上受益于分层和深层结构。受此启发,提出了 Hierarchical Transformer 和 Deep Transformer 方法。前者用金字塔茎代替固定分辨率的柱状结构,而后者防止注意力图过于平滑并增加其在深层的多样性。此外,还回顾了当前可用的视觉 Transformer 自监督方法。最后,评估这些 Transformer 的性能,分析有希望的改进,并回答一个常见问题以供进一步调查。
图5. ViT骨干的分类
4.1 最初的 ViT
ViT 是 Transformer 在图像分类中的第一个骨干。
图6. ViT 架构
4.2 Transformer 增强的 CNN
Transformer 有两个关键部分:MHSA 和 FFN。最近,Cordonnier 等人已经证明卷积层可以通过具有足够头数的 MHSA 来近似。Dong等人已经表明,MHSA 可能在没有跨层连接和 FFN时对“token一致性”具有很强的归纳偏置。因此,Transformer 在理论上具有比 CNN 更强大的建模能力。然而,不可避免地具有沉重的计算成本,特别是对于浅层,由自注意力机制带来,随着特征分辨率的二次方增长。与之前基于注意力的方法类似,一些方法尝试将 Transformer 插入 CNN 主干或用 Transformer 层替换部分卷积块。例如 VTs 和 BoTNet。
4.3 CNN 增强 Transformer
归纳偏差可以表示为一组关于数据分布或解空间的假设,其在卷积中的表现是局部性和方差平移。局部性侧重于空间上接近的元素,并将与远端隔离。平移不变性表明在输入的位置之间重复使用相同的匹配规则。由于局部邻域内的协方差很大,并且在整个图像中趋于逐渐平稳,这些卷积偏差可以有效地处理图像数据。然而,强大的偏差也限制了 CNN 具有足够数据集的上限。最近的工作试图利用适当的卷积偏差来增强 Transformer 并加速其收敛。这些应用可以概括如下:软近似(DeiT、ConViT)、直接局部性处理( CeiT、LocalViT)、位置编码的直接替换(CPVT、ResT)和结构组合(Early Conv. 、CoAtNet)。
4.4 局部注意力增强的 Transformer
ViT 将输入图像视为一个补丁序列。这种粗糙的补丁嵌入过程忽略了语言和图像之间的差距,这可能会破坏图像的局部信息。作为局部提取器,卷积通过相对固定的滤波器聚合特征。这种模板匹配过程可以有效地处理大多数小数据集,但在处理大型数据集时面临表示的组合爆炸。与卷积相比,局部注意力机制可以根据局部元素之间的关系动态生成注意力权重。为了增强局部特征提取能力并保留无卷积结构,一些工作(Swin Transformer、 TNT block、Twins、T2T-ViT)尝试通过局部自注意力机制来适应补丁结构。随后对一些 ViT 变体进行了简要阐述,分别是:TNT、Swin Transformer、Twins& ViL和 VOLO。
4.5 分层 Transformer
由于 ViT 在整个网络中以固定分辨率继承了原始的柱状结构,因此忽略了细粒度特征,并带来了昂贵的计算成本。继分层 CNN 之后,最近的工作(CvT、PVT、ViL、T2T-ViT、PiT)将类似的结构应用于 Transformer 中。
4.6 深度 Transformer
根据经验,增加模型的深度使网络能够学习更复杂的表示。最近的工作将这种深度结构应用于 Transformer 并进行大量实验,通过分析跨 patch(Diverse Patch)和跨层(Refiner、DeepViT)的相似性以及残差块(CaiT)的贡献来研究其可扩展性。在深度 Transformer 中,更深层的特征往往不太具有代表性(注意力崩溃,由 DeepViT 发现),并且 patch 映射到难以区分的潜在表示(补丁过度平滑,由 Diverse Patch 发现)。为了弥补上述限制,这些方法也多方面提出了相应的解决方案。简要介绍了CaiT、DeepViT & Refiner和 Diverse Patch。
4.7 有自监督学习的 Transformers
自监督 Transformers 在 NLP 中取得了成功,但受监督的预训练 Transformers 仍占据 CV 领域的主导地位。最近的工作还试图在生成性(iGPT、BEiT)和辨别性(MoCo v3、DINO)中为视觉 Transformer 设计各种自监督学习方案。
4.8 讨论
1)实验评估和对比分析
表1. 视觉 Transformer 在IMAGENET-1K、CIFAR-10、CIFAR-100上的TOP-1准确率对比
根据的分类法,所综述的监督模型可分为六类。表一总结了 Transformer 在主流分类基准上的分类性能,并为每个型号指定了专用颜色。为了客观直观地评估,以下三幅图说明了在不同配置下在 ImageNet-1k 上的比较(例如,模型大小、FLOPs 和训练方案)。下图总结了在 224x224输入分辨率下,每个模型的性能。由于 FLOPs 在 Transformer 内随输入大小呈二次增长,下图(b)将 FLOPs 作为水平轴,重点关注在更高分辨率下的性能。下图(c)重点介绍带有外部数据集的预训练模型。根据这些图,简要分析了有利于模型性能、效率和可扩展性的几项改进,如下所示:
- 一般来说,大多数结构改进的方法针对特定模型尺寸、问题或特定输入分辨率进行优化,其它基本训练策略,如 DeiT 和 LV-ViT,更适用于各种模型、任务和输入。
- 局部性对于 Transformer是不可或缺的,VOLO 和 Swin 分别在分类和密集预测任务中占主导地位。
- 卷积 patch 化茎(即使用卷积生成patch)和早期卷积阶段(CoAtNet)显著提高了 Transformer 的精度,尤其是在大型模型上,因为这样的组合可以为浅层的细粒度局部特征提供相互帮助。
- 深层 Transformer 潜力巨大,如 Refined-ViT 和 CaiT。然而,由于模型大小与通道维度成二次方增长,因此深度 Transformer 中之间的权衡值得进一步研究。
- CeiT 和CvT 展示了显著的优势在训练小型或中型模型(0−40M)时,这表明这种用于轻量级模型的混合注意块值得进一步探索。
图7
2)视觉Transformer发展趋势综述
Transformer 骨干在去年兴起。当系统学与这些模型的时间线相匹配时,可以清楚地追踪到 Transformer for image classification 的发展趋势(前面的图 1)。作为一种自注意力机制,视觉 Transformer 主要根据 NLP 中的 vanilla 结构(ViT 和 iGPT)或 CV 中基于注意力的模型(VTs 和 BoTNet)重新设计。
然后,许多方法开始将 CNN 的层次结构或深层结构扩展到视觉 Transformer。T2T-ViT、PVT、CvT 和 PiT 的共同动机是将层次结构转移到 Transformer 中,但执行下采样的方式不同。CaiT、Diverse Patch、DeepViT 和 Refiner 专注于深度 Transformer 中的问题。此外,一些方法转向内部组件以进一步增强先前 Transformer 中的图像处理能力,即位置编码、MHSA 和 MLP。
下一波 Transformer 是局部范式。大多数通过引入局部注意力机制或卷积将局部性引入 Transformer。如今,最新的监督式 Transformer 正在探索结构组合和缩放定律。除了有监督的 Transformers,自监督学习在视觉 Transformers 中占了很大一部分。然而,目前尚不清楚哪些任务和结构对 CV 中的自监督 Transformer 更有利。
3) 浅谈替代方案
在视觉 Transformer 的开发过程中,最常见的问题是 Transformer 是否可以取代卷积。通过回顾过去一年的改善历史,没有性能不足的迹象。视觉 Transformer 已经从一个纯粹的结构回归到一个混合的形式,全局信息逐渐回归到一个与局部信息混合的阶段。虽然 Transformer 可以等价于卷积,甚至比卷积具有更好的建模能力,但这种简单有效的卷积运算足以处理底层的局部性和低级语义特征。在未来,两者结合的思想将推动图像分类的更多突破。
> 5. 检测中的 Transformer
详细介绍了用于目标检测的视觉 Transformer,可以分为两类:作为颈部(neck)的 Transformer 和作为主干(backbone)的 Transformer。颈部检测器主要是基于 Transformer 结构的一种新表示,称为目标查询,即一组学习的参数均等地聚合全局特征。这些方法尝试在提高收敛速度或改进性能方面提供最佳融合范式。除了专门为检测任务设计的各种颈部外,一部分骨干检测器也考虑了特定的策略。最后,比较了之间的性能,然后分析了 Transformer 检测器的一些潜在的改进。
5.1 Transformer 颈部
首先回顾 DETR,这是最开始的一个 Transformer 检测器,提供了一个新的表示目标查询,将对象检测制定为一个集合预测问题。由于其对小物体的准确性低和收敛速度慢,人们从三个方面努力改进这种 Transformer 检测器:稀疏注意力、空间先验和结构重设计。此外,还回顾了自监督的应用。
最初的检测器:DEtection with TRansformer (DETR)
图8
DETR是第一个端到端的 Transformer 检测器,消除了手工设计的表示和非极大值抑制(NMS)后处理,通过引入目标查询和集合预测直接检测所有对象。具体地,DETR 使用编码器-解码器 Transformer 作为颈部,以及使用 FFN 作为预测头(如上图所示)。
稀疏注意力的 Transformer
在 DETR 中,解码器嵌入和全局特征之间的密集交互会消耗大量计算资源并减慢 DETR 的收敛速度。因此,一些努力旨在设计依赖于数据的稀疏注意力来解决这个问题,例如 Deformable DETR 和 ACT。接着描述了在稀疏注意力中的几个重要改进:Deformable DETR、ACT、SMCA、Conditional DETR、Two-Stage Deformable DETR 和 Efficient DETR。
重新设计结构的 Transformer
除了聚焦于交叉注意力的改进外,一些工作还重新设计了仅编码器的结构来直接避免解码器的问题。例如,TSP 继承了集合预测的思想,并放弃了解码器和目标查询。YOLOS 结合了 DETR 的编码器-解码器颈部和 ViT 的仅编码器主干,来重新设计仅编码器的检测器。
自监督学习的 Transformer 检测器
受到自然语言处理中取得成功的预训练 Transformer 的启发,Dai 等人提出无监督预训练DETR(UP-DETR)从三个方面辅助监督训练:
- 从给定图像中随机裁剪的一个 path 分配给所有目标查询。解码器的目标是定位 patch 位置。
- 为了避免在预训练中对定位的过度偏见,提出了一个辅助重建任务来保留有判别性的特征。
- 基于单个查询 patch,多查询定位将多个 patch 分配给不同的目标查询,以模仿多目标检测任务并加速收敛。每个 patch 查询都是通过掩码注意力和目标查询混洗独立预测的。
UP-DETR 在小数据集上比 DETR 获得了更高的精度和更快的收敛速度,甚至在训练数据充足的情况下性能更好。
5.2 Transformer 骨干
在中回顾了许多用于图像分类的基于 Transformer 的主干。这些主干可以很容易地合并到各种框架中(例如,MaskR-CNN、RetinaNet、DETR 等)来执行密集预测任务。除了一般的改进外,中的一部分也有利于改进密集预测任务。层次结构将 Transformer 构造为一个从高分辨率到低分辨率的过程来学习多尺度特征,如 PVT。局部增强结构将主干构建为局部到全局的组合,以有效地提取短程和长程的视觉依赖性并避免二次计算开销,例如 Swin-Transformer、ViL 和 Focal Transformer。下表3在密集预测任务中比较了基于视觉 Transformer 框架的模型。基于 Transformer 的主干比当前 CNN 模型的性能高 2-6.8%,这证明了 Transformer 在密集预测方面的有效性。
表2. Transformer 颈和 CNN 在 COCO 2017 验证集上的性能
表3. 不同模型在密集预测任务的性能对比
与 FPN 类似,Zhang 等人通过结合非局部 和多尺度特征的特性,提出了一种专用于密集预测任务的特征金字塔 Transformer(FPT)。利用三个注意力组件来建模跨空间和尺度的交互,包括自注意力、自上而下的交叉注意力和自下而上的跨通道注意力。FPT 作为密集预测任务的通用主干,在许多 SOTA 模型上获得进一步提升。
5.3 讨论
本节在表2和表3中简要比较和分析了 Transformer 检测器。对于 Transformer 颈,只关注在单尺度特征结构中的 FLOPs,而不是多尺度特征,因为应用了不同的层数。从稀疏注意力(SA)的角度来看,Deformable DETR 减少了 8 GFLOPs 并缩短了 12 倍的训练时间,而 ACT-DC5 将计算成本从 187 GFLOPs 降低到 156 GFLOPs,并且性能损失很小。从空间先验(SP)的角度来看,one-stage 检测器显示地将空间先验与目标查询分开,带来快速收敛和高精度。SMCA 和 Conditional DETR 在 108 个训练 epoch 时分别达到了 42.7% 和 43% 的 mAP。two-stage 检测器和 TSP-RCNN 都用 proposals 替换了学习到的目标查询。这种本质上相同但结构上不同的方法显着提高了检测器的准确性。从多尺度 (MS) 特征的角度来看,可以补偿 Transformer 在小物体检测上的性能。例如,Deformable DETR 和 SMCA 将 DETR 提高了 5.2% 和 3.1% APs 。仅编码器的结构减少了 Transformer 层数,但过度增加了 FLOPs,例如具有 537 GFLOPs 的 YOLOS-B。相比之下,编码器-解码器的结构是 GFLOPs 和层数之间的一个很好的权衡,但更深的解码器层可能会导致长时间的训练过程和过度平滑的问题。因此,将 SA 集成到具有 MS 和 SP 的深度解码器中值得进一步研究。
对于分类,有许多主干的改进,但很少有工作涉及密集预测任务。基于提出的分类法,很容易将现有方法分为两部分:分层的 Transformer 和局部增强的 Transformer。未来,预计 Transformer 主干将加入深度高分辨率网络来解决密集预测任务。
> 6. 分割中的 Transformer
Transformer 以两种方式广泛应用于分割:基于 patch 的 Transformer (patch-based Transformer)和基于查询的 Transformer (query-based Transformer)。后者可以进一步分解为带有目标查询的 Transformer(Transformer with object query) 和带有掩码嵌入的Transformer(Transformer with mask embedding)。
6.1 基于 patch 的 Transformer
为了扩展感受野,CNN 需要大量的解码器堆叠来将高级特征映射到原始空间分辨率。相比之下,依靠全局建模能力,基于 patch 的 Transformer 将输入图像视为 patch 序列,并将送到一个柱状 Transformer 编码器中。这种分辨率不变策略使 Transformer 能够仅包含一个相对简单的解码器,并为分割任务获得理想的性能。此外,一些工作(SETR、TransUNet、Segformer)尝试研究基于 patch 的 Transformer 与不同分割框架(Mask R-CNN、U-net)之间的最佳组合。
6.2 基于查询的 Transformer
查询(Query)是 Transformer 解码器输入和输出处的一个可学习的嵌入。与 patch 嵌入相比,查询嵌入可以更“公平”地整合每个 patch 的信息。有着集合预测损失的基于查询的 Transformer 能够删除其他手工制作的表示和后处理。最近,许多努力试图将这种表示推广到可以分为两类的分割任务。一类框架是由检测任务监督的目标查询所驱动。另一类的查询仅由分割任务监督,称为掩码嵌入。
用目标查询的 Transformer(Transformer with Object Queries)
图9
基于目标查询的方法有三种训练方式:
- 基于 DETR 的预训练目标查询,一个带有查询的掩码头通过分割任务进一步细化(上图9(a)所示),如 Panoptic DETR。
- 代替多阶段训练过程,目标查询由一些端到端框架中的检测和分割任务同时建模(上图9(b)所示),如 Cell-DETR、VisTR。
- 用混合级联网络构建不同任务分支之间的差距,其中检测框的输出用作掩码头的输入(上图9(c)所示),如 QueryInst。
用掩码嵌入的 Transformer(Transformer with Mask Embeddings)
另一类的 Transformer 框架努力使用查询直接预测掩码,将这种基于学习掩码的查询称为掩码嵌入。与目标查询不同,掩码嵌入仅由分割任务监督。如上图 9(d)所示,两个不相交的查询集并行用于不同的任务,例如:ISTR 和 SOLQ。对于语义分割和无框框架,一些研究从基于查询的 Transformer 中删除对象查询,并直接通过掩码嵌入来预测掩码(上图 9(e)),如 Max-DeepLab、Segmenter 和 Maskformer(严格意义上说 Maskformer 结合了 box-free 和 box-based 方法,使用 box-based 来增强 box-free 的效果)。
6.3 讨论
作为一项基础但仍具有挑战性的任务,分割也从不断发展的视觉 Transformers 中受益。根据三种不同的分割子任务(语义分割、实例分割和全景分割)总结了这些 Transformer。
下表 4 侧重于语义分割任务的 ADE20K 验证集(170 个类别)。发现 Transformer 在有大量类而不是较小类的数据集上进行训练可以显示出巨大的性能改进。
下表 5 侧重于评估实例分割任务的 COCO test-dev 2017 数据集。显然,带有掩码嵌入的 Transformer 在分割和检测任务中都超越了以往流行的模型。这些方法显著提高了 box 的准确率,但对分割只有轻微的改进,从而导致 APbox 和 APseg 的性能存在巨大差距。基于级联框架,QueryInst 在 Transformer 模型中获得了 SOTA 性能。因此,Transformer 与混合任务级联结构的结合值得进一步研究。
下表 6 侧重于评估全景分割任务。Max-DeepLab 通常通过掩码预测的方式解决全景分割任务中的前景和背景,而 Maskformer 成功地将此方式用于语义分割并统一了语义和实例级分割任务。基于在全景分割领域的表现,可以得出结论:Transformer 可以将多个分割任务统一到一个具有掩码预测的无框框架中。
表4. UperNet 和基于 Transformer 的模型在 ADE20K Val 中语义分割任务上的对比
表5. Transformers 和 有代表性的CNNs 在 COCO test-dev 中实例分割任务上的对比
表6. 三种有代表性的 Transformers 在 COCO 全景 MiniVal 中全景分割任务上的对比
> 7. 讨论和总结
7.1 总结最近的改进
基于之前的比较和讨论,简要总结了三个基本任务(分类、检测和分割)的最新改进。
- 对于分类,深的层次的 Transformer 主干可有效降低计算复杂度并避免深层中的特征过度平滑。同时,早期的卷积足以捕获低级特征,可以显着增强鲁棒性并降低浅层的计算复杂度。此外,卷积投影和局部注意机制都可以提高Transformer的局部性。前者也可能是一种替代位置编码的新方法。
- 对于检测,Transformer 颈部受益于编码器-解码器结构,其计算量少于仅编码器的 Transformer 检测器。因此,解码器是必要的,但由于其收敛速度慢,因此只需要很少的堆叠即可。此外,稀疏注意力有利于降低计算复杂度并加速 Transformer 的收敛,而空间先验有利于Transformer的性能,收敛速度稍快。
- 对于分割,编码器-解码器 Transformer 模型可以通过一系列可学习的掩码嵌入将三个分割子任务统一为掩码预测问题。这种无框的方法在多个基准测试中取得了最新的 SOTA (MaskFormer)。此外,基于框的 Transformer 的特定混合任务的级联模型被证实可以在实例分割任务中获得更高的性能。
7.2 视觉 Transformer 的讨论
尽管有大量的视觉 Transformer 模型和应用,但对视觉 Transformer 的“基本”理解仍然效率低下。因此,将重点关注一些关键问题,以帮助解决读者的困惑。
7.2.1 Transformer 如何弥合语言和视觉之间的鸿沟
Transformer 最初是为机器翻译任务而设计的。在语言模型中,以句子的每个词为基本单元,代表高层次、高维的语义信息。这些词可以嵌入到低维向量空间表示中,因此称为词嵌入。在视觉任务中,图像的每个像素都是低级、低维的语义信息,与嵌入特征不匹配。因此,迁移到视觉任务的关键是构建图像到矢量的转换并保持图像的特征。例如,ViT 通过强松弛条件将图像转换为具有多个低级信息的 patch 嵌入,而 Early Conv. 和 CoAtNet 利用卷积来提取高级信息并减少 patch 中的冗余特征。
7.2.2 Transformer、自注意力与 CNN 的关系
从卷积的角度来看,如上提到的 4.3 节,其归纳偏置主要表现为局部性、平移不变性、权重共享、稀疏连接。这种简单的卷积核可以有效地执行模板匹配,但由于其具有强烈的归纳偏差(因为很快就可以收敛学习好了),其上限低于 Transformer。
从自注意力机制的角度来看,如上提到的 4.2 和 4.4 节,当给定足够数量的头时,理论上可以表达任何卷积层。这种全注意力操作可以交替地结合局部和全局级别的注意力,并根据特征的关系动态生成注意力权重。即便如此,实用性也较差,准确率低于 SOTA CNN,计算复杂度更高。
从 Transformer 的角度来看,Dong 等人证明当在没有短连接或 FFNs 的深层训练时,自注意力层会表现出对“令牌均匀性(token uniformity)”的强烈归纳偏见。得出的结论是,Transformer 由两个关键组件组成:一个 self-attention 层聚合了 token 的关系,一个 position-wise FFN 提取了输入的特征。尽管 Transformer 具有强大的全局建模能力,如 4.3 节和 7.2.1 节所述,卷积可以有效处理低级特征,增强 Transformer 的局部性,并通过填充附加位置特征。
7.2.3 不同视觉任务中的可学习到的嵌入
图10 可学习的嵌入分类
Transformer 模型采用可学习的嵌入来执行不同的视觉任务。从监督任务的角度来看,这些嵌入可以分为类标记、目标查询和掩码嵌入。从结构上看,之间是有内在联系的。最近的 Transformer 方法主要采用两种不同的模式:仅编码器结构和编码器-解码器结构。每个结构由三个层次的嵌入组成,如上图 10 所示。从位置层次,学习嵌入在仅编码器的 Transformer 中的应用被分解为初始令牌(initial token)和后期令牌(later token),而学习的位置编码和学习的解码器输入嵌入被应用于编码器-解码器结构。从数量层面来看,仅编码器的设计会应用不同数量的令牌。例如,ViT 家族和 YOLOS 将不同的数字标记附加到初始层,而 CaiT 和 Segmenter 利用这些标记来表示最后几层的不同特征。在编码器 - 解码器结构中,解码器的学习位置编码(目标查询或掩码嵌入)在显式或隐式中附加到解码器的输入中。与常数输入不同,Deformable DETR 采用学习嵌入作为输入并加入到编码器的输出。
受多头注意力设计的启发,多初始的标记策略应该能进一步提高分类性能。然而,DeiT 表明这些额外的令牌会收敛到相同的结果,这对 ViT 没有好处。从另一个角度来看,YOLOS 提供了一种通过使用多个初始令牌来统一分类和检测的范式,但这种仅编码器的设计会导致计算复杂度过高。根据CaiT 的观察,后面的 class token 可以减少 Transformer 的一些 FLOPs 并略微提高性能(从79.9%到80.5%)。Segmenter 还展示了该策略在分割任务中的效率。
与带有仅编码器 Transformer 的多个后期令牌(later token)相比,编码器-解码器结构节省了更多的计算。通过使用一小组目标查询(掩码嵌入)来标准化检测和分割领域中的 Transformer 方法。通过结合多个后期令牌和目标查询(掩码嵌入)的形式,像 Deformable DETR 这样的结构,对目标查询和可学习的解码器嵌入(相当于多个后期令牌)作为输入,可以将基于不同任务的可学习嵌入统一到 Transformer 编码器-解码器中。
7.3 未来的研究方向
Visual Transformer 方法取得了巨大的进步,并显示出在多个基准上接近或超过 SOTA CNN 方法的有希望的结果。然而,该技术太不成熟,无法颠覆卷积在 CV 领域的主导地位。基于 7.2 中的分析,指出了视觉 Transformer 的一些有前途的未来方向,以进一步进行整体串联。
1)集合预测:如上 7.2.3 节所述,由于损失函数的梯度相同,额外的类标记(token)将一致收敛。具有二分损失函数的集合预测策略已广泛应用于许多密集预测任务中的视觉 Transformer 里。如之前提到的,为分类任务考虑集合预测设计是很自然的,例如多类标记 Transformer 通过集合预测来预测混合 patch 图像,这类似于 LV-ViT 的数据增强策略。在集合预测策略中的一对一标签分配导致早期过程中的训练不稳定,这可能会降低最终结果的准确性。使用其他标签分配和损失来改进集合预测可能有助于新的检测框架。
2)自监督学习:自监督 Transformer 预训练规范了NLP领域,并在各种应用中取得了巨大成功。作为 CV 中的自监督范式,卷积孪生网络采用对比学习来执行自监督预训练,这与 NLP 中的基于 mask 的自编码器不同。最近,一些研究尝试设计一种自监督的视觉 Transformer,以弥合视觉和语言之间预训练方法的差距。中的大多数继承了 NLP 中的掩码自编码器或 CV 中的对比学习方案。但是,没有像 NLP 中的 GPT-3 那样革命性的用于视觉 Transformer 的特定监督方法。如上 7.2.3 节所述,编码器-解码器结构可以通过学习的解码器嵌入和位置编码来统一视觉任务。用于自监督学习的编码器-解码器 Transformer 值得进一步研究。
7.4 总结
在 ViT 证明了其在 CV 任务中的有效性后,视觉 Transformer 受到了相当多的关注,并削弱了 CNN 的主导地位。在中,全面回顾了 100 多个 Transformer 模型,这些 Transformer 模型已先后应用于各种视觉任务中,包括分类、检测和分割。对于每个任务,提出了一种具体的分类法来组织最近开发的 Transformer 方法,并在各种流行的基准上对性能进行了评估。通过对这些方法的综合分析和系统比较,总结了具有显著改进的方法,讨论了视觉 Transformer 的三个基本问题,并进一步提出了未来有希望的几个潜在研究方向。
Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中刷新了BLEU值。
作者采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:
- 时间片t的计算依赖t-1时刻的计算结果,这样限制了模型的并行能力;
- 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长的依赖关系,LSTM依旧无能为力。
Transformer的提出解决了上面两个问题,首先使用了Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量;其次不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架。
说明:该笔记总结的图片来源于Jay Alammar的博客,前言部分来自知乎刘岩的总结, 谢谢两位大佬的分享。本篇是结合自己的理解翻译中文,有错误的地方,请在评论区中留言。
2. Transformer详解
2.1 Transformer整体结构
论文中的验证Transformer的实验室基于机器翻译的,下面就以机器翻译为例子详细剖析Transformer的结构,在机器翻译中,Transformer可概括为如图1
图1:Transformer用于机器翻译
Transformer的本质上是一个Encoder-Decoder的结构,那么图1可以表示为图2的结构
图2:Transformer的Encoder-Decoder结构
如论文中所设置的,编码器由6个编码block组成,同样解码器是6个解码block组成。与所有的生成模型相同的是,编码器的输出会作为解码器的输入,如图3所示:
图3:Transformer的Encoder和Decoder均由6个block堆叠而成
继续分析每个encoder的详细结构:在Transformer的encoder中,数据首先会经过一个叫做‘self-attention’的模块得到一个加权之后的特征向量ZZ,这个便ZZ是论文公式1中的Attension(Q,K,V)Attension(Q,K,V):
Attension(Q,K,V)=softmax(QKTd1/2k)VAttension(Q,K,V)=softmax(QKTdk1/2)V
第一次看到这个公式可能会一头雾水,在后面的文章中会揭开这个公式背后的实际含义,在这一段暂时将其叫做ZZ 。得到ZZ之后,会被送到encoder的下一个模块,即Feed Forward Neural Network。这个全连接有两层,第一层的激活函数是ReLU,第二层是一个线性激活函数,可以表示为:
FFN=max(0,ZW1+b1)W2+b2FFN=max(0,ZW1+b1)W2+b2
Encoder的结构如图4所示
图4:Transformer由self-attention和Feed Forward neural network组成
Decoder的结构如图5所示,和encoder的不同之处在于Decoder多了一个Encoder-Decoder Attention,两个Attention分别用于计算输入和输出的权值
- Self-Attention:当前翻译和已经翻译的前文之间的关系;
- Encoder-Decoder Attention:当前翻译和编码的特征向量之间的关系。
图5:Transformer的解码器由self-attention,encoder-decoder attention以及FFNN组成
2.2 输入编码
1.1节介绍的就是Transformer的主要框架,下面将介绍输入数据。如图6所示,首先通过Word2Vec等词嵌入方法将输入语料转化成特征向量,论文中使用的词嵌入的维度为dmodel=512dmodel=512
图6:单词的输入编码
在最底层的block中,xx将直接作为Transformer的输入,而在其他层中,输入则是上一个block的输出。为了画图更简单,使用更简单的例子来表示接下来的过程,如图7所示:
图7:输入编码作为一个tensor输入到encoder中
2.3 Self-Attention
Self-Attention是Transformer最核心的内容,然而作者并没有详细讲解,下面来补充一下作者遗漏的地方。回想Bahdanau等人提出的用Attention,其核心内容是为输入向量的每个单词学习一个权重,例如在下面的例子中判断it代指的内容
The animal didn't cross the street because it
was too tired
通过加权之后可以得到类似图8的加权情况,在讲解self-attention的时候也会使用图8类似的表示方式:
图8:经典Attention可视化示例图
在self-attention中,每个单词有3个不同的向量,分别是Query向量(QQ),Key向量(KK)和Value向量(VV),长度均是64。是通过3个不同的权值矩阵由嵌入向量 XX 乘以三个不同的权值矩阵WQWQ, WKWK, WVWV 得到,其中三个矩阵的尺寸也是相同的。均是512×64512×64 。
图9:Q,K,V的计算示例图
那么Query,Key,Value是什么意思呢?在Attention的计算中扮演着什么角色呢?先看一下Attention的计算方法,整个过程可以分成7步:
- 如上文,将输入单词转化成嵌入向量;
- 根据嵌入向量得到qq, kk, vv 三个向量;
- 为每个向量计算一个score:score=q∗kscore=q∗k ;
- 为了梯度的稳定,Transformer使用了score归一化,即除以d1/2kdk1/2;
- 对score施以softmax激活函数;
- softmax点乘Value值vv ,得到加权的每个输入向量的评分vv ;
- 相加之后得到最终的输出结果z=∑vz=∑v 。
上面步骤的可以表示为图10的形式。
图10:Self-Attention计算示例图
实际计算过程中是采用基于矩阵的计算方式,那么论文中的QQ, VV, KK 的计算方式如图11:
图11:Q,V,K的矩阵表示
如图12所示的矩阵形式,这个softmax分数决定了每个单词对编码当下位置(“Thinking”)的贡献。显然,已经在这个位置上的单词将获得最高的softmax分数,上述第三步和第四步是将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1。
图12:Self-Attention的矩阵表示
这里也就是公式1的计算方式。在self-attention需要强调的最后一点是其采用了残差网络中的short-cut结构,目的当然是解决深度学习中的退化问题,得到的最终结果如图13。
图13:Self-Attention中的short-cut连接
2.4 Multi-Head Attention
Multi-Head Attention相当于hh个不同的self-attention的集成(ensemble),在这里以h=8h=8举例说明。Multi-Head Attention的输出分成3步:
- 将数据XX分别输入到图13所示的8个self-attention中,得到8个加权后的特征矩阵Zi,i∈1,2,...,8Zi,i∈1,2,...,8。
- 将8个ZiZi按列拼成一个大的特征矩阵512,64×8512,64×8。
- 特征矩阵经过一层全连接后得到输出ZZ。
整个过程如图14所示:
图14:Multi-Head Attention
同self-attention一样,multi-head attention也加入了short-cut机制。现在已经触及了注意力的头,让重新审视之前的例子,看看不同的注意力头在哪里聚焦,因为在例句中编码“it”这个词:
当对“它”这个词进行编码时,一个注意力的焦点主要集中在“动物”上,而另一个注意力集中在“疲惫” - 从某种意义上说,模型对“它”这个词的表现形式在某些表现形式中有所表现。 “动物”和“疲倦”。
2.5 位置编码
截止目前为止,介绍的Transformer模型并没有捕捉顺序序列的能力,也就是说无论句子的结构怎么打乱,Transformer都会得到类似的结果。换句话说,Transformer只是一个功能更强大的词袋模型而已。
为了解决这个问题,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。
那么怎么编码这个位置信息呢?常见的模式有:a. 根据数据学习;b. 自己设计编码规则。在这里作者采用了第二种方式。那么这个位置编码该是什么样子呢?通常位置编码是一个长度为 dmodeldmodel的特征向量,这样便于和词向量进行单位加的操作,如图16。
图16:Position Embedding
论文给出的编码公式如下:
PE(pos,2i)=sin(pos100002idmodel)PE(pos,2i)=sin(pos100002idmodel)
PE(pos,2i+1)=cos(pos100002idmodel)PE(pos,2i+1)=cos(pos100002idmodel)
在上式中,pospos 表示单词的位置, ii 表示单词的维度。关于位置编码的实现可在Google开源的算法中get_timing_signal_1d()
函数找到对应的代码。
作者这么设计的原因是考虑到在NLP任务重,除了单词的绝对位置,单词的相对位置也非常重要。根据公式$sin(\alpha+\beta)=sin{\alpha}cos{\beta}+cos{\alpha}sin{\beta}$ 以及 cos(α+β)=cosαcosβ−sinαsinβcos(α+β)=cosαcosβ−sinαsinβ,这表明位置k+pk+p的位置向量可以表示为位置kk的特征向量的线性变化,这为模型捕捉单词之间的相对位置关系提供了非常大的便利。
如果假设嵌入的维数为4,那么实际的位置编码将如下所示:
图17:词嵌入大小为4的位置编码
在下图中,每行对应矢量的位置编码。因此第一行将是添加到输入序列中嵌入第一个单词的向量。每行包含512个值 - 每个值介于1和-1之间。对进行了颜色编码,使图案可见。
图18:位置编码的可视化
嵌入大小为512(列)的20个字(行)的位置编码的真实示例。可以看到在中心区域分成两半。这是因为左半部分的值由一个函数(使用正弦)生成,而右半部分由另一个函数(使用余弦)生成。然后将连接起来以形成每个位置编码矢量。
2.6 残差结构
如果要将向量和与self-attention相关的图层规范操作可视化,将如下所示:
图19:self-attention的图层可视化
这也适用于解码器的子层。如果将2个堆叠编码器和解码器图层可视化,看起来像这样:
图20:编码器和解码器的可视化
2.7 解码器结构
既然已经涵盖了编码器方面的大多数概念,基本上都知道解码器的组件是如何工作的。但是让来看看如何协同工作。 编码器通过处理输入序列开始。然后将顶部编码器的输出变换成一组注意力向量K和V.这些将由每个解码器在其“编码器 - 解码器注意力”层中使用,这有助于解码器关注输入序列中的适当位置:
图21:解码过程
完成编码阶段后,开始解码阶段。解码阶段中的每个步骤输出来自输出序列的元素(在这种情况下为英语翻译句子)。
以下步骤重复该过程,直到到达特殊符号,表明Transformer解码器已完成其输出。每个步骤的输出在下一个时间步骤中被馈送到底部解码器,并且解码器像编码器那样冒泡解码结果。就像对编码器输入所做的那样,在这些解码器输入中嵌入并添加位置编码,以指示每个字的位置。
图22:关注输出序列的解码过程
解码器中的self-attention层以与编码器中的self-attention层略有不同的方式操作: 在解码器中,仅允许self-attention层关注输出序列中的较早位置。这是通过在self-attension计算中的softmax步骤之前屏蔽未来位置(将设置为-inf)来完成的。 “Encoder-Decoder Attention”层就像多头self-attention一样,除了从下面的层创建其查询矩阵,并从编码器堆栈的输出中获取键和值矩阵。
2.8 The Final Linear and Softmax Layer
解码器堆栈输出浮点数向量。如何将其变成一个单词?这是最终线性层的工作,其后是Softmax层。 线性层是一个简单的全连接的神经网络,将解码器堆栈产生的向量投影到一个更大的向量中,称为logits向量。
让假设模型知道从训练数据集中学到的10,000个独特的英语单词(模型的“输出词汇表”)。这将使logits向量10,000个细胞(cell)宽 - 每个细胞(cell)对应于一个唯一单词的得分。这就是如何解释模型的输出,然后是线性层。 然后softmax层将这些分数转换为概率(全部为正,全部加起来为1.0)。选择具有最高概率的单元,并且将与其相关联的单词作为该时间步的输出。
图23:关注输出序列的解码过程
该图从底部开始,向量的产生为解码器堆栈的输出。然后变成输出字。
2.9 损失函数
现在已经通过训练有素的Transformer覆盖了整个前向过程,看一下寻两模型的直觉是有用的。 在训练期间,未经训练的模型将通过完全相同的前向过程。但是由于在标记的训练数据集上训练,可以将其输出与实际正确的输出进行比较。 为了想象这一点,让假设输出词汇只包含六个单词(“a”,“am”,“i”,“thanks”,“student”和“”(“句末”的缩写)) 。
图24: 词对应索引
在开始训练之前,模型的输出词汇是在预处理阶段创建的。一旦定义了输出词汇表,就可以使用相同宽度的向量来表示词汇表中的每个单词。这也称为“one-hot”编码。例如,可以使用以下向量指示单词“am”:
图25:输出词汇的编码
在回顾一下之后,让讨论一下模型的损失函数 - 在训练阶段优化的指标,以引导一个训练有素且令人惊讶的精确模型。
假设正在训练模型。说这是在训练阶段的第一步,正在训练一个简单例子 - 将“merci”翻译成“谢谢”。 这意味着,希望输出是指示“谢谢”一词的概率分布。但由于这种模式还没有接受过训练,所以这种情况不太可能发生。
图26:输出词汇的编码
由于模型的参数(权重)都是随机初始化的,因此(未经训练的)模型产生具有每个单元/单词的任意值的概率分布。可以将与实际输出进行比较,然后使用反向传播调整所有模型的权重,使输出更接近所需的输出。
如何比较两个概率分布?简单地从另一个中减去一个。有关更多详细信息,请查看交叉熵和Kullback-Leibler散度。
但请注意,这是一个过于简单的例子。更现实的是,将使用长于一个单词的句子。例如 - 输入:“jesuisétudiant”和预期输出:“是学生”。这真正意味着,希望模型能够连续输出概率分布,其中:
1. 每个概率分布由宽度为vocab_size的向量表示(在前面示例中为6,但更实际地是3,000或10,000的数字)
2. 第一概率分布在与单词“i”相关联的单元处具有最高概率
3. 第二概率分布在与单词“am”相关联的单元格中具有最高概率
4. 依此类推,直到第五个输出分布表示'<句末结束>'符号,其中还有一个与10,000元素词汇表相关联的单元格。
图27: 目标词的真实位置
将在一个样本句子的训练示例中训练模型的目标概率分布。在足够大的数据集上训练模型足够的时间之后,希望产生的概率分布看起来像这样:
图28: 模型预测单词的位置
希望通过训练,模型将输出期望的正确翻译。当然,这个短语是否是训练数据集的一部分并不是真正的指示(参见:交叉验证)。请注意,即使不太可能是该时间步的输出,每个位置都会获得一点概率 - 这是softmax非常有用的属性,有助于训练过程。
现在,因为模型一次生成一个输出,可以假设模型从该概率分布中选择具有最高概率的单词并丢弃其余的单词。这是一种方法(称为贪婪解码)。另一种方法是保持前两个词(例如,'I'和'a'),然后在下一步中,运行模型两次:一旦假设第一个输出位置是单词'I',另一次假设第一个输出位置是单词'me',并且考虑到#1和#2位置保留的任何版本产生的错误都较少。重复这个位置#2和#3 ......等。这种方法称为“波束搜索”,在例子中,beam_size是两个(因为在计算位置#1和#2的波束后比较了结果),top_beams也是两个(因为保留了两个词)。这些都是可以尝试的超参数。
3. 总结
优点:
- 虽然Transformer最终也没有逃脱传统学习的套路,Transformer也只是一个全连接(或者是一维卷积)加Attention的结合体。但是其设计已经足够有创新,因为其抛弃了在NLP中最根本的RNN或者CNN并且取得了非常不错的效果,算法的设计非常精彩,值得每个深度学习的相关人员仔细研究和品位。
- Transformer的设计最大的带来性能提升的关键是将任意两个单词的距离变成1,这对解决NLP中棘手的长期依赖问题是非常有效的。
- Transformer不仅仅可以应用在NLP的机器翻译领域,甚至可以不局限于NLP领域,是非常有科研潜力的一个方向。
- 算法的并行性非常好,符合目前的硬件(主要指GPU)环境。
缺点:
- 粗暴的抛弃RNN和CNN虽然非常炫技,但是也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer的结合可能会带来更好的效果。
- Transformer失去的位置信息其实在NLP中非常重要,而论文中在特征向量中加入Position Embedding也只是一个权宜之计,并没有改变Transformer结构上的固有缺陷。
参考链接
https://mp.weixin.qq.com/s/btdnjKVVSuLZH15bXmihlw
论文链接: https://www.arxiv-vanity.com/papers/2009.06732
https://mp.weixin.qq.com/s/_th7rXfZDuSu2xo7gdPp0w
https://www.cnblogs.com/zhongzhaoxie/p/13064374.html
Transformer论文及相关代码:
- Read the Attention Is All You Need paper, the Transformer blog post (Transformer: A Novel Neural Network Architecture for Language Understanding), and the Tensor2Tensor announcement.
- Watch Łukasz Kaiser’s talk walking through the model and its details
- Play with the Jupyter Notebook provided as part of the Tensor2Tensor repo
- Explore the Tensor2Tensor repo.
Transformer相关工作:
- Depthwise Separable Convolutions for Neural Machine Translation
- One Model To Learn Them All
- Discrete Autoencoders for Sequence Models
- Generating Wikipedia by Summarizing Long Sequences
- Image Transformer
- Training Tips for the Transformer Model
- Self-Attention with Relative Position Representations
- Fast Decoding in Sequence Models using Discrete Latent Variables
- [Adafactor: Adaptive Learning Rates with Sublinear Memory Cost](https://arxiv.org/abs/1804.04235
标签:编码器,嵌入,模型,Transformer,解码器,长文,注意力 来源: https://www.cnblogs.com/wujianming-110117/p/16172556.html