备注好友:方向-学校/公司-姓名/昵称
【AIGC 先锋科技】交流群
视觉语言模型由于需要额外的输入 Token 来表示视觉信息,因此在推理过程中需要大量的计算资源。然而,这些视觉 Token 通常包含冗余和不重要的信息,导致 Token 数量过高。为了解决这个问题,作者引入了PACT方法,该方法通过在语言模型的早期层剪枝不相关的 Token 并合并视觉冗余的 Token 来减少推理时间和内存使用。
llm-PACT_2504使用一种新的重要性度量来识别不重要的 Token ,而无需依赖注意力分数,因此与FlashAttention兼容。
作者还提出了一种新的聚类算法,称为距离限制密度峰值聚类,该算法在聚类视觉 Token 的同时,通过预定义的阈值限制聚类内元素之间的距离。作者通过广泛的实验验证了PACT的有效性。
- 引言
将大语言模型扩展到文本以外的模态近年来在各个领域取得了成功,特别是在视觉领域,如 LLaVA [31] 和 Qwen-VL [4] 等模型。最先进的视觉语言模型通常由三个主要组件构成:视觉编码器、连接器和语言模型。视觉编码器将输入图像转换为视觉 Token ,这些 Token 通过连接器传递,然后与输入文本一起输入到语言模型中。虽然这种架构在不同任务中表现出色,但由于视觉 Token 数量庞大,导致计算成本高。在本文中,作者引入了两种互补的方法来优化视觉语言模型,通过减少推理时间和内存需求:剪枝模块和聚类算法。这些方法可以独立使用或组合使用,形成更有效的 PACT 方法。
值得注意的是,作者的剪枝模块、聚类模块以及 PACT 都应用于推理时间,因此无需额外的训练。剪枝模块基于一种新的重要性度量标准识别不重要的视觉 Token ,该度量标准评估每个 Token 的相关性,而不依赖于注意力分数。这使得它与 FlashAttention [12] 兼容,因为 FlashAttention 不支持计算注意力分数。
第二个模块引入了一种新的聚类算法,即距离受限密度峰值聚类(DBDPC),该算法对视觉 Token 进行聚类,同时确保簇内元素之间的距离受预定义阈值的约束。通过结合这两种方法,作者开发了 PACT。首先,剪枝模块消除不重要的 Token ,然后 DBDPC 算法对剩余的 Token 进行聚类。最初被剪枝但与构建的簇足够近的 Token 被重新纳入,确保从剪枝 Token 中恢复有价值的信息。
最后,将每个簇内的 Token 合并为一个代表性 Token ,从而减少总 Token 数。通过结合剪枝和聚类,PACT 实现了有效的视觉 Token 减少,解决了无关和冗余 Token 的问题。当应用于 LLaVAOneVision-7B 时,PACT 实现了 50% 的视觉 Token 减少,性能损失可以忽略不计。此外,与之前的方法相比,PACT 在更高的减少比率下表现出显著更少的性能下降,实现了 71.3% 的视觉 Token 减少率,仅损失 1.4% 的性能,而之前的最先进方法在相同的减少比率下最多损失 4.4% 的性能。作者的贡献如下:
作者提出了一种新的视觉 Token 剪枝度量标准,该标准不依赖于注意力分数,确保与FlashAttention兼容,并通过实证验证了其有效性。作者引入了一种新的聚类算法,旨在减少视觉冗余,并展示了其在视觉 Token 减少方面优于其他聚类算法的优势。
作者证明,结合剪枝与基于聚类的合并,在视觉 Token 减少方面优于单独使用任何一种技术。通过整合作者的剪枝和聚类算法,作者提出了一种新方法PACT,并证明其优于先前及当前的工作[3, 6, 9, 30, 44]。
本研究用于获取结果的代码库可在https://github.com/orailix/PACT/tree/main获取。
- 相关工作
2.1. 视觉语言模型
自从BLIP-2[28]问世以来,视觉编码器后接一个将视觉向量输入语言模型的连接器已成为视觉语言模型(VLMs)[7, 17, 50]的标准架构。近期模型[10, 27, 49]通过高分辨率处理增强了VLM架构,这对于文档理解任务[13, 23]是必要的。LLaVA-OneVision[27]将图像分割为
的子图块,使用SigLIP[54]对每个部分进行编码,并通过双线性插值将 Token 数减少至8,748个。
InternVL2[10]将图像分割为
的Tile,使用InternViT[10]处理每幅图像多达40个Tile,并通过像素重排减少视觉 Token 数,产生多达10,240个 Token 。Qwen-VL2[49]使用二维旋转位置嵌入支持动态分辨率,并通过MLP层合并相邻 Token ,但仍然需要超过10,000个 Token 来处理高分辨率图像。虽然这些模型通过合并相邻 Token 来减少 Token 数以保留结构,但它们并未解决 Token 不相关或冗余问题,从而限制了效率。
2.2. 视觉 Token 减少
减少视觉Transformer(ViT)中的视觉token数量一直是研究社区多年的关键焦点。EViT [29] 通过依赖类token([CLS])与视觉token之间的注意力分数来识别和合并无关的token。ToME [6] 提出了一种简单而有效的方法,通过迭代合并ViT层中的相似token。在这些想法的基础上,最近的努力将视觉token减少技术扩展到了视觉语言模型(VLMs)。LaVIT [21] 使用Gumbel-Softmax [20] 来训练一个选择保留token的 Mask ,通过额外的注意力层将丢弃的token合并到保留的token中。LLaVA-PruMerge [44] 通过利用ViT编码器最后一层中[CLS] token与视觉token之间的注意力分数来决定保留哪些token,从而加速LLAVA 1.5 [31] 的处理,而HiRED [3] 通过基于早期层的注意力分配token预算来改进这种方法。然而,这两种方法仅适用于使用ViT且在输入视觉序列中添加了[CLS] token的架构,因此与大多数不使用[CLS] token的最先进VLMs不兼容。
此外,这两种方法都将分数分配给视觉编码器输出的token,但最近的VLMs在将token传递给语言模型之前会合并相邻的视觉token。不清楚如何将预合并分数分配给结果token,这使得LLaVA-PruMerge和HiRED不适用。作者注意到LLaVA-PruMerge通过将修剪的token与保留的token合并来减轻信息丢失。然而,它不会合并相似的保留token;因此,它没有解决视觉冗余,这是基于修剪方法的一个典型限制。TRIM [46] 基于与CLIP [42] 池化文本的相似性来修剪token。
然而,由于TRIM依赖于文本信息进行修剪,因此它不太适用于多轮对话,在实际中,视觉token仅基于图像前向传递期间可用的文本信息进行修剪,可能会丢失回答后续 Prompt 所需的 crucial 信息。FastV [9] 通过平均注意力分数来评估token的重要性,这与FlashAttention不兼容,为最近的VLMs增加了计算开销。VTW [30] 在更深层移除token。虽然这种方法显示出有前景的结果,但其计算成本的减少有限,因为视觉token仅在后期层被移除。
这些先前的方法仅解决了两个问题中的一个:不重要token的存在或视觉冗余。在这项工作中,作者引入了PACT,这是一种新颖的方法,通过修剪无关token和合并视觉冗余的token来同时解决这两个问题。
- 方法
在本节中,作者提出了PACT方法,该方法旨在通过剪除不重要 Token 并合并视觉冗余 Token 来减少视觉语言模型(VLM)的推理时间和内存使用,操作目标为语言模型的早期层
。PACT包含三个步骤:首先,识别不重要 Token ;其次,对剩余 Token 进行聚类;最后,将每个聚类中的 Token 以及最初被舍弃的足够接近的 Token 进行合并。PACT在语言模型选定的层
内操作,适用于将视觉 Token 输入到语言模型的场景,无论视觉编码器或连接器的架构如何。PACT的三步过程如图1所示。作者用
表示层
的隐藏状态,其中
是视觉 Token 的数量,
是隐藏状态的维度。作者用
表示层
中视觉 Token 的键和 Query 矩阵,其中
表示注意力头的数量,
是每个注意力头的维度。序列末尾的 Token 往往因为关注它们的 Token 较少而获得较低的注意力分数平均值。
仅基于关注它的 Token 来计算每个 Token 的平均注意力分数可以缓解这种 Mask 效应,但会引入新的偏差:序列末尾的 Token 可能因主要受到附近 Token 的关注而获得更高的分数。这导致较早或较晚的 Token 被剪除的频率更高,如图2所示。应避免这种位置偏差,因为剪除应仅取决于视觉 Token 所包含的信息,而非其位置。最后,仅依赖单层的键和 Query 来确定重要性指标可能无法充分捕捉视觉 Token 在语言模型所有层中的重要性,主要是因为每个自注意力层关注视觉 Token 的不同方面。为此,作者提出了一种结合累积注意力头的重要性指标。为简化,作者在符号中省略层索引。作者用下标表示 Token 的位置索引,用上标表示注意力头。例如,
表示与第
个视觉 Token 和第
个注意力头对应的键向量。
3.1. 不重要token的识别
在语言模型某一层
中识别不重要token的一种直接方法是定义每个token的重要性为其从所有其他token中获得的注意力分数总和[9]。然而,这种方法存在三个主要缺点。首先,当前的视觉语言模型使用FlashAttention[12],它不支持输出注意力分数。其次,注意力分数的计算带有 Mask ,这引入
(a) 平均注意力分数随位置ID的变化
(b) 相对于未遮盖词元的平均注意力分数随位置ID的变化
从早期层
的隐藏状态和键与 Query 的层特定信息中提取信息,作者称这种方法为高效不重要 Token 识别(EUTI)。作者推测隐藏状态的范数可以提供关于每个视觉 Token 重要性的关键信息,因为它们反映了特定 Token 在网络中携带的信息量。图3展示了LLaVA-OneVision-7B第四层视觉 Token 的隐藏状态范数统计,表明存在高方差。这种方差表明某些视觉 Token 通过残差连接积累了更多信息,因此可能对后续计算更为重要。为了利用隐藏状态范数和键与 Query 向量的信息,作者首先将所有视觉 Token 的 Query 向量取平均值,计算全局 Query 向量
:
该向量表示在层
的所有注意力头中,视觉 Token 请求的整体 Query 信息。然后通过首先计算每个视觉 Token 的键与每个注意力头的全局 Query 之间的点积来计算每个视觉 Token 的重要性分数。在每个注意力头内对视觉 Token 应用softmax,然后对注意力头进行平均。最终分数通过用隐藏状态范数缩放结果获得:
然后,作者使用参数
将视觉 Token 分为重要 Token 和不重要 Token ,以此控制被认为不重要 Token 的百分比。这两个集合定义如下:
λ
不重要 Token 可以被剪枝,或者可以将生成的集合与聚类算法结合,以进一步减少视觉 Token 的数量,正如作者将在下一节中所示。完整的EUTI算法在算法1中说明。作者注意到,在使用旋转嵌入[47]的情况下,作者使用它们应用之前的键和 Query ,以避免任何位置偏差。
3.2. 基于聚类的视觉 Token 合并
距离有界密度峰值聚类仅依赖上述提出的重要性分数来剪枝不重要 Token 可能导致视觉 Token 显著减少,仅保留重要 Token 。然而,保留的视觉 Token 之间仍可能存在冗余信息。因此,作者提出使用聚类算法合并冗余视觉 Token 。作者希望作者的聚类算法具有以下特性:
(a) 低计算时间。 (b) 避免将特征相似度相差较远的点分配到同一个簇中。
条件(b)确保异常值不会被分配到距离较远的簇中心,因为作者推测这些异常值包含重要信息,应该只与附近的异常值合并或作为单独的点存在于不同的簇中。条件(b)还保证了每个簇中的点相对彼此较近,这最小化了在将单个向量作为其代表时信息损失。密度峰值聚类(DPC)算法[5]在这种情况下很有吸引力,因为它满足条件(a),与k-means[2]等迭代聚类算法不同。然而,DPC不满足条件(b),因为它可以形成大型簇,其中边界点可能彼此距离较远。DBSCAN[14]等其他算法也存在同样的问题。因此,作者提出了一种新的聚类算法,称之为距离限制密度峰值聚类(DBDPC)。
DBDPC以一组向量
作为输入——其中
,并输出一组聚类。作者的算法输出依赖于两个参数:截止距离
、归一化因子
,以及一个距离函数
。作者定义向量
和
之间的距离为:
然后局部密度
计算如下:
ρ
作者按照
向量从高到低的
值进行处理,如果某个向量的最小距离到已选择的中心大于
,则将其指定为簇中心。随后,每个向量
被分配到最近的中心所在的簇。作者的算法保证每个向量到其簇中心的距离小于
,从而满足上述条件 (b)。完整的 DBDPC 算法在算法 2 中详细描述。DBDPC 中的中心识别过程确保簇间距离的上界为
,而簇中心之间的距离的下界为
,作者在附录 B 中正式证明了这一点。作者注意到,算法的某些部分以 for 循环的形式呈现,以便于理解。然而,所有计算都可以在 GPU 上并行化,因为每个循环的元素之间没有依赖关系,除了选择簇中心的部分。对于这一部分,作者使用递归算法高效地识别初始中心集和被丢弃的向量,从而减少需要处理的向量数量。作者对此在附录 D 中详细解释。关于 DBDPC 与 DPC 的比较,以及其他聚类算法的定性比较,请参考附录 C。
应使用哪些向量进行距离计算?如前所述,DBDPC算法在用于距离计算的向量集上运行。为了实现有效的聚类,这些向量之间的点积需要准确反映相应视觉 Token 之间的相似性。幸运的是,Transformer通过QKV自注意力机制解决了这个问题。
具体而言,关键向量
为每个token提供了针对点积相似性的有效表示。因此,作者将使用关键向量在DBDPC算法中。形式上,作者有:
是由索引在
中的元素构成的键的子集。那么,靠近聚类中心的不重要 Token 如何处理?最初被认为不重要但足够靠近聚类中心的 Token 有很大概率被错误 Token 。作者将这些 Token 添加到相应的聚类中,以减少信息损失。形式上,作者基于系数
定义一个阈值,任何最初被排除的 Token
,如果其与最近中心的距离满足
,则将其添加到最近的中心
的聚类中。具体来说,
合并 最后,每个聚类中对应的隐藏状态被合并。形式上,合并后的隐藏状态计算如下:
准确地为新隐藏状态
中的每个向量分配位置ID至关重要,特别是对于使用旋转嵌入的模型,因为这些ID决定了输入图像结构或输入视频的时间依赖性。为了与常规推理相比实现较低的统计差异,作者将
中每个向量的位置ID分配为其对应的聚类中心。完整的PACT流程在算法3中展示。当使用旋转嵌入时,DBDPC使用这些嵌入应用后的键,而EUTI使用这些嵌入应用前的键和 Query 。为清晰起见,作者在算法3中省略了这一细节。作者还注意到,DBDPC、EUTI以及PACT均不使用文本 Token 。因此,视觉 Token 减少独立于文本上下文,使llm-PACT_2504非常适合多轮对话。
比例注意力合并token会降低它们在注意力机制中的影响,因此如果许多重要的token被合并在一起,性能可能会恶化。为了缓解这个问题,作者采用了比例注意力。
设
和
分别表示在层
处的键、 Query 和值,其中
。对于每个注意力头
,注意力分数的计算如下:
其中
表示每个注意力头的 Query 维度。这里,W 是一个表示每个token权重的矩阵,而
是注意力 Mask 。具体来说,对于视觉token,
表示与token
对应的簇的大小,对于任何
值。对于位置
的每个文本token,
,因为它们未被合并,保持权重为1。通过基于
缩放注意力分数,模型有效地将每个视觉token视为代表多个token。作者注意到,在使用比例注意力时,作者使用PyTorch的缩放点积注意力,它产生与官方FlashAttention实现相似的结果,同时支持自定义 Mask 。
选择层
进行token缩减:为确保最大计算收益,作者必须选择一个早期层
进行视觉token缩减。然而,作者也要求所选层的键不要太相似,以便进行有效的聚类和剪枝。因此,作者选择最大距离在键之间足够高的最早层。图4显示,在LLaVA-OneVision-7B的初始层中,对应视觉token的键非常相似,这表明缺乏有效剪枝和聚类所需的显著特征。
- 实验
4.1. 评估数据集
作者使用多样化的基准测试评估PACT的有效性,这些基准测试与用于LLaVA-OneVision-7B的测试类似,涵盖了单图像、多图像和视频任务。作者使用AI2D [22]、TextVQA [45]、ChartQA [37]、DocVQA [38]和InfographicVQA [39]来评估PACT在富文本文档中减少视觉 Token 的能力,同时保持性能。为了测试跨多个学科的推理能力,作者使用MME [15]、MMBench [32]、MMVet [51]、MathVerse [57]、MathVista [34]、MMMU [53]、MMStar [8]和ScienceQA [33]。此外,Vibe-Eval [40]、MM-LiveBench [26]和LLaVA-BenchWilder [25]评估其在真实场景和视觉聊天环境中的鲁棒性。作者使用LLaVA-Interleave Bench [25]和MuirBench [48]来检验PACT在保留跨图像推理的同时减少 Token 的效率。为了评估其在视频理解任务中的性能,作者使用ActivityNet-QA [52]、MLVU [58]、VideoMME [16]、EgoSchema [36]和PerceptionTest [41]。最后,Video-ChatGPT [35]评估该方法在基于对话的视频交互中的有效性。
4.2. 评估设置
在作者的比较中,作者包含了在单个层应用降维的方法,类似于PACT,例如FastV和基于聚类的视觉 Token 降维。对于这些方法,作者将降维率称为视觉 Token 的相对降维率,定义为1减去降维后的视觉 Token 数量与原始数量的比值。对于使用渐进式 Token 降维的方法,如ToME [6],或在视觉编码器之后应用降维的方法,如PruMerge和HiReD,或者当降维率无法在固定层控制时,如VTW,作者调整这些方法的参数,以在给定降维率下,使所有层的平均视觉 Token 数量与单层降维方法相同。在评估用于视觉 Token 降维的聚类算法时,作者应用比例注意力机制,因为它在所有聚类算法中始终提高性能,尤其是在高降维率时。此外,正确地将位置ID分配给降维后的视觉 Token 集至关重要。分配策略的详细信息在附录E中介绍。在报告处理时间或吞吐量时,作者考虑了语言模型和降维算法每处理一个输入元素所需的总时间。在下一节中,作者基于一个称为方法-参考指标比率(Approach-to-Reference Metric Ratio)的指标进行比较,该指标定义为测试方法指标与未进行视觉 Token 降维时获得的指标的平均比率,其中
为测试数据集的总数量。该指标表明保留了原始模型容量的多少。需要注意的是,当使用ToME进行视觉 Token 降维时,如果按照[6]中建议的在每个层固定减少视觉 Token 数量,则无法实现超过50%的降维率。相反,作者使用调度器来实现更高的降维率,这作者在附录F中解释。评估PACT所使用的超参数的更多细节在附录G中提供。在可行的情况下,作者遵循用于评估LLaVA-OneVision的数据集划分和指标。更多细节在附录H中提供。请注意,所有实验均在单个A100 GPU上 conducted。
4.3. 结果
作者将PACT与FastV [9]、VTW [30]、ToME [6]、PruMerge [44]和HiRED [3]在LLaVA-OneVision7B、InternVL2-8B、Qwen2-VL-7B-Instruct和LLaVA1.6-Mistral-7B上进行比较。由于HiRED和PruMerge仅适用于LLaVA-1.6,作者在其他比较中将其排除。如图5、6、7和8所示,PACT在所有四个模型中,在相同的压缩率和相同的吞吐量下始终优于其他方法。VTW在压缩率高于40%时性能显著下降,表明仅当在较深层进行时移除所有视觉 Token 才有效。FastV和ToME在高压缩率下表现不佳,而PruMerge和HiRED即使在低压缩率下也出现性能退化。与此同时,PACT在高压缩率下仍保持可接受的性能。表2和表3显示,当应用于LLaVA-OneVision-7B和Qwen2-VL-7B-Instruct时,PACT在大多数测试数据集上优于其他方法。其他模型也得到了相同结论,详细结果见附录I。表1报告了在LLaVA-OneVision-7B上,当方法与参考指标比率为98.6%时,不同方法的压缩率、吞吐量和最大GPU内存消耗。PACT显著优于其他方法,实现71.3%的压缩率、31%的GPU内存减少,以及语言模型推理时间的225%加速。用于计算这些指标的数据集结果如表5所示。表1还表明,由于注意力分数的计算成本较高,使用FastV时最大GPU内存消耗相对较高。作者进一步将DBDPC与聚合聚类[1]、k-means[2]、密度峰值聚类(DPC)[5]和DBSCAN[14]进行比较,结果如图9所示。图表显示,DBDPC在视觉 Token 压缩方面始终优于其他聚类算法,在相同压缩率下性能退化较小,并表现出更高的计算效率,从而获得更好的吞吐量。这些结果验证了作者的假设,即为了有效进行视觉 Token 压缩,必须确保每个簇内元素之间的距离不超过预定义阈值。图5还显示,EUTI在相同压缩率下始终优于FastV,且成本更低,因为它不需要计算注意力分数。此外,与FastV不同,EUTI不会引入GPU内存开销。作者在附录I中提供了更多数值结果。
4.4. 消融研究
图5显示PACT在各种压缩率下始终优于DBDPC和EUTI。这证实了结合聚类和剪枝技术比独立使用每种方法能获得更好的性能,因为结合方法同时解决了视觉 Token 无关性和冗余问题。作者对DBDPC算法的几个组件进行了剪枝,并将结果展示在图10中。首先,作者通过选择每个聚类的中心作为代表 Token 来剪枝 Token 合并,而不是合并每个聚类内的 Token 。作者还剪枝了比例注意力机制的使用。此外,作者剪枝了将位置ID分配给压缩后的 Token 集,并实验了两种替代方案:使用每个聚类中所有元素的位置ID的均值,以及根据位置ID的均值重新排序压缩后的 Token 集后依次分配位置ID。最后,作者剪枝了聚类过程中使用的关键向量,而改用隐藏状态。作者的结果表明,每个剪枝的组件都对DBDPC算法的性能有正向贡献。值得注意的是,正确地将位置ID分配给压缩后的 Token 集至关重要,因为这些位置ID反映了输入图像的结构和输入视频的时间顺序。此外,比例注意力机制在较高的压缩率下效果显著,而 Token 合并一旦压缩率超过50%就能提升性能。该图还证实,关键向量更适合基于余弦相似度的距离计算,因为它们在注意力机制中的点积中自然使用。作者对EUTI算法的公式(2)进行了两次独立的剪枝。第一次剪枝移除了隐藏状态范数的使用,而第二次剪枝移除了全局 Query ,这相当于仅使用隐藏状态范数。图10中的结果表明,结合基于全局 Query 的分数和隐藏状态范数始终比单独使用任一指标能获得更好的结果,这表明它们为每个视觉 Token 的重要性提供了互补信息。最后,作者将PACT中的剪枝 Token 恢复模块通过将α设为零进行剪枝,结果展示在图11中。该图显示,重新整合最初被认为不重要但足够接近聚类中心的视觉 Token 在各种压缩率下始终提升了性能,支持了作者的假设,即这些 Token 可能被EUTI模块误 Token 。图11还展示了压缩层选择对PACT性能的影响,证明了作者压缩层识别方法的有效性。作者在附录J中提供了额外的数值结果。
- 结论
在这项工作中,作者提出了PACT方法,该方法解决了视觉 Token 的无关性和冗余问题。PACT是一种即插即用的解决方案,无需额外的训练。它不依赖于文本 Token 来减少视觉 Token ,因此非常适合多轮对话。此外,它独立于视觉编码器和连接器架构,使其在各种视觉语言模型中具有广泛的适用性。作者的结果表明,视觉语言模型中的视觉 Token 数量是不必要的,并为有效的 Token 减少提供了宝贵的见解。这为未来设计更高效的连接器和架构打开了大门。
参考
[1]. PACT: Pruning and Clustering-Based Token Reduction for Faster Visual Language Models