目录
- 1. 前言
- 2. 矩阵分解
- 2.1 SVD分解
- 2.2 特征值分解
- 2.3 LU分解
- 2.4 QR分解
- 3. AdaLora
- 3.1 motivation
- 3.2 改进
1. 前言
矩阵分解为什么可以加速推理
假设原始权重矩阵 W ∈ R ( m ∗ n ) {W∈R^{(m*n)}} W∈R(m∗n),矩阵乘法中时间复杂度为mn,变形为 W = B A , B ∈ R ( m ∗ r ) , A ∈ R ( r ∗ n ) {W=BA, B∈R^{(m*r)}, A∈R{(r*n)}} W=BA,B∈R(m∗r),A∈R(r∗n),则时间复杂度变为mr+r*n
2. 矩阵分解
常见的矩阵分解方法有:奇异值分解(SVD),特征值分解(EVD),LU分解,QR分解
2.1 SVD分解
奇异矩阵是指不可逆矩阵,即行列式为0的矩阵。奇异矩阵的行或列向量之间是线性相关的,换句话说,它的行或列不能形成满秩(rank)矩阵。因此,奇异矩阵的秩小于它的维度。
奇异值描述了矩阵对向量的变换效果。奇异值总是非负的,矩阵的非零奇异值的数量等于矩阵的秩。即,奇异值为 0 的个数表示矩阵的线性依赖程度。
2.2 特征值分解
特征值分解只适用于方阵。
2.3 LU分解
2.4 QR分解
3. AdaLora
3.1 motivation
lora存在一些问题:
- LoRA中所有适配器具有相同的秩(线性无关组的数量),忽略了在微调预训练模型时,权重矩阵的重要性在不同模块和层之间存在显著差异
- 只训练了Attention,没有训练FFN,事实上FFN更重要。
Adalora通过lora矩阵的奇异值去衡量重要性
3.2 改进
- 调整增量矩分配
AdaLoRA将关键的增量矩阵分配高秩以捕捉更精细和任务特定的信息,而将较不重要的矩阵的秩降低,以防止过拟合并节省计算预算。 - 以奇异值分解的形式对增量更新进行参数化,并根据重要性指标裁剪掉不重要的奇异值,同时保留奇异向量。
由于对一个大矩阵进行精确SVD分解的计算消耗非常大,这种方法通过减少它们的参数预算来加速计算,同时,保留未来恢复的可能性并稳定训练。