矩阵分解:从 SVD 到现代 AI 应用
矩阵分解是机器学习的基石技术,从传统的推荐系统到现代大语言模型的参数高效微调(LoRA),都离不开矩阵分解的思想。
奇异值分解 (SVD)
基本形式
任意矩阵
其中:
:左奇异向量(正交矩阵) :奇异值对角矩阵 :右奇异向量(正交矩阵)
Truncated SVD
保留前
这是最优的秩
Randomized SVD
当矩阵规模巨大时,精确 SVD 计算代价过高。Randomized SVD 提供了高效的近似方法。
算法实现
1 | import numpy as np |
复杂度对比
| 方法 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| 精确 SVD | ||
| Randomized SVD | ||
| Truncated SVD (Lanczos) |
现代应用:LoRA
LoRA (Low-Rank Adaptation) 是大语言模型参数高效微调的核心技术,直接利用了低秩分解的思想。
LoRA 原理
预训练权重
其中
实现示例
1 | import torch |
参数效率
对于 LLaMA-7B:
| 方法 | 可训练参数 | 显存占用 |
|---|---|---|
| 全量微调 | 7B (100%) | ~140GB |
| LoRA (r=8) | 4.7M (0.07%) | ~14GB |
| LoRA (r=16) | 9.4M (0.13%) | ~16GB |
其他应用
1. 推荐系统
矩阵分解用于协同过滤:
1 | # 使用 surprise 库 |
2. 文本表示 (LSA)
潜在语义分析:
1 | from sklearn.decomposition import TruncatedSVD |
3. 图像压缩
1 | from PIL import Image |
数值稳定性
条件数
条件数过大会导致数值不稳定。
正则化 SVD
1 | def regularized_svd(A, lambda_reg=0.01): |
延伸阅读
- Halko et al., Finding Structure with Randomness (2011)
- Hu et al., LoRA: Low-Rank Adaptation of Large Language Models (2021)
- NumPy SVD Documentation
转载请注明出处