1简介
大规模预训练的Vision TRansformer
,如ViT
, CvT
和Swin
,由于其高性能和下游任务的优越性能,最近引起了极大的关注。然而,它们通常涉及巨大的模型尺寸和大量的训练数据。例如,ViT
需要使用3亿张图像来训练一个带有6.32亿参数的巨大模型,才实现了图像分类的最先进性能。同时,Swin
使用2-3亿个参数,并在ImageNet-22K上进行了预训练,以在下游检测和分割任务上取得良好的性能。
数以亿计的参数消耗了相当大的存储和内存,这使得这些模型不适合涉及有限计算资源的应用程序,如边缘和物联网设备,或者需要实时预测的任务。最近的研究表明,大规模的预训练模型是过度参数化的。因此,在不影响这些预训练模型性能的情况下,消除冗余参数和计算开销是必要的。
权重共享
是一种简单且有效的减少模型尺寸的技术。神经网络中权重共享
的最初想法是在20世纪90年代由LeCun和Hinton提出的,最近被重新发明用于自然语言处理(NLP)中的Transformer
模型压缩。最具代表性的工作是ALBERT
,它引入了一种跨层权重共享
的方法,以防止参数的数量随着网络深度的增加而增长。该技术可以在不严重影响模型性能的情况下显著降低模型尺寸,从而提高参数效率。然而,Weight sharing
在Vision Transformer
压缩中的有效性尚未得到很好的探索。
为了验证这一点,作者在DeiT-S
和Swin-B Transformer
上执行跨层权重共享
。出乎意料的是,这种直接使用权重共享
带来了2个严重的问题:
- 训练不稳定:作者观察到,
Weight sharing across transformer layers
使训练变得不稳定,甚至随着共享层数量的增加,导致训练坍塌; - 性能下降:
权重共享
Vision Transformer
的性能与Vision Transformer
相比有明显下降。例如,虽然权重共享
可以将模型参数的数量减少4倍,但是它还是带来了Swin-s Transformer
精度下降5.6%,。
为了调查这些结果的潜在原因,作者分析了训练过程中梯度的ℓ2-范数
以及模型权重前后的中间特征表征之间的相似性。作者发现,在不同层上完全相同的权重是问题的主要原因。特别是,在权重共享
过程中,不同Transformer Block
中的层归一化
不应该完全相同,因为不同层的特征具有不同的尺度和统计量。同时,梯度的ℓ2-范数
变大,并在不同层间波动,导致训练不稳定。
最后,Central Kernel Alignment
(CKA)值(一个流行的相似性度量)在最后几层显著下降,表明模型在权重共享
前后生成的特征图相关性较小,这可能是性能下降的原因。
在本文中提出了一种新的技术,称为Weight Multiplexing
,来解决上述问题。Weight Multiplexing
由Weight Transformation
和Weight Distillation
两个组件组成,共同压缩预训练好的Vision Transformer
。
图2
Weight Transformation
的关键思想是对共享的权值进行转换,使不同层的权值略有不同,如图2所示。该操作不仅可以促进参数的多样性,而且还可以提高训练的稳定性。
更具体地说,对每个权重共享Transformer Layer
的多头自注意力
(MSA)模块和多层感知器
(MLP)模块进行了简单的线性变换。每一层都包含单独的变换矩阵,因此MLP对应的注意力权重和输出在不同层间是不同的。与共享相同的参数相比,不同层的层归一化
也是分开的。因此,可以让Weight Sharing Transformer
网络的优化变得更加稳定。
为了防止性能下降,作者进一步用Weight Distillation
设计了Weight Multiplexing
,这样嵌入在预训练的模型中的信息可以转移到权重共享
的小模型中,这就可以产生更紧凑和更轻的模型。与之前仅依赖于Prediction-Level
蒸馏的工作相比,本文的方法同时考虑了Attention-Level
和Hidden-State
蒸馏,允许较小的模型更好地模拟原始预训练的大型教师模型的行为。
图1
实验表明,Weight Multiplexing
方法在Baseline上实现了明显的精度提高,并将预训练好的Vision Transformer
压缩了2倍。例如,通过提出的Weight Multiplexing
,12层的Mini-Swin-B
模型比24层Swin-B
高0.8%。此外,具有9M参数的MiniDeiT-B
在ImageNet上达到了79.8%的Top-1位精度,比DeiT-B
小9.7倍。用本文的方法压缩得到的12M微型模型可以很好地迁移到下游目标检测,在COCO验证集上实现了48.6的AP,这与使用28M参数的原始Swin-T
相当。
主要贡献
- 系统地研究了
权重共享
在Vision Transformer
中的有效性,并分析了权重共享
带来问题的原因; - 提出了一种新的通用
Vision Transformer
压缩框架MiniViT
。实验结果表明,MiniViT
可以在不损失精度的前提下获得较大的压缩比。此外,MiniViT
的性能也可以很好地迁移到下游任务。
2师从何处?
2.1 Vision Transformer
Transformer
虽然最初是为NLP设计的,但最近在计算机视觉方面也显示出了巨大的潜力。Vision Transformer
首先将输入图像分割成一系列被称为Token
的2D Patch
。然后,使用线性投影或堆叠的CNN层将这些Patch
展开并转换为d维向量(也称为Patch Embeddings
)。为了保留位置信息,Positional Embeddings
被添加到Patch Embeddings
中。然后将组合的Embeddings
输入到Transformer
编码器。最后,使用一个线性层来产生最终的分类。
Transformer
编码器由MSA
和MLP
的交替组成。在每个块前后分别应用层归一化
(LN)和残差连接。详细说明MSA和MLP块如下。
1、MSA
设M为Head
的数量,也称为自注意力模块。给定输入序列,在第k个Head
中,通过线性投影生成Query
、Key
和Value
,分别用、和表示,其中N是Token
的数量。D和d分别是Patch Embeddings
和Q-K-V矩阵
的维数。然后,计算序列中每个位置的所有值的加权和。这些权重被称为注意力权重,用表示,是基于序列中2个元素之间的成对相似性,即
其中,对输入矩阵的每一行进行softmax(·)
操作。最后,将一个全连接层应用于所有Head
的输出的连接。
2、MLP
MLP
块由2个FC层组成,其激活函数用σ(·)表示,通常为GELU
。设为MLP
的输入。MLP
的输出可以表示为
其中,、、、分别为第1层和第2层的权重和偏差。通常设置d'>d。
2.2 Weight Sharing
权重共享
是一种简单而有效的提高参数效率的方法。其核心思想是跨层共享参数,如图2(a)所示从数学上讲,权重共享
可以表述为一个Transformer Block
f(即一个共享层)的递归更新:
其中为序列在第i层中嵌入的特征,L为层总数,θ为各层间Transformer Block
的共享权值。
很多研究工作在自然语言Transformer
模型中探索并验证了权重共享的有效性。它可以防止参数的数量随着网络深度的增加而增加,而不会严重影响性能,从而提高参数的效率。