卷积网络版的network slimming在ICCV 2017上被提出,作为神经网络剪枝领域代表性的工作之一,目前已被引用超过1400次,五年之后的CVPR 2022,原作者团队跟Meta、印度理工等单位联合打造了ViT版的slimming,据悉该工作得到了四个审稿人一致推荐接收!
论文:https://arxiv.org/pdf/2201.00814.pdf
代码:https://github.com/Arnav0400/ViT-Slim
是什么原因让network slimming的ViT版本收到了所有审稿人的一致青睐呢,这里还得说一下network slimming这种方法的几个特点,即:简单(simple) + 有效(effective) + 灵活(flexible)。通过简单的引入指示因子,slimming可以边训练边搜索,类似于隐式的参数共享机制,压缩后的目标网络结构通过排序指示因子就可获得,非常高效方便。ViT-Slim继承了这些优点,同时针对ViT主干网络结构的特性做出了几个改进。
在介绍改进前先回顾一下network slimming的方法和原理。用一句话来概括就是说,对于卷积神经网络,每层每个卷积核都用一个重要性系数去表征它对最后预测结果的贡献程度,如果这个系数接近于0,我们就认为它是没有贡献并可以被去掉的。作者通过施加一个正则使得这些系数变得稀疏,同时作者发现由于通常会将卷积核与批量归一(BN)一起使用,因此我们可以直接使用BN层的缩放系数作为每层卷积的重要性系数,这样就不需要引入额外的参数了。
对于ViT Slimming,需要解决的核心问题是如何在没有BN层的情况下设计合适的指示参数来反映不同模块规模对于整个分类性能的重要程度。文章采用的是通过显式地定义可导的soft mask来确定每个模块的大小和尺度,整个过程如下图所示。
ViT Slimming同时考虑了ViT里面三个模块:输入tokens,MHSA和MLP模块,它的训练过程可以看成是一个基于权重共享的子网络搜索过程,主干网的权重可以通过加载预训练好的模型参数来加快搜索。训练过程中soft mask接近0对应的特征相当于动态地被裁剪/丢弃了。该方法的优点是只需训练/搜索一次,就可以通过排序mask得到无数个子网络,非常高效灵活。算法优化函数由原始的cross-entropy和稀疏正则组成,如下所示:
其中在ViT的MHSA模块内部加soft mask的处理如下:
在MLP模块加soft mask的处理如下:
下面是ViT-Slim跟其他一些ViT压缩或者瘦身方法的区别,主要在于搜索方法以及使用范围的不同。
相比其他方法,ViT Slimming可以同时减少模型参数量和计算量,同时由于可以继承已经正常训练好的模型性参数,搜索过程需要的时间非常少,对资源需要也不是很大。
ImageNet-1K实验结果:
1.单个模块不同budgets下的精度:
2.多个模块不同budgets下的精度:
3.跟其他SOTA方法的性能比较:
可以看出在更少的参数及计算量的条件下,ViT-Slim可以得到更加好的性能。
下游分类任务的结果:
可视化分析:
1.搜索得到的每个Attention head结构:
可以看到搜索得到的attention head结构数目呈现中间大,两边小(高层更加明显)的现象。
2.搜索得到的MLP维度结构大小:
可以看到搜索得到的MLP结构同样呈现中间大,两边小的现象,这也是一个非常有意思的地方。
更多细节大家可以去看原文(https://arxiv.org/pdf/2201.00814.pdf)和代码(https://github.com/Arnav0400/ViT-Slim)。