线性代数在神经网络中的应用
线性代数是神经网络的数学基础。从矩阵乘法到 SVD 分解,理解这些数学概念有助于深入理解模型行为。
核心概念
- 矩阵乘法:线性变换的复合,是全连接层的数学本质
- 特征分解:理解模型权重矩阵的几何意义
- SVD 分解:LoRA 的数学基础
python
# SVD 与低秩近似
W = model.weight.data # [d_out, d_in]
U, S, Vh = torch.linalg.svd(W)
# 取前 r 个奇异值做低秩近似
r = 8
W_approx = U[:, :r] @ torch.diag(S[:r]) @ Vh[:r, :]
relative_error = (W - W_approx).norm() / W.norm()
print(f"低秩近似相对误差: {relative_error:.4f}")
# 这就是 LoRA 的数学基础
# W ≈ A @ B, A = U[:, :r] @ sqrt(diag(S[:r])), B = sqrt(diag(S[:r])) @ Vh[:r, :]低秩结构普遍存在
研究表明,训练好的神经网络的权重矩阵往往具有低秩结构——前几个奇异值包含了大部分信息。这正是 LoRA 有效性的数学基础。