TL;DR: UPop 是首个针对 Vision-Language Transformers 的结构化剪枝框架,此外也适用于单模态 Transformers。UPop 在各种多模态和单模态任务上进行了广泛的实验,相关代码已开源。
论文题目:
UPop: Unified and Progressive Pruning for Compressing Vision-Language Transformers
文章链接:
https://proceedings.mlr.press/v202/shi23e/shi23e.pdf
代码链接:
https://github.com/sdc17/UPop
网站链接:
https://dachuanshi.com/UPop-Project
随着 AI 模型(例如各种 Transformer [1] 模型)的飞速发展,它们的参数量和计算代价也在急剧增长。要让这些大模型能在更多的消费级设备上使用和部署,模型压缩至关重要。虽然此前的研究者们提出了多种方法用于模型压缩(例如模型剪枝、量化、知识蒸馏等等),但是这些方法主要针对于单模态模型(例如单模态的 CV 和 NLP 模型)。至于如何压缩多模态模型,相对来说是有待探究的。
本文将介绍使用结构化剪枝方法 UPop 实现对于 Vision-Language Transformer 模型的压缩。
简介
是什么:UPop 是首个用于 Vision-Language Transformer 模型的结构化剪枝框架,它能够对各种多模态和单模态任务(视觉推理、图像描述、视觉问答、图像-文本检索,文本-图像检索、图像分类和图像分割)、数据集(NLVR2、COCO Caption、VQAv2、COCO、Flickr30K、ImageNet 和 ADE20K)和模型结构(BLIP [2]、CLIP [3]、DeiT [4] 和 Segmenter [5])进行有效的结构化剪枝。
解决了什么问题:视频中演示了:(1)不同于以往使用网格搜索进行重复实验,UPop 使用的 Unified Search 能更高效地为不同模态和结构搜索给定总压缩率下各自的最优压缩率。(2)此外,UPop 使用的 Progressive Pruning 消除了以往的剪枝方法中存在着的,搜索后的模型与待重新训练的子网络之间的参数权重 gap,从而获得了更好的收敛性和在高压缩率下更好的表现。
表现如何:例如在多模态任务上,UPop 能在视觉问答的 VQAv2 数据集和视觉推理的 NLVR2 数据集上分别以 1.2% 和 2.0% 准确度的损失实现 2 倍的压缩。而例如在单模态任务上,UPop 能在图像分类的 ImageNet 数据集和图像分割的 ADE20K 数据集上分别实现 1.5 倍和 1.2 倍不降低准确度的无损压缩,下表展示了 UPop 在 vector-level structured 剪枝粒度下的部分实验结果。
需要注意的是 UPop 的实验结果是使用切实更小的参数矩阵得到的。例如剪枝前的模型参数矩阵为 ,那么剪枝后模型的参数矩阵则为 ,,其中至少有一个小于号是严格的。而对于非结构化剪枝(unstructured/weight pruning)的方法来说,剪枝后模型的参数矩阵为 ,也即剪枝后的模型参数矩阵由原有的模型参数矩阵乘上相同形状 element-wise 的 01 掩码矩阵 得到,剪枝后总体参数形状仍为 (因为矩阵中每行每列非 0 元素数量不同,所以不能实际剪出来一个小矩阵)。
方法
2.1 剪枝粒度
UPop 实现的是 vector-level 的结构化剪枝,也即最小的剪枝单元为模型参数矩阵的整行或者整列。相比于非结构化的剪枝方法,vector-level 的结构化剪枝使得UPop 可以将剪枝后的小模型真正地从原模型中抽取出来(矩阵消除整行或整列后仍然是一个合法的矩阵,然而非结构化剪枝会导致矩阵中每行或者每列需要剪掉的参数数量不同,从而剪枝后的参数无法构成一个合法的矩阵)。
总体而言,非结构化剪枝由于具有更精细的粒度,因此剪枝后的模型准确度会相对更高,但是部署会相对更困难。而结构化剪枝由于粒度更粗糙,因此剪枝后的模型的准确度会相对更低,但部署会更简单。UPop 方法本身并不受限于某一种粒度,而具体使用结构化还是非结构化来实现剪枝算法实际上是在模型准确性和可部署性之间的一个 tradeoff,因而在比较剪枝后的模型准确度时应限定在相同的粒度下进行比较才是公平的。
▲ UPop is implemented as a vector-level structured pruning method.
2.2 Unified Search
Unified Search 的使用解决了以往的方法中存在着的第一个 challenge:当给定一个总的压缩率时,我们需要手动地为不同模态中的不同的可压缩成分分配各自合适的压缩率。然而手动分配是十分低效的,尤其是当模型存在着多种类型的可压缩组件时(例如模型的视觉和语言分支中各自的 Self-Attentions, Cross-Attentions 以及 Feed-Forward Nets)。
下面以 50% 的总压缩率为例对比以往的方法和 UPop 所使用