LoSparse


文章题目:$LoSparse$

文章链接:https://arxiv.org/pdf/2306.11222.pdf

代码链接:https://github.com/yxli2123/LoSparse

摘要

$transform$模型需要大量的计算资源,出于模型压缩的目的,作者提出了$LoSparse(Low-Rank and Sparse approximation)$模型,它通过一个低秩矩阵和一个稀疏矩阵的和来逼近一个权重矩阵。该方法结合了低秩近似和剪枝的优点,同时避免了它们的限制。剪枝增强了低秩近似的多样性,低秩近似可以防止剪枝损失太多的表达神经元

  • 低秩近似:压缩了神经元中的一致和表达丰富的部分
  • 剪枝:去除了神经元中的不一致和非表达丰富的部分

低秩可以压缩权重中相关性大的部分,但是完全忽略了相关性较小的部分(这些相关性小的部分在神经元之间可能是独特的,具有表达能力,并且对于模型的性能来说可能非常关键),结合剪枝,可以继续减少相关性小的那部分但是不至于全部去除导致网络多样性下降。

介绍

目前模型压缩常用的是剪枝,分为结构性剪枝和非结构性剪枝。结构性剪枝一种方式为ITP,即迭代剪枝,可以同时训练和剪枝,本文用到的剪枝方法就是迭代剪枝。

为什么只用剪枝不行:

神经元重要性得分直方图

(b)为理想情况,大多数神经元是冗余的,对于网络来说不重要,只有小部分神经元是重要的,但是现实情况为(a),很大一部分神经元是可表达的,因此大量剪枝可能导致重要的神经元会被减去。

低秩近似可以提取相关性大的权重的公共基。但是$transformer$模型的秩很高,它们包含许多参数,这使得简单地应用低秩近似来压缩这些矩阵可能会损害模型的性能。这是因为这种情况下忽略了神经元的多样性。

因此提出了低秩近似和稀疏近似的结合:低秩近似防止了修剪过度去除表达神经元,而稀疏近似增强了低秩近似的多样性。

同时该方法与知识蒸馏是正交关系,很容易再集成知识蒸馏手段,提高模型性能。

背景

介绍了transform模型和权重敏感性评分公式:

为了减少随机抽样导致的可变性,本文使用平滑公式:

结构性剪枝神经元的重要性评分公式:

方法

通过一个低秩矩阵和一个稀疏矩阵的和来近似一个权矩阵:

LoSparse 在单个线性投影矩阵的示意图

低秩矩阵和稀疏矩阵的近似

给定一个权重矩阵$W\in R^{d_1×d_2}$,通常采用结构化剪枝稀疏矩阵$S\in R^{d_1×d_2}$来近似$W$以进行压缩。然而稀疏矩阵近似导致性能不佳,尤其是当压缩比率较高时。因此,本文引入了一个低秩矩阵来改进近似。具体来说,权重矩阵可以表示为:

其中$U\in R^{d_1×d_2}$和$R\in R^{d_1×d_2}$的乘积表示秩为$r$的低秩矩阵。

为什么需要低秩矩阵?

语言模型的奇异值

首先,它可以有效地逼近神经元的相干部分,我们可以看到语言模型中权重矩阵的频谱在开始时迅速下降。频谱下降反映模型中特征之间的相关性。较大的特征值通常对应于具有更高相关性的特征。因此,快速下降的频谱表示模型中存在一些高度相关的特征,即一致部分,因此可以通过低秩来压缩公共部分。

其次低秩矩阵和稀疏矩阵的解耦使得剪枝变得容易频谱的趋于平稳表示模型的权重矩阵中的特征或模式已经相对稳定地学习和表示。这也可能表明在训练过程中,神经元之间的相关性逐渐减弱,即神经元对不同的特征或模式变得更加独立而低秩矩阵无法捕获这些信息,但是低秩矩阵能够将相干部分与神经元的非相干部分解耦。因此可以添加一个矩阵$S$来近似剩余的不连贯部分,然后修剪非表达不连贯的部分。

线性投影的神经元的重要性得分分布情况

上图表示,大多数不连贯的部分在解耦之后具有较低的重要性分数,因此可用剪枝删除冗余参数。LoSparse算法成功地分离了神经元中不连贯的部分,并简化了非表达成分的修剪。(和ideal的图逼近)。

算法

给定一个预训练的权重矩阵$W^{(0)}$,首先基于$W^{(0)}$的奇异值分解(SVD)初始化秩 $r$的低秩矩阵。具体来说,本文选择:

$u_1,u_2,.,u_r\in R^{d_1}$是左奇异向量,$v_1,v_2,.,v_r\in R^{d_1}$是左奇异向量,关于上面的$r$个奇异值$\sigma_1 \geq \sigma_2 \geq .\geq\sigma_3$在$W^{(0)}$的SVD中。

因此初始化$S^{(0)}$为:

因此,原始的前向传递($Y=XW$)可替换为更高效的形式:

作者将上面这种分解应用到了每一个权重矩阵并且将$S=\{S_m\}_{m=1}^{M}$表示为所有稀疏矩阵的集合。初始化$S$之后,对所有$S$进行迭代剪枝。

具体方法:

在第t次迭代时,首先采取随机梯度下降步骤来更新$U^{(t)}$,$V^{(t)}$和$S^{(t)}$。对于$S^{(t)}$,

这是损失函数 $L$ 对于变量 $S^{(t)}$的梯度。梯度是一个向量,它包含了损失函数相对于每个分量(或维度)的偏导数。

然后在公式(4)的基础上对$S^{(t)}$进行重要性评分,$\widetilde{S}^{(t)}$剪枝公式如下:

$\tau( {\widetilde{S}^{(t)}},\Gamma({S}^{(t)}))$的第$i$列定义如下:

在每个迭代中,选择性地保留了权重矩阵 $S^{(t)}$中具有高重要性分数的一部分神经元,而剔除了贡献较低的神经元。这个策略通过逐渐减小 $p_t$ 的值来控制保留的神经元数量,以达到对模型进行剪枝$(pruning)$或精简的目的,$p_t$减小公式如下:

具体算法如下:

算法

实验

作者在自然语言理解、问答任务、自然语言生成任务与其他模型做了对比,显示出模型的优越性。

分析

稀疏逼近的有效性

作者将LoSparse与两种变体进行比较:(1)丢弃稀疏矩阵$S$,只微调低秩矩阵$UV$$(Low-rank \ I)$;(2)遵循(8)的初始化,但逐渐将初始化的$S$修剪为零$(Low-rank \ II)$。

不同任务比较结果

从图中可见,$(Low-rank \ II)$的性能要比$(Low-rank \ I)$好得多。也就是说,修剪掉所有的稀疏矩阵比微调一个由奇异值阈值得到的低秩矩阵更有效,因此$LoSeparse$#可以增强低秩近似。

解释:这是因为$Low-rank \ I$的初始化与预训练的权重不同,因此它可能会从预训练的权重中丢失太多的知识。因此,下游任务的性能会严重下降。另一方面,$LoSeparse$弥补了低秩初始化与预训练权值之间的差距,从而保留了存储在预训练权值中的原始知识。这表明,尽管单独的低秩近似更有效和简洁,但我们应该利用稀疏近似来指导其训练过程。

稀疏分配

主要探究低秩近似和稀疏近似如何互相分配,主要方法是给定一个固定的剩余比例,改变低秩矩阵的比例,并相应改变稀疏矩阵的比例。不同分配条件下的结果如下图,可以看到低秩近似和稀疏近似对NLU任务的性能贡献几乎相等,因为当改变分配时性能保持稳定。

关于稀疏分配的结果

结合知识蒸馏

本文选择了一个针对特定任务进行微调的$DeBertaV3-base$模型作为教师模型,一个压缩的$DeBertaV3-base$模型作为学生模型。结果发现知识蒸馏可以进一步提高$LoSeparse$的性能,

结论

文章提出了一种结合低秩近似和结构化稀疏近似的$transfomer$模型压缩方法$LoSparse$。在自然语言理解、问题回答和自然语言生成方面的实验表明,作者的方法明显优于以前的压缩方法。此外,其在自然语言生成任务和极高稀疏度的设置中特别有效。实验证明了$Losparse$是通用的,与其他流行的压缩方法是互补的。实验表明,$LoSparse$算法可以提高$CoFi$算法和传统的知识蒸馏迭代剪枝算法的性能。


文章作者: ghtll
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ghtll !