矩阵分解是一种通过将较大的矩阵分解为多个小矩阵已降低计算复杂度的技术,在模型训练微调上,通常用于简化模型、提高训练效率。矩阵分解有多种形式,一下是几种常见的模型微调权重分解方法:
奇异值分解
将矩阵分解为三个矩阵乘积的方法:
其中:
W是原始权重矩阵。
U和V是正交矩阵。
\Sigma是对角矩阵,对角线上的元素称为奇异值。
奇异值分解常用于降维和压缩,通过保留较大的奇异值,可以近似表示原始矩阵。
低秩分解(Low-Rank Decomposition)
低秩分解假设权重矩阵具有较低的内在秩,可以通过两个低秩矩阵的乘积来近似表示:
其中:
A \in R^{\upsilon \times \gamma } 和B \in R^{\gamma \times \kappa } 是低秩矩阵。
\gamma \ll min(\upsilon , \kappa )
低秩分解常用于参数高效的微调方法(如LoRA
),通过减少可训练参数的数量来提高训练效率。
幅度和方向分解(Magnitude and Direction Decomposition)
幅度和方向分解将权重矩阵分解为幅度和方向两个部分:
其中:
m \in R^{1 \times k } 是幅度向量。
V \in R^{d \times k } 是方向矩阵。
\parallel * \parallel _{c}表示矩阵每列向量的范数。
这种分解确保了\frac{V}{\parallel V \parallel _{c} }的每一列都是单位向量,而中的对应标量定义了每个向量的幅度。幅度和方向分解常用于DoRA等方法中,通过分别微调幅度和方向来提高模型的学习能力。
张量分解(Tensor Decomposition)
张量分解是将高维张量分解为多个低维张量的乘积,常见的张量分解方法包括CP分解(Canonical Polyadic Decomposition)和Tucker分解。
CP分解:
其中:
\tau是原始张量。
a_{r} 、 b_{r} 、 b_{r} 是因子矩阵的列向量。
\oplus表示张量积。
Tucker分解:
其中:
\varrho是核心张量。
ABC是因子矩阵。
\times_{i}表示在第i维度上的矩阵乘积。
张量分解常用于处理高维数据和多模态数据,通过降低张量的秩来减少计算复杂度。
其他分解方法
除了上述方法,还有其他一些权重分解技术,如:
QR分解:将矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。
LU分解:将矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积。
Cholesky分解:将对称正定矩阵分解为一个下三角矩阵及其转置的乘积。
矩阵分解是一种强大的工具,可以用于简化模型、提高训练效率、增强模型的解释性以及处理高维数据。不同的分解方法适用于不同的应用场景,选择合适的分解方法可以显著提升模型的性能和效率。