矩阵秩 (Matrix Rank)

1. 定义

一个矩阵的秩 (rank) = 它里面线性无关的行(或列)的数量。行秩和列秩在数学上永远相等,所以统称为 rank。

记忆钩子:秩就是矩阵包含的**“真正独立的信息方向”有几个**。满秩 = 没有冗余;秩亏 = 有些行/列是别的行/列的线性组合(重复方向)。它衡量的是”独立程度”,不是”元素个数”。

关联:矩阵运算(加减、乘、SVD、求逆)是秩的基础,见 ../python/matrix-operations.md;你刚看的 ../ai-agent-guide/sft.md 里 LoRA 的”低秩”就是这里的 rank 很小。

2. 核心概念

概念含义
线性无关没有一行/列能由其他行/列线性组合得到
行秩 = 列秩定理保证两者相等,故统称 rank
满秩 (full rank)rank = min(m, n),所有”方向”都独立
秩亏 (rank-deficient)rank < min(m, n),存在冗余方向
列空间 (column space)所有列向量张成的空间,其维度 = 秩(几何本质)
零空间 (null space)被矩阵映射成 0 的向量空间,维度 = n - rank(秩-零化度定理)
SVD 视角非零奇异值的个数 = 秩

3. 直觉与几何

秩 = 这个线性变换**“能铺到”多少个维度**。

  • 一个 m×n 矩阵把 Rⁿ 映射到 Rᵐ 里一个 rank 维的子空间。
  • 秩越小,空间被压得越”扁”;rank = min(m,n) 才完整铺满。
A = [[1, 2],          B = [[1, 0],
     [2, 4]]               [0, 1]]
第2行 = 2 × 第1行 → 只有 1 个独立方向 → rank = 1(压扁成一条线)
                 两行互不为倍数 → 2 个独立方向 → rank = 2(铺满平面,满秩)

m×n 矩阵的秩上限是 min(m, n)。非方阵也可以满秩(瘦高/矮胖矩阵,只要独立方向数等于较小的那个维度)。

4. 怎么算(代码)

import numpy as np
 
A = np.array([[1, 2],
              [2, 4]])
np.linalg.matrix_rank(A)        # → 1(第2行是第1行的2倍)
 
B = np.array([[1, 0],
              [0, 1]])
np.linalg.matrix_rank(B)        # → 2(满秩)
 
# 几何直觉:SVD 的非零奇异值个数就是秩
U, S, Vt = np.linalg.svd(A)
(S > 1e-10).sum()               # → 1,等价于 matrix_rank

5. 为什么重要:秩决定了什么

  • 可逆性:方阵满秩 ⇔ 可逆;不满秩 = 奇异矩阵,没有逆(np.linalg.inv 会报错)。
  • 方程可解性Ax = b 有解 ⇔ b 落在 A 的列空间里,即 rank(A) = rank([A|b]);不等则无解(差一个维度)。
  • 信息/冗余:低秩 = 可压缩、有冗余;这正是 SVD 截断能做降维、去噪、压缩的根本原因。
  • 机器学习:权重矩阵往往近似低秩,参数可大幅压缩而不明显掉点。

6. 和你刚看的 LoRA「低秩」挂钩 🔗

../ai-agent-guide/sft.md 里 LoRA 把微调时的权重更新 ΔW 近似成两个小矩阵相乘:

ΔW = B · A        B 是 (d, r),A 是 (r, d),r << d
  • 这个 r 就是ΔW 的秩最多是 r,所以叫”低秩”适配器。
  • 含义:用远少于原矩阵的”独立方向”(r 个)去表达一次更新——可训练参数从 d×d 降到 2·d·r省显存、且因冻结底座而防遗忘
  • 一句话:“低秩”= 这次微调所需的改动本质只沿很少几个独立方向,没必要用满秩的大矩阵

7. 常见误区

  • ❌ “秩是矩阵的元素个数” → 错。秩是线性无关的行/列数,通常远小于元素总数。
  • ❌ “行秩和列秩不一样” → 定理上两者严格相等,所以才共用一个 rank。
  • ❌ “满秩一定是方阵” → 非方阵也能满秩(只要 rank = min(m,n),如 3×2 矩阵可以 rank=2)。
  • ❌ “秩为 0 才有问题” → 只要**不满秩(秩亏)**就意味着不可逆、有信息冗余,不一定到 0。
  • ❌ “LoRA 的 r 是原权重维度” → r低秩旁路的秩,r << d;LoRA 不改原权重维度,只是额外加了一个低秩更新支路。

8. 延伸阅读 / 关联概念