ASVD: Activation-aware Singular Value Decomposition for Compressing Large Language Models阅读笔记

motivation

大语言模型激活中的激活不均匀为低秩分解带来了挑战,不同层关于低秩分解的敏感度不同,应有不同的处理方法。

创新点1:激活感知的SVD矩阵分解

即使权重矩阵的压缩损失很小,最终相应的激活损失也可以很大:

屏幕截图2025-04-14205455.png

为此,本方法将压缩目标转换为最小化输出的差距:

屏幕截图2025-04-14205637.png

通过变换矩阵S平衡权重与激活的关系(个人觉得直观的来说,对于均值更大的激活channel,其对应的权重在低秩分解时应该更关注一点),使得前向传播变成

这里的S有两种计算方式,第一种是直接对激活进行统计计算;另一种从最小化入手,对进行Cholesky分解得到并取

首先对进行SVD分解得到

为抵消变换矩阵S的影响取

创新点2:基于敏感度的混合分解策略

预定义一系列截断比率,比率的定义式为,其中k是截断秩,权重矩阵大小为,分别对每个层的每个比率计算相应敏感度。

敏感度的计算方法为分别对该层权重矩阵使用该比率的低秩分解矩阵替换,测量其在校准集上的困惑度提高的大小,提高的困惑度越高越敏感。

屏幕截图2025-04-14212425.png

可看出保留的秩越少越敏感、MLP通常比注意力模块敏感。

假设每层间相互独立,提出两种(目标为参数量和目标为困惑度)基于二分法进行最优截断比率的寻找策略。

目标为参数量的二分法伪代码如下,主要就是按照敏感度从小到大排列,将每层的截断秩设置为敏感度高的那一半中的该层最低比率对应的秩,到达目标参数量就在敏感度低的那一半里再二分(求更高精度),否则就在敏感度高的那一半里二分(保目标参数量):

屏幕截图2025-04-14212819.png

其它:关于KV Cache的压缩

在推理时,矩阵可分解为两个,使得,进而只需存储两个低秩矩阵即可,在存储KV Cache时,可以只存储激活与相乘的结果,对于KV权重矩阵,激活,Cache内存占用从变为

屏幕截图2025-04-14213700.png