本篇论文由多个在transformer不同领域的牛人一起编写,文章包含以下内容:
Can transformer obtains satisfactory results with a very simple computational paradigm and massive data training?
我想,这个问题或许已经有答案了,最近的工作MLPMixer通过全连接层达到了很好的效果,加上ConvNet等非注意力机制的模型的亮眼表现,向我们摆出了一个可能的事实:注意力机制并不是一个all you need模型,对于模型的整体结构以及结构内的组件设计,比我们选择什么模型更重要~
如上图所示attention原理图,左图为注意力机制原理图,右图为多头注意力图,关于注意力机制,这里不再赘述,说说个人对于transformer各个结构的一个理解:
上图为如今常用的视觉任务的backbone,按照基本结构,分为Pure CNN, Pure Transformer, Hybrid Model。
视觉注意力机制:作为代表,ViT结构如上图所示,关于ViT的讲解可看我的另一篇关于ViT的博客【视觉Transformer开山之作:Vision Transformer(ViT)论文解读与复现】
关于Transformer在视觉上的应用,主要有两个方向:一是pure- transformer结构:以 ViT, DeiT等为代表,另一种是以混合结构:CvT, CeiT等论文的工作。
以ViT为代表,其网络结构如上图所示,输入的训练图片以patch形式输入,将图片输出为(N, p² x c)的二维向量序列并加入位置向量,并添加一个分类向量为输入,最后未入(N+1, p² x c)以类似于词向量的形式输入,输出为编码后的特征向量与一个分类向量(class token),ViT虽然实现了从NLP任务到图像任务的直接迁移与去偏置假设化(inductive biases),但是其在imageNet这样偏小的数据集上并不能表现得比CNN好,而是要在更大的数据集上才能显示出优势。原因可能是由于ViT本身需要更多的数据学习CNN归纳偏置的问题。
为了解决ViT的中小数据集表现不佳的问题,DeiT通过知识蒸馏,将Teacher的学习分布教给Student小模型解决了上述问题,改进了传统transformer参数庞大等问题。
针对视觉注意力,有三个改进的方向:一个是增强图像块patch内部的局部性弥补transformer注重全局不足,一个是改进自注意力attension结构,使模型在层数上允许更庞大或者简化注意力计算等更加适合视觉任务,最后就是整体结构设计,如利用NAS或者从CNN结构得到灵感改进传统transformer全局结构设计,组件优化设计。
除此之外,其他的一些优化方向:positional encoding, normalization strategy(layer-norm,batch-norm…) , shortcut connection(Residual) and removing attention(对非必要注意力去除)。
总结来说,以上的工作,其一增强其在dense prediction能力通过改进输入patch或者引入特有的不同尺度注意力融合机制;其二建立大型模型:通过缓解transformer堆叠时后面注意力不变化的问题来暴力堆叠layer;其三:对于训练策略的改进:输入编码、归一化方法、注意力失活(类似于dropout)来整体增强。
以上部分包含了对于transformer局部注意力偏弱的弱点,pure-transformer通过加强局部窗口之间的连接、仿照FPN进行多尺度的融合等方式,加强了局部性。但是除此之外,引入CNN对于加强局部性也是一种可行的方法。
下面是一些混合模型的样例:
在混合结构中,主要集中于transformer的embedding部分、patch之间的临近交互等方面,方法主要分为:通过直接添加CNN结构,或者将CNN结构进行适应transformer的改造。通过混合结构,能够兼顾dense prediction任务和converge加速。是混合模型还是pure模型更好,无法比较,pure模型能够拥有良好的泛化性,并且对于这样一种新模型的探索也是必要的,近期的ConvNet通过将transformer的一些策略用于CNN也使CNN”起死回生“。混合结构对于图像领域任务或者部署模型时,其对超参数的鲁棒性,模型参数大小和inference速度等是其独有的优点。
两者的融合,有相近之处,未来极有可能会向着相互参考,不断螺旋上升,这很像马克思中关于事物的发展规律。
综合以上模型,我个人认为,CNN对于图像任务具有针对性,如今的各类结构无论是纯Transformer的模型还是混合模型,其实现在都有在借鉴CNN的灵感,最近刷榜的swin-transformer之所以能够在多个分割、检测任务上都表现SOTA,其主要原因和引入了二维位置编码和滑动窗口所致,而这两个改进则引入了ViT作者在避免的归纳偏置问题。
另一方面,由于Transformer结构对于图像的无偏性、参数量偏大等因素,导致了transforme训练时间长、对batch大小和梯度下降方式较为敏感的问题,而通过将embedding替换为CNN结构,较快的收敛速度并且对超参数减弱敏感性,这些在Visformer一文中有提出具体的论证。
自监督学习,是最近的一个热门方向,其主要通过一种自监督的方式,将不带有标签的大量数据自行学习,通过代理任务学习样本丰富的特征以抽取样本的主要信息,从而达到在非人工标注下使模型学习的目的,同时模型具有良好的迁移性和扩展性。
以iGPT为代表,iGPT和ViT类模型的区别主要体现在三个方面。1)iGPT的输入是通过对像素进行聚类的图像块序列,而ViT则是将图像统一划分为若干个patch;2)iGPT的架构是一个编码器-解码器框架,而ViT只有多个编码器;3)iGPT利用自动回归自监督损失进行训练,而ViT则通过监督图像分类任务进行训练。
对比学习属于自监督学习的一种,通过代理任务,使模型通过样本对比完成对样本属性的信息深层挖掘,从而完成对样本属性的字典建立,即对样本特征描述的关键词,对比学习重要性在与词典的一致性和全面性,扩展性。
尽管标准卷积网络的训练方法已经非常成熟和强大,但ViT的方法尚未建立,尤其是在自监督的情况下,训练变得更具挑战性,同时探究 ViT 训练不稳定的问题,在这种背景下,MoCo v3被提出以解决这个问题。
MoCo v3(Momentum Contrastive),是其中的代表,它主要讲的是ViT如何进行自监督训练,它改进了MoCo,作者提出了很多改进transformer无监督训练时稳定性提高的方法:如不训练 ViT 的 patch projection 层;为省去 lr search 的麻烦,建议直接用 AdamW;batch size > 2048 时训练不稳定的情况愈发明显,会造成性能下降。通过以上方法,给出了transformer在自监督训练时的一些建议方法和训练规范。
很少有工作将transformer应用于低层次的视觉领域,如图像超分辨率和生成。这些任务通常以图像为输出(如高分辨率或去噪图像),这比分类、分割和检测等高级视觉任务更具挑战性,后者的输出是标签或方框。
以上为Transformer作为backbone时主流的两种模型:
第一种如上图所示,以DETR为代表(CNN+Transformer),为了实现真正的端到端学习,去掉NMS等后处理方法,作者提出了set prediction这种直接预测方式,每次预测固定的目标,并将GT与预测值一一对应,避免了重复预测的问题。
第二种,一种纯Transformer结构,以TSP-FCOS和TSP-RCNN为例, 一种encoder-only结构并结合feature pyramids。
分割也是计算机视觉中的关键任务,包括实例分割、语义分割、全景分割等。
通过在DETR的decoder部分附加带mask的head就可以天然的进行全景分割,Max-DeepLab就是直接使用一个mask transformer进行的全景分割,采用的是双流模型,融合了Transformer和CNN提取的结果。
VisTR是基于Transformer进行视频实例分割的模型,通过输入图像序列获得预测的实例。主要提出了一种将预测结果与GT进行匹配的策略,为了获得每种实例的mask,VisTR使用实例分割模块的结果,从多个帧中积累mask的特征,最终使用3DCNN对mask序列进行分割。
SETR是基于transformer用于语义分割的模型,使用了ViT类似的encoder结构,随后使用多级特征聚合模块(multi-level feature aggregation)进行像素级别的分割;Strudel则依赖与图像patch相对应的输出嵌入,并使用逐点的线性解码器或掩码Transformer。解码器从这些嵌入中 获取类标签。还有Xie等人在Transformer中使用轻量级的MLP decoder,这样避免使用较为复杂的deocder,也能输出多尺度特征。
Swin-Unet是一个像UNet的纯Transformer用于医学图像分割的网络模型,采用编解码结构和skip connection提取和融合上下文特征;Valanarasu研究了将Transformer用于医学图像分割的可行性,并提出一个门控的轴向注意力模型来扩充self-attention的能力。 Cell-DETR则是基于做全景分割的DETR结构,增加了skip connection增强特征融合。
transformer在基于序列的任务,特别是在NLP任务上的表现令人惊讶。在计算机视觉(特别是视频任务)中,空间和时间维度的信息是有价值的,这就导致了其在一些视频任务中的应用,如帧合成、动作识别和视频检索任务中比较出色。
多模态任务主要分为:video-text, image-text,audio-text,multi-sensor等任务中。transformer之所以能在跨模态任务中表现出色,重要原因是1. transformer没有引入对于样本本身的归纳偏置;2. 对于输入只需要分块处理,处理简单;3. Transformer是从NLP领域迁移,本身对主流的另一种模态就有适应性,综上,这是transformer在多模态任务上出色的重要原因。
以CLIP(Contrastive Language-Image Pre-training)为例,上图为结构图,下图为官方的demo通过搜索"two dog play in the snow"展示的结果。
CLIP作为一个zero-shot的模型,模型架构分为两部分,图像编码器和文本编码器,图像编码器可以是比如 resnet50,然后文本编码器可以是 transformer。所以目标函数就是最大化同一对图像和文本特征的内积,也就是矩阵对角线上的元素。
总之,目前基于transformer的多模态模型在统一各种模态的数据和任务方面显示了其结构上的优越性,这表明transformer在建立一个能够应对大量应用的通用代理任务方面的潜力。未来的研究可以在探索多模态transformer的有效训练或可扩展性方面进行。
注意力被用到高层任务之前,关键问题是输入格式的问题。自适应聚合、可变形注意力等都应用到注意力模型本身的改进,这些都停留在初级阶段,进一步想,传统结构与注意力的结合、大型数据集预训练的模型与微调在下游任务的应用、引入先验知识等都是一些值得探究的任务。
尽管transformer模型在各种任务中取得了成功,但它们对内存和计算资源的高要求阻碍了它们在资源有限的设备(如手机)上的实施。这一节主要在压缩和transformer模型方面所进行的研究,以便有效地实施。这包括网络修剪、低秩分解、知识提炼、网络量化和紧凑型架构设计。表4列出了一些压缩基于transformer的模型的代表性工作。
近期Transformer的一系列变体在Imagenet分类任务上取得了显著的效果提升,指标屡创新高。如果没有额外数据的输入,它们的性能仍然不如最新的SOTA CNN模型。由图可知,CMT等混合模型达到SOTA效果,对于pure-transformer和CNN结构,在同样的参数量下,Transformer需要更大的计算量。
在基于transformer的预训练模型(如BERT)中,注意力头是冗余的,多个注意操作被并行执行,以独立地模拟不同patch之间的关系。然而,特定的任务并不要求使用所有的头,例如Michel等人提出了实验性的证据,即在测试时可以去除很大比例的注意力头,而不会对性能产生重大影响。Dalvi等人考虑到注意力头的冗余,在中定义了重要性分数来估计每个头对最终输出的影响,不重要的头可以被移除以实现高效部署。同时,还可以reducing the dimensions of linear projections来达到修建的地步。
与transformer模型中不同的注意头可以并行计算的概念不同,不同的层必须按顺序计算,因为下一层的输入取决于前几层的输出。Fan等人提出了一种逐层丢弃的策略来规范模型的训练,然后在测试阶段将整个层一起移除。
除此之外,matrix decomposition也是一种可参考的办法,通过对注意力矩阵分解,达到近似精确结果。
知识蒸馏是比较热的方向,通过一个庞大模型”老师“,将知识”教授“给thinner and shallower的模型,使小模型学习其分布,以MOCO为代表。
将原本高精度的模型参数浮点型进行量化转换到低位(如4bit),低精度模型,虽然降低了模型计算量和大小,但是引起了精度的降低,现在研究对如何专门量化transformer模型的兴趣越来越大。例如,Shridhar等人建议将输入嵌入二进制高维向量中,然后使用二进制输入表示法来训练二进制神经网络。Cheong等人用低位(如4位)表示transformer中的权重。
上面讲述了通过通过知识蒸馏可以将模型简化并保持其大部分的性能,除此之外,我们还可以通过一开始就设计好一种紧凑的模型,这种方法以四个方向:
由于与CNN相比,Transformer的性能很有竞争力,而且潜力巨大,因此正在成为计算机视觉领域的一个热门话题。为了发现和利用注意力机制的力量,正如本文总结的那样,近年来提出了许多方法。这些方法在广泛的视觉任务上表现出优异的性能,包括骨干、高/中层视觉、低层视觉和视频处理。尽管如此,在计算机视觉方面的潜力还没有被充分挖掘出来,这意味着仍有几个挑战需要解决。
前面的方法在如何试图识别模型中的冗余方面采取了不同的方法。修剪和分解方法通常需要预先定义的具有冗余的模型。具体来说,剪枝法侧重于减少模型中的部件(如层、头)的数量,而分解法则是用多个小矩阵表示一个原始矩阵。紧凑模型也可以直接手动(需要足够的专业知识)或自动(例如通过NAS)设计。获得的紧凑模型可以进一步通过量化方法用低比特表示,以便在资源有限的设备上有效部署。
总结来说:去除模型冗余度上,有以下方法和步骤:
由于与CNN相比,而且潜力巨大,多位科研工作者对transformer结构从底层的注意力结构如注意力头交互、点积计算方法,到高层的high-level任务的应用,近年来提出了许多方法。这些方法在广泛的视觉任务上表现出优异的性能,包括作为骨干使用、高/中层视觉、低层视觉和视频处理任务。
尽管如此,它在计算机视觉方面的潜力还没有被充分挖掘出来,这意味着仍有几个挑战需要解决:其中最突出的几个挑战,包括模型参数量问题,稳定性问题、训练方法问题等都没有较优的方法能够整体提高transformer的性能,并且对于完全从NLP领域迁移的transformer模型本身是否适合视觉任务也有待考察。
首先是泛化性和鲁棒性问题,因缺少归纳偏置,pure-transformer需要更大尺度的数据量学习图像领域知识,同时也导致了其对初始参数的设置较为敏感,鲁棒性也会变差,你可以想象一下,CNN好比一个见过图像的一岁小孩,Pure-transformer是一个什么都没见过的刚出生的小孩,让他去分辨一个东西,当然需要更多的引导,也更容易犯错。对于检测和分割等dense-prediction问题,ViT表现得比CNN差强人意,这时候其缺少局部性的缺点就显露出来了。
ViT的参数量过大问题:对于同等任务性能下,基本的ViT结构需要18billion的FLOPs,而GhostNet(CNN)则需要600million参数,这限制了其在低算力设备上的应用。
- A Survey on Vision Transformer
- Efficient Transformers: A Survey
- 神经网络架构搜索(NAS)
- 模型量化(Model Quantization)
- Vision Transformer(ViT)