跳转至

CoMP: Collaborative Multi-Mode Pruning for Vision-Language Models

会议: CVPR 2026
arXiv: 2604.02956
代码: https://github.com/Wuzimeng/CoMP.git
领域: 多模态VLM
关键词: 模型剪枝, 视觉语言模型, 参数剪枝, Token剪枝, 协同压缩

一句话总结

CoMP 提出协同多模式剪枝框架,通过协同重要性度量(CIM)消除参数和 token 剪枝指标间的不一致性,通过多模式剪枝策略(MPS)自适应选择每阶段的最优剪枝模式,在高剪枝比例下显著优于单模式和简单联合剪枝方案。

研究背景与动机

VLM 基于 Transformer 架构,计算复杂度为 \(O(N^2D + ND^2)\),其中 \(N\) 是序列长度、\(D\) 是特征维度。参数剪枝减小 \(D\),token 剪枝减小 \(N\),两者互补。

两个核心挑战:(1) 重要性度量不一致——参数重要性的计算依赖所有 token,但 token 剪枝会移除部分 token,导致参数重要性被不重要的 token 主导。反之,token 重要性依赖所有参数,但参数剪枝会移除部分参数,导致 token 重要性失真。(2) 剪枝模式的固定应用——渐进剪枝中每阶段固定按相同顺序剪参数和 token,但不同阶段的最优剪枝模式不同。

方法详解

整体框架

CoMP 要解决的是同一个 VLM 上同时做参数剪枝和 token 剪枝时两套重要性指标互相打架的问题。它把剪枝组织成一个嵌套循环:外层由多模式剪枝策略(MPS)周期性地决定这一阶段该剪什么——在视觉参数、语言参数、跨模态参数、视觉 token、语言 token 这五种模式里挑一个;内层则由协同重要性度量(CIM)算出参数和 token 各自的重要性分数,并按外层选定的模式执行一次剪枝。两层循环交替推进:每切换一次模式就穿插若干训练步,渐进逼近目标 FLOPs;达到目标后固定剪枝配置、再微调恢复性能——因此 CoMP 并非训练无关(training-free)方法,而是把剪枝嵌进了微调过程。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
    A["输入:待压缩 VLM<br/>视觉编码器 + 语言模型"] --> B
    subgraph MPS["多模式剪枝策略 MPS(外层循环)"]
        direction TB
        B["估计 5 种模式的剪枝代价<br/>视觉/语言/跨模态参数 + 视觉/语言 token"] --> C["选代价最低的模式<br/>+ 随机探索 + 历史代价 EMA"]
        C --> D["抬高该模式的剪枝阈值"]
    end
    D --> CIM
    subgraph CIM["协同重要性度量 CIM(内层循环)"]
        direction TB
        E["token 加权算参数重要性"] <--> F["参数掩码修正 token 重要性"]
        F --> G["按选定模式剪一步<br/>+ 穿插若干微调步"]
    end
    CIM -->|未达目标 FLOPs| B
    CIM -->|达到目标 FLOPs| H["固定配置微调恢复<br/>→ 压缩后 VLM"]

关键设计

1. 协同重要性度量(CIM):让参数和 token 的重要性不再互相污染

参数剪枝和 token 剪枝单独看都成熟,但放在一起会互相干扰:参数重要性是在所有 token 上累积出来的,可一旦 token 被剪掉一批,这个累积就被那些本不该参与的 token 主导,算出来的参数重要性是失真的;反过来,token 重要性依赖所有参数,参数一被剪,token 排名也跟着错。CoMP 实测发现,对参数重要性贡献最大的那批 token,和 token 重要性排名前列的 token 重叠不到 30%,说明两套指标几乎各说各话。CIM 的做法是让两边互相"知会":算参数重要性时引入 token 加权的输入范数,按 token 当前的重要性给输入加权,让已经被判为不重要的 token 少贡献甚至不贡献;算 token 重要性时则把参数侧的剪枝掩码传进注意力权重矩阵,已被剪掉的参数不再影响 token 排名。这样两套度量都基于"对方剪完之后的真实状态"来算,从源头消除了相互污染。

2. 多模式剪枝策略(MPS):每个阶段动态挑最划算的剪枝模式,让视觉和语言按各自冗余分别压

渐进剪枝里常见的做法是每个阶段都按固定顺序剪参数再剪 token,但哪种模式最优其实是随阶段变化的——早期模型冗余多、且主要集中在 token 上,剪 token 代价低;到后期参数与 token 的冗余趋于相当、相互干扰加剧,最优模式随之漂移。固定顺序无法跟上这种变化。MPS 把剪枝切成多个阶段,并把可选项细分成五种模式:视觉参数、语言参数、跨模态参数、视觉 token、语言 token。每阶段先为这五种模式各估一个"剪枝代价" \(r\)——即按该模式剪一步后,模型在验证集上每单位 FLOPs 下降所付出的精度损失,然后挑代价最低的那个模式执行。为了不被单步噪声带偏,它对每种模式的代价维护一个指数滑动平均(EMA)来融合历史信息,并以概率 \(\rho\) 做随机探索(按距上次执行的间隔做加权 softmax 采样),避免一直贪心选同一模式而陷入局部最优。

把模式按模态拆开是这一步的关键收益所在:因为五种模式本身就是模态特定的,MPS 的代价比较自然让视觉和语言以不同速率被压缩——哪边当前剪得更"便宜"就多剪哪边,最终落到一个非均匀但更优的压缩配比,无需人工为每个模态指定剪枝率。这套"估代价—选最优—带探索"的调度逻辑,本质上是把多臂老虎机的思路搬到了剪枝调度上。

训练策略

CoMP 把剪枝嵌进微调过程而非训练无关:模式切换之间会穿插若干训练步,按选定模式渐进抬高阈值、累积重要性得分并平滑衰减掩码(沿用 UPop 的做法),直到模型达到目标 FLOPs;之后固定剪枝配置,再对剪枝后的模型做一轮微调以恢复性能。MPS 用到的"剪枝代价"直接由模型在验证集上每单位 FLOPs 的精度变化估算。

实验关键数据

主实验

方法 NLVR2 (50%剪枝) NLVR2 (70%剪枝) VQA 图文检索
参数剪枝 only
Token剪枝 only
简单联合
CoMP 最优 显著优于 最优 最优

在高剪枝比例(70%+)下优势尤为显著。

消融实验

配置 高剪枝比例性能 说明
无 CIM(独立度量) 明显下降 度量不一致导致错误剪枝
无 MPS(固定模式) 下降 非最优模式顺序
无随机探索 略下降 陷入局部最优
完整 CoMP 最优 所有组件必要

关键发现

  • CIM 的贡献在高剪枝比例下更加明显——低剪枝比例时度量不一致的影响较小
  • MPS 的自适应模式选择避免了人工调参——不同任务/模型的最优策略不同
  • 视觉和语言部分的最优剪枝比例确实不同,均匀剪枝是次优的

亮点与洞察

  • 度量不一致的发现:参数和 token 重要性度量间的干扰之前被忽视,CIM 的协同设计优雅地解决了这个问题
  • 自适应模式选择:借鉴多臂老虎机的思路(代价估计+探索),在剪枝中实现了自动化的策略选择
  • 高剪枝比例优势:在实际部署最需要的高压缩率场景下优势最大

局限与展望

  • MPS 的模式选择增加了剪枝过程的计算开销
  • 当前仅验证在 BLIP 系列模型上,对 LLaVA 等架构的适用性需进一步测试
  • Token 剪枝在推理时的动态性需要专用的推理优化
  • 未来可探索与量化的联合压缩

相关工作与启发

  • vs UPop/EViT: 单模式剪枝方法,在高压缩率下性能急剧下降
  • vs 简单联合剪枝: 不处理度量不一致,效果不如分别单模式剪枝
  • vs DepGraph/PLATON: 参数剪枝专用方法,缺乏 token 维度的压缩

评分

  • 新颖性: ⭐⭐⭐⭐ 度量不一致问题的发现和CIM设计有新意
  • 实验充分度: ⭐⭐⭐⭐ 多任务多剪枝比例全面测试
  • 写作质量: ⭐⭐⭐⭐ 问题分析清楚,图示直观
  • 价值: ⭐⭐⭐⭐ 对VLM部署有直接实用价值