线性方程组与矩阵的秩
从鸡兔同笼到 AI 模型训练,线性方程组无处不在。矩阵的「秩」告诉我们方程组中真正有效的信息量有多少。
任何线性方程组都可以写成 Ax = b
A 是系数矩阵(m 个方程,n 个未知数),x 是未知数向量,b 是常数向量。
例如鸡兔同笼:\( \begin{cases} x+y=10 \\ 2x+4y=28 \end{cases} \) 写成矩阵形式:
\[ \begin{bmatrix} 1 & 1 \\ 2 & 4 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 10 \\ 28 \end{bmatrix} \]秩:独立信息的数量
秩(Rank)= 矩阵中真正「独立」的行数(或列数)。
如果某个方程可以由其他方程乘以系数得到,它就是冗余的——不增加新信息。
秩决定了方程组解的情况:
满秩
唯一解
方程之间无冗余
欠秩
无穷多解
有冗余方程
矛盾
无解
方程之间互相矛盾
生活例子
鸡兔同笼:满秩,唯一解
头数 10 + 脚数 28 → 鸡 6 只、兔 4 只。两个方程提供两条独立信息,刚好解出两个未知数。
冗余信息:欠秩,无穷多解
方程一:x + y = 5。方程二:2x + 2y = 10(就是方程一的 2 倍)。
两个方程其实是一条信息——有无穷多对 (x, y) 满足条件。
数学定义
秩的判定
| 条件 | 解的情况 |
|---|---|
| rank(A) = rank([A|b]) = n | 唯一解 |
| rank(A) = rank([A|b]) < n | 无穷多解 |
| rank(A) < rank([A|b]) | 无解 |
其中 [A|b] 是把 b 拼在 A 右边的增广矩阵。
Python 动手实践
实例
# 鸡兔同笼:满秩
A = np.array([[1,1],[2,4]])
b = np.array([10,28])
x = np.linalg.solve(A, b)
print("解:", x, "→ 鸡=6, 兔=4")
print("秩:", np.linalg.matrix_rank(A)) # 2(满秩)
# 冗余方程
A_red = np.array([[1,2],[2,4]]) # 第2行=2×第1行
print("\n冗余矩阵的秩:", np.linalg.matrix_rank(A_red)) # 1
# 随机大矩阵的秩
big = np.random.randn(100, 50)
print("100×50 随机矩阵的秩:", np.linalg.matrix_rank(big)) # 50
解: [6. 4.] → 鸡=6, 兔=4 秩: 2(满秩) 冗余矩阵的秩: 1 100×50 随机矩阵的秩: 50
AI 中的应用场景
LoRA 微调 = 低秩假设
LoRA(Low-Rank Adaptation)的核心假设:预训练权重的微调更新量 \Delta W 是低秩的。因此可以用两个小矩阵 A(d×r)和 B(r×d)的乘积来近似完整更新量 \Delta W = AB,其中 r << d。
例如对 GPT-3 的 12288 维权重矩阵,r 取 8 或 16 就够了——秩从 12288 降到 8,参数量减少上千倍。这就是利用「秩」的概念做参数高效微调。
特征共线性检测
数据矩阵的秩远小于列数 → 特征之间存在高度共线性(多重共线性)→ 线性回归的 X^TX 不可逆或接近奇异 → 需要正则化(Ridge/Lasso)或降维(PCA)。在实际 ML 项目中,这表现为特征矩阵的条件数过大。
推荐系统中的矩阵补全
用户-物品评分矩阵通常只有少数评分(稀疏),但假设它是由低秩结构生成的(相似用户有相似口味)。矩阵补全(Matrix Completion)利用秩的约束,通过已知评分推断缺失评分。这是 Netflix 推荐大赛获奖算法的核心思想。
