小象实战讲义 · 人工智能数学基础
在人工智能的算法实现中,我们经常需要对多个矩阵进行复合运算,例如在神经网络的前向传播、主成分分析(PCA)的协方差矩阵计算中。这些复合运算结果的“信息容量”和“体积缩放”如何由原始矩阵决定?本节将系统学习矩阵乘积的两个核心性质:秩的不增性和行列式的乘积公式。掌握它们,你就能在不进行复杂数值计算的情况下,预估复合矩阵的秩,并高效计算其行列式。
💡 核心导读
本节你将掌握:
- 秩的不增性:矩阵乘积的秩不超过任一因子矩阵的秩,即 rank(AB)≤min{rank(A),rank(B)}。这揭示了线性变换会压缩信息量。
- 重要恒等式:矩阵 A 与其转置的乘积 ATA 和 AAT 的秩,与 A 本身的秩相等,即 rank(ATA)=rank(AAT)=rank(A)。这是理解协方差矩阵和最小二乘法的关键。
- 行列式的乘积公式:对于同阶方阵 A 和 B,有 det(AB)=det(A)det(B)。这意味着复合线性变换对空间的“体积”缩放倍数是各变换缩放倍数的乘积。
- 证明思想:学会从“列向量的线性组合”和“齐次线性方程组同解”的视角理解并证明上述结论。
矩阵乘积的秩:秩的不增性
矩阵的秩度量了其列(或行)向量张成空间的维数,即矩阵所携带的“独立信息”的多少。当我们对矩阵进行乘法运算时,相当于对信息进行了一次处理或过滤。
定理 1(乘积的秩):设 A 是 m×n 矩阵,B 是 n×p 矩阵,则乘积 AB 的秩满足: rank(AB)≤min{rank(A),rank(B)}. 即,乘积矩阵的秩既不超过 A 的秩,也不超过 B 的秩。
直观理解:
- 从列空间看:将 B 右乘 A,即 A⋅B,可以看作用 B 的列对 A 的列向量进行线性组合,从而得到 AB 的列向量。新的列向量组是 A 的原始列向量组的线性组合,因此 AB 的列空间是 A 的列空间的子空间。子空间的维数(即 AB 的列秩)自然不会超过原空间的维数(A 的列秩)。由于矩阵的秩等于列秩,故 rank(AB)≤rank(A)。
- 从行空间看:将 A 左乘 B,即 A⋅B,可以看作用 A 的行对 B 的行向量进行线性组合,从而得到 AB 的行向量。同理,AB 的行空间是 B 的行空间的子空间,故 rank(AB)≤rank(B)。
这个结论与信息论中的思想一致:对信息(矩阵)进行一次处理(乘法)后,得到的信息量(秩)不会增加,通常只会减少或保持不变。
证明: 我们证明 rank(AB)≤rank(A),另一个不等式 rank(AB)≤rank(B) 的证明完全对称。
设 A 的列向量组为 α1,α2,…,αn,即 A=[α1,α2,…,αn]。 设 B=(bij)n×p,则乘积 AB 的第 j 列为: (AB):,j=A⋅B:,j=b1jα1+b2jα2+⋯+bnjαn,j=1,2,…,p. 这表明 AB 的每一个列向量都是 A 的列向量组 {α1,…,αn} 的一个线性组合。因此,AB 的列向量组可由 A 的列向量组线性表出。根据线性代数基本定理:若向量组 β1,…,βp 可由向量组 α1,…,αn 线性表出,则前者的秩不超过后者的秩。所以, rank(AB)=列秩(AB)≤列秩(A)=rank(A). 同理,通过分析行向量组,可证 rank(AB)≤rank(B)。综上,定理得证。
矩阵 ATA 与 AAT 的秩
在数据科学中,矩阵 ATA(格拉姆矩阵)和 AAT(协方差矩阵的雏形)扮演着重要角色。一个令人惊奇的结论是,尽管 A, ATA, AAT 的维数可能完全不同,但它们的秩却完全一致。
定理 2:对于任意 m×n 实矩阵 A,有 rank(ATA)=rank(AAT)=rank(A).
证明思路: 首先,根据转置不改变矩阵秩的性质,有 rank(A)=rank(AT)。要证明三者秩相等,我们只需证明 rank(ATA)=rank(A),同理可得 rank(AAT)=rank(AT),从而可推得三者秩相等。
核心技巧是证明两个齐次线性方程组 同解: Ax=0与(ATA)x=0. 其中 x∈Rn。
- 显然方向:若 Ax=0,则两边左乘 AT 得 ATAx=0。所以,Ax=0 的解一定是 ATAx=0 的解。
- 另一方向:若 ATAx=0,我们想推出 Ax=0。在等式 ATAx=0 两边左乘 xT: xT(ATAx)=0. 根据结合律,(Ax)T(Ax)=0,即 ∥Ax∥2=0。一个向量的长度平方为0,当且仅当该向量为零向量。因此,Ax=0。
既然两个方程组同解,它们的解空间 W1 和 W2 就完全相同,维数自然相等:dimW1=dimW2。 根据线性方程组解空间维数公式:
- 对于 Ax=0,有 n−rank(A)=dimW1。
- 对于 (ATA)x=0,有 n−rank(ATA)=dimW2。
因为 dimW1=dimW2,所以 n−rank(A)=n−rank(ATA),立即得到 rank(A)=rank(ATA)。证毕。
这个定理有深远的意义。例如,在求解最小二乘问题 min∥Ax−b∥2 时,正规方程是 ATAx=ATb。定理2保证了 ATA 的可逆性(即满秩)与 A 的列满秩是等价的,这是最小二乘解存在唯一的理论基础。
矩阵乘积的行列式
行列式描述了方阵对应的线性变换对空间体积的缩放比例。当连续进行两次线性变换时,总缩放比例是多少?
定理 3(乘积的行列式):设 A 和 B 都是 n 阶方阵,则 det(AB)=det(A)⋅det(B). 即,复合变换的缩放比例等于各变换缩放比例的乘积。
这个公式极其强大。它意味着,要计算两个矩阵乘积的行列式,我们无需先做昂贵的矩阵乘法,只需分别计算两个行列式再做乘法即可,计算复杂度大大降低。
证明思路(以 n=2 为例,高阶可用数学归纳法): 考虑一个 4×4 的分块矩阵,并利用分块三角矩阵的行列式性质: det(A−IOB)=det(A)⋅det(B). 其中 I 是 2×2 单位阵,O 是零矩阵。 接下来,我们通过初等行变换将上述矩阵化为另一个分块上三角矩阵:
- 将第三行乘以 A 的第一行元素加到第一行。
- 将第四行乘以 A 的第二行元素加到第二行。 经过一系列精心设计的行变换(不改变行列式的值),我们可以将矩阵化为: (O−IABB). 此时,利用拉普拉斯展开定理,按前两行展开。由于前两行只在后两列有非零块 AB,所以行列式等于: det(AB)⋅det(−I)=det(AB)⋅(−1)2=det(AB). 由于整个变换过程行列式值不变,所以我们有: det(AB)=det(O−IABB)=det(A−IOB)=det(A)det(B). 这就证明了 n=2 的情况。对于一般的 n,证明思想类似但书写繁琐,通常采用数学归纳法完成。
这个定理有几个直接推论:
- det(Ak)=[det(A)]k。
- 若 A 可逆,则 det(A−1)=[det(A)]−1。
- 对于同阶方阵 A 和 B,有 det(AB)=det(BA)(由乘积公式:det(AB)=det(A)det(B)=det(B)det(A)=det(BA);注意此等式仅对同阶方阵成立)。
import numpy as np
# 验证矩阵乘积的秩与行列式性质
np.random.seed(42) # 固定随机种子,使结果可复现
# 1. 生成两个矩阵
A = np.random.randn(5, 3) # 5x3矩阵
B = np.random.randn(3, 4) # 3x4矩阵
A_square = np.random.randn(3, 3) # 3x3方阵
B_square = np.random.randn(3, 3) # 3x3方阵
print("矩阵 A (5x3) 的秩:", np.linalg.matrix_rank(A))
print("矩阵 B (3x4) 的秩:", np.linalg.matrix_rank(B))
print("乘积 AB (5x4) 的秩:", np.linalg.matrix_rank(A @ B))
print("定理1验证: rank(AB) <= min(rank(A), rank(B))?",
np.linalg.matrix_rank(A @ B) <= min(np.linalg.matrix_rank(A), np.linalg.matrix_rank(B)))
print("\n" + "="*50 + "\n")
# 2. 验证 A^TA 的秩等于 A 的秩
print("矩阵 A 的秩:", np.linalg.matrix_rank(A))
ATA = A.T @ A
print("矩阵 A^TA (3x3) 的秩:", np.linalg.matrix_rank(ATA))
print("定理2验证: rank(A) == rank(A^TA)?", np.linalg.matrix_rank(A) == np.linalg.matrix_rank(ATA))
print("\n" + "="*50 + "\n")
# 3. 验证方阵乘积的行列式
det_A = np.linalg.det(A_square)
det_B = np.linalg.det(B_square)
det_AB = np.linalg.det(A_square @ B_square)
print("方阵 A 的行列式: {:.6f}".format(det_A))
print("方阵 B 的行列式: {:.6f}".format(det_B))
print("乘积 AB 的行列式: {:.6f}".format(det_AB))
print("乘积 det(A)*det(B): {:.6f}".format(det_A * det_B))
print("定理3验证: det(AB) ≈ det(A)*det(B)?", np.allclose(det_AB, det_A * det_B))
📝 动手练一练
秩的估计:已知矩阵 A 是 5×3 矩阵,秩为 2;矩阵 B 是 3×4 矩阵,秩为 3。请问矩阵乘积 AB 的秩最大可能是多少?仅根据本节定理1,你能确定其秩的下界吗?
行列式计算:设 A=(2−113), B=(120−1)。 a) 直接计算 det(A) 和 det(B)。 b) 计算矩阵乘积 AB,再求 det(AB)。 c) 验证 det(AB)=det(A)det(B) 是否成立。
👉 点击查看参考答案
参考答案:
- 根据定理 1,rank(AB)≤min{rank(A),rank(B)}=min{2,3}=2,因此 AB 的秩最大为2。仅通过定理1可确定秩的上界,下界需结合更多秩的性质(如后续学习的Sylvester秩不等式)进一步推导,此处需重点掌握秩的上界估计方法。
- a) det(A)=2×3−1×(−1)=7, det(B)=1×(−1)−0×2=−1。 b) AB=(2×1+1×2−1×1+3×22×0+1×(−1)−1×0+3×(−1))=(45−1−3)。det(AB)=4×(−3)−(−1)×5=−12+5=−7。 c) det(A)det(B)=7×(−1)=−7=det(AB),公式成立。
本章小结
本节深入探讨了矩阵乘积的两个核心代数性质,它们是从线性变换角度理解矩阵运算的重要桥梁。
要点回顾:
- 秩的不增性:rank(AB)≤min{rank(A),rank(B)}。乘法作为线性变换会压缩信息,乘积矩阵的秩不会超过任一因子。
- ATA 的秩:rank(ATA)=rank(AAT)=rank(A)。这一结论通过证明齐次方程组 Ax=0 与 ATAx=0 同解而得,是后续学习最小二乘、主成分分析等算法的基石。
- 行列式的乘积公式:det(AB)=det(A)det(B)。复合线性变换对空间的总体积缩放倍数,等于各变换缩放倍数的乘积。这提供了计算大型矩阵乘积行列式的高效方法。
📋 行动清单
- 理解证明:重新梳理定理1和定理2的证明过程,确保你不仅能记住结论,更能理解“列向量线性组合”和“方程组同解”这两种核心证明思路。
- 代码验证:运行并理解本节提供的Python代码,尝试修改矩阵的维度和数值,观察定理是否始终成立,加深数值直观。
- 联想应用:思考在PCA算法中,为什么要计算数据矩阵 X 的协方差矩阵 XTX(或 XXT)?定理2保证了协方差矩阵的秩反映了原始数据的真实维度(即主成分的最大可能数量)。
—— 小象教研组