(Patch Slimming for Efficient Vision Transformers)论文总结

Abstract

        作者研究了visual transformer在给定的网络中挖掘冗余计算的效率问题。transformers在最近的研究中在一系列cv任务上表现优异。与cnn相同,巨大的计算成本是一个严重的问题。提出了一种新的精简patchs的方法。该方法能有效降低计算成本,且不会影响性能。 在imagnet数据集上,超过45%的ViT-Ti模型的FLOP可以减少,在top-1上却只有0.2%的正确率下降了。

1.Introduction

        Transformer已经被应用于cv中并取得了很好的效果。与cnn比,Trtansformer引入的偏置更少。 为了减少计算成本,提出了很多模型压缩算法,如量化算法、知识蒸馏。此外,剪枝技术通过去除一些网络中的无用组件来减少神经结构。CNN中通道剪枝(或过滤器剪枝)是一种具有代表性的做法。但似乎用在Transformer上的研究很少。

    

        Transformer与CNN不同的是讲图像分割成多个块,并行计算块的特征。注意力机制将所有的patch嵌入到特征中作为输出。注意力图反映了任意patch间的关系和相似性。作者提到要在修剪后还能保持其特征性能,这在CNN中很难做到。此外并非所有的信息都是值得保存的。所以作者开发了一种识别能够有效识别和删除冗余patch的patch剪枝方法。

        作者的重点在于寻找到冗余patch,提出了一种自顶向下的方法。具体来说,patch剪枝从最后一层执行到第一层,冗余patch会用类标记法来计算出重要性分数。patch会被较深的层保留。分数低的patch会被丢弃。所以剪枝可以保存原始的性能。

2.Related work

        描述了cnn剪枝的结构,并列举了部分研究者的操作和方法。

        描述transformer剪枝的结构,并列举了部分研究者的操作和方法,如:减少(MSA)模型的头、分析了transformer中每个头的作用并评估了对模型性能的影响、(MLP)模型中的神经员也被剪枝、引入了控制参数来去除小系数的神经元。作者最后提到减少patch也可以与其他与其他维度的剪枝相结合,以实现更高的加速。

3. Patch Slimming for Vision Transformer

        开始介绍剪枝的方案。

        回顾了transformer,并表示MSA和MLP占据了大量计算成本。

                                                               (d为嵌入的维度,h为头的数目)

        

                                            (W为线性变换的权重,为非线性激活函数)

         

         大多数vision transformer都是通过交替堆叠MSA和MLP构建的。

         block被定义为

         综上,transformer中存在大量的冗余信息。作者通过计算patch之间的平均余弦相似性来验证。下图为层间相似性的变化。随着层增加,相似性也随之迅速增加。高相似度意味patch为冗余的。

 

         用了一个二进制向量N表示是否保留patch,并公式化为

         为对角矩阵,表示第l层中的第i个补丁被剪枝。

         ,为第l层输入和中间特征。

           剪枝block定义为

           原来的block和现在的剪枝block相比减少了大量计算成本。作者对比了原本的方法,列举了能减少的FLOP数量。

4. Excavating Redundancy via Inverse Pruning

        本节作者介绍自顶向下的框架,以及评估每个patch的重要性分数的方法。

4.1. Top-Down Pruning      

        选择自顶向下有两个原因。

        如图二所示,CNN相邻间层通过学习权重完全连接,每个通道包含图像的完整信息 。然而在transformer中,不同的patch间通过注意力图进行交互,这反映了不同patch之间的相似性。如果patch之间更相似,则值更大。对角线元素起主导作用,就是说patch对其自身位置输入给予了最高关注。此外shortcut会直接将特征复制到下一层对应的patch中。这种一对一的模式让我们在不同层中相同的空间位置都能保留重要的patch。

        transformer中更深的层往往有更多的冗余。这意味在更深的层中应安全地移除更多的冗余,而较浅的层中应安全地移除更少的冗余。

        综上,先从输出层开始剪枝,然后通过选出的有效patch来剪枝前一层。特别的保存在第(l+1)的patch同样也会保存在第1层中。

        剩下就是识别冗余补丁,即在每层找到。实际上,只有最后一层的一部分patch用于解决给定的任务。比如,在图像分类中,只有一个与分类相关的patch(即类标记)被用来预测标签。所以输出层中其他patch可以安全删除。假设第一个patch为类标记,则可以得到最后一层的

其他层的,优化公式为:

 

 

 

 

 

 

 

         

 

 

        

        

### Network Slimming 技术原理 Network Slimming 是一种用于高效卷积网络的剪枝方法,该方法通过对批归一化(Batch Normalization, BN)层中的缩放因子施加 L1 正则化来实现通道级别的剪枝[^2]。具体来说,在训练阶段引入额外的正则项使得某些通道对应的缩放因子逐渐趋近于零,从而可以识别并移除那些对模型贡献较小的通道。 #### 施加 L1 正则化的机制 为了使部分通道变得不重要以便后续去除,会在BN层内的γ参数上增加L1范数惩罚项: \[ \min_{W,\gamma} \sum_i^{N}\left \| y_i-f\left(x_i; W,\beta ,\frac{\gamma }{\sqrt{\sigma ^{2}+\epsilon }}\right ) \right \|^2_2 + \lambda \|\gamma\|_1 \] 其中 \(f\) 表示前向传播函数;\(y_i,x_i\) 分别代表第i个样本的真实标签和输入特征图;而最后一项即为针对所有BN层中γ系数求解绝对值之和的结果乘以超参λ作为权重衰减力度控制因素[^3]。 当某个特定位置上的 γ 值接近或等于 0,则意味着相应位置所关联的那个滤波器在整个数据集范围内几乎不起作用,因此可以在不影响整体表现的情况下安全删除这样的冗余单元。 #### 对应关系与修剪过程 每个缩放因子仅对应到具体的卷积通道或是全连接层里的单个神经元之上,所以一旦确定哪些γ数值很小就可以直接定位要裁掉的具体组件。对于被标记出来的低效路径实施物理意义上的切断操作之后,整个架构会变得更加精炼简洁,不仅减少了存储空间占用量同时也加快了推理速度。 ```python import torch.nn as nn class SlimmableConv2d(nn.Conv2d): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.bn = nn.BatchNorm2d(self.out_channels) def apply_l1_regularization(model, lambda_reg=0.0001): l1_loss = sum([torch.sum(torch.abs(param)) for name,param in model.named_parameters() if 'bn.weight' in name]) return lambda_reg * l1_loss ``` ### 应用实例 采用此策略构建更轻量化版本的深度学习框架能够有效降低硬件成本以及能耗开销,尤其适合移动设备端的应用场景。实验表明经过适当调整后的剪枝版ResNet-56能够在ImageNet分类任务上保持原有水平的同时减少约一半以上的浮点运算次数[FLOPs][^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值