赞
踩
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 D−k列的信息就会丢失,对网络的影响就会很大。
作者的办法是在切片之前,先对网络进行一次正交转换
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 D−k列变成不重要的维度,这样砍掉这些维度后对网络的影响就会很小。
优势:sliceGPT无需recovery fine-tuning (RFT),无需在剪枝后进行微调以恢复模型的性能。
下图对Transformer网络中的attention、FFN和Norm block进行统一的算法描述,其中
l
l
l代表第
l
l
l层。需要注意的是,FFN block的
σ
\sigma
σ代表激活函数、attention block的
σ
\sigma
σ代表multi-head attention操作。
正交矩阵
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∥}
x←∥x∥x .
可以证明,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的原理可以参考深入理解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网络。
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的原理可以参考【机器学习】降维——PCA)
通过PCA分析法获得的
Q
Q
Q实际上对样本空间进行了一次基变换,使得每个维度的方差降序排列,可以理解为每个维度的重要性递减。
变换后,再切掉
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只是一种演示。
magnitude-based sparsification: 将模型中的最小权重设为零。
OBS: 系统地移除对损失函数影响最小的权重。该方法通过使用Hessian矩阵的逆来更新未剪枝的权重来弥补因权重移除引入的误差。
GPTQ: 量化(使用较低精度表示参数)LLMs的权重矩阵,采用逐列方案,并在下一列中更新所有尚未量化的权重。
SparseGPT: 使用非结构化和半结构化剪枝稀疏张量核心来精简LLMs:满足2:4稀疏模式要求并保持准确性。
Lora: 微调时用一个低秩分解来表示参数更新
LLM-pruner: 对LLMs进行结构化剪枝,然后继续训练(或微调),以恢复丢失的性能LLM Surgeon: 将恢复性微调与剪枝交织在一起
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。