当前位置:   article > 正文

LLM大模型压缩——ICLR 2024 SliceGPT(原理详解)_slicegpt: compress large language models by deleti

slicegpt: compress large language models by deleting rows and columns

ICLR 2024 SliceGPT: Compress Large Language Models by Deleting Rows and Columns

背景

模型压缩技术可以分为四类:蒸馏distillation、张量分解tensor decomposition(包括低秩分解low-rank factorization)、剪枝pruning和量化quantization。

许多剪枝方法需要在剪枝后进行恢复微调rbecovery fine-tuning(RFT)以保持性能,这使得剪枝成本高昂且难以扩展。

为了解决这一问题,作者提出了一个名为SliceGPT的方法。SliceGPT 的核心思想是删除权重矩阵中的行和列来降低网络的嵌入维数,同时保持模型性能,并且不需要recovery fine-tuning (RFT) 。

核心思想

如下图最右所示,SliceGPT 会剪掉权重矩阵的整行或整列,对 X X X W W W降维,达成的结果是权重矩阵变小,降低了神经网络的嵌入维度。

假设原本 X X X W W W D D D维,现在要使 X X X W W W降为 k k k维。显然,如果直接砍掉 X X X W W W中的一些维度,例如将第 k + 1... D k+1...D k+1...D维砍掉后,后 D − k D-k Dk列的信息就会丢失,对网络的影响就会很大。

作者的办法是在切片之前,先对网络进行一次正交转换 X ′ = X Q , W ′ = Q T W X'=XQ,W'=Q^T W X=XQ,W=QTW(这里的变换矩阵 Q Q Q是一个 n n n维方阵, X X X中每一行为一个输入向量( m m m D D D列)),作者证明这样的变换会使模型的预测结果保持不变(computational invariance)。通过主成分分析法PCA获得 Q Q Q,这样转换之后 X ′ X' X的每一个维度的方差递减(第一个维度区分度最大,第二个维度区分度次之…第 n n n维区分度最小)。经过变换以后,再将第 k + 1... D k+1...D k+1...D维切掉,因为这些维度是区分度最小的维度,所以切片后对网络的影响较小。
在这里插入图片描述

直观来说,先通过正交变换 Q Q Q,把 X X X重要的维度集中在前 k k k列,后面 D − k D-k Dk列变成不重要的维度,这样砍掉这些维度后对网络的影响就会很小。

优势:sliceGPT无需recovery fine-tuning (RFT),无需在剪枝后进行微调以恢复模型的性能。

方法

Transformer的Forward Pass过程

下图对Transformer网络中的attention、FFN和Norm block进行统一的算法描述,其中 l l l代表第 l l l层。需要注意的是,FFN block的 σ \sigma σ代表激活函数、attention block的 σ \sigma σ代表multi-head attention操作。
[图片]

计算不变性computational invariance

正交矩阵 Q Q T = I Q Q^T=I QQT=I
R M S N o r m ( X ) RMSNorm(X) RMSNorm(X) 把每个样本除以该样本的方差,即把 X X X的每一行除以该行的方差: x ← x ∥ x ∥ x ← \dfrac{x}{∥x∥} xxx .
可以证明,RMSNorm有这样的性质:
R M S N o r m ( X l Q ) Q T = R M S N o r m ( X l ) RMSNorm(X_l Q)Q^T=RMSNorm(X_l) RMSNorm(XlQ)QT=RMSNorm(Xl)
R M S N o r m ( X l Q ) = R M S N o r m ( X ) Q RMSNorm(X_l Q)=RMSNorm(X)Q RMSNorm(XlQ)=RMSNorm(X)Q
由此,如果对Algorithm 1中的参数矩阵进行如下的变换:
[图片]
作者证明,转换后的网络的结果与原始网络相同,作者把这样的特性称为computational invariance。

LayerNorm -> RMSNorm

(LayerNorm的原理可以参考深入理解NLP中LayerNorm的原理
在这里插入图片描述
由于 L a y e r N o r m ( X l Q ) Q T ≠ L a y e r N o r m ( X l ) LayerNorm(X_l Q)Q^T \neq LayerNorm(X_l) LayerNorm(XlQ)QT=LayerNorm(Xl),因此由LayerNorm连接的Transformer网络不满足computational invariance特性。

于是,作者将LayerNorm中的 M M M d i a g ( α ) diag(\alpha) diag(α)转移到前后的block中, α \alpha α转移到 W i n W_{in} Win中,M转移到 W o u t W_{out} Wout α ′ \alpha' α来自上一个block中的 α \alpha α。这样就能把LayerNorm连接的Transformer网络转换为RMSNorm连接的Transformer网络。
在这里插入图片描述

Transformation Per Block

LayerNorm转换成RMSNorm以后,即可通过正交变换使网络的结果保持不变。
作者发现如果采用全局统一的正交变换矩阵Q,那么不同block的信号没有对齐。因此,每个block需要不同的 Q Q Q,这样带来的问题是,在Algorithm 1中第5行的残差连接时会违反computational invariance,因此需要在残差连接时对 X X X乘以 Q l T Q l + 1 Q_{l}^{T}Q_{l+1} QlTQl+1,使网络保持computational invariance:
[图片]

用PCA获得变换矩阵 Q Q Q

挑选一部分样本,用主成分分析法PCA获得 Q Q Q:(PCA的原理可以参考【机器学习】降维——PCA
[图片]
通过PCA分析法获得的 Q Q Q实际上对样本空间进行了一次基变换,使得每个维度的方差降序排列,可以理解为每个维度的重要性递减。

对X降维

变换后,再切掉 X X X最后若干列、 W W W的最后若干行,进行模型的压缩。注意,在实际的计算过程中,对 X X X的降维是通过对前后block中权重矩阵作变换和压缩而实现的,而不是先得到 X X X,再乘以 Q Q Q乘以 D D D,这里的 Z = X Q D Z = XQD Z=XQD只是一种演示。
[图片]
[图片]

Related Work

magnitude-based sparsification: 将模型中的最小权重设为零。
OBS: 系统地移除对损失函数影响最小的权重。该方法通过使用Hessian矩阵的逆来更新未剪枝的权重来弥补因权重移除引入的误差。
GPTQ: 量化(使用较低精度表示参数)LLMs的权重矩阵,采用逐列方案,并在下一列中更新所有尚未量化的权重。
SparseGPT: 使用非结构化和半结构化剪枝稀疏张量核心来精简LLMs:满足2:4稀疏模式要求并保持准确性。
Lora: 微调时用一个低秩分解来表示参数更新
在这里插入图片描述
LLM-pruner: 对LLMs进行结构化剪枝,然后继续训练(或微调),以恢复丢失的性能LLM Surgeon: 将恢复性微调与剪枝交织在一起

Reference

SliceGPT: Compress Large Language Models by Deleting Rows and Columns
https://github.com/microsoft/TransformerCompression
https://mp.weixin.qq.com/s/HlgpNkjZAQm7Q-ffk3Qfmw
https://jalammar.github.io/illustrated-transformer/
【机器学习】降维——PCA

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/978088
推荐阅读
相关标签
  

闽ICP备14008679号