← 返回《人工智能数学基础》
📑 查看全课大纲(第 72 / 93 节)
  1. 1.概论和集合的定义
  2. 2.逼疯康托的实数集理论
  3. 3.常用不等式与映射
  4. 4.函数及特殊函数
  5. 5.序列极限的定义
  6. 6.序列极限的性质与夹逼定理
  7. 7.重要极限
  8. 8.无穷小量,无穷大量和一组重要的阶的比较关系
  9. 9.聚点原理
  10. 10.函数极限及其性质
  11. 11.重要极限与等价无穷小
  12. 12.连续函数
  13. 13.导数的概念(那些年,扛起牛顿的胡克)
  14. 14.定义法求导
  15. 15.函数四则运算的导数与反函数求导法则
  16. 16.复合函数,隐函数,参数式求导
  17. 17.不定式求导之“洛必达与伯努利的师生情”
  18. 18.一阶微分
  19. 19.高阶导数
  20. 20.高阶微分
  21. 21.罗尔中值定理与拉格朗日中值定理
  22. 22.柯西空降科学院遭排挤
  23. 23.泰勒公式与泰勒的克妻属性
  24. 24.利用泰勒展开唯一性定理计算泰勒展开
  25. 25.泰勒公式的余项估计
  26. 26.极值问题与导数
  27. 27.函数凹凸性
  28. 28.无卵用的渐近线与函数作图
  29. 29.不定积分的定义
  30. 30.第一换元法
  31. 31.第二换元法
  32. 32.分部积分法
  33. 33.有理式积分
  34. 34.三角替换
  35. 35.定积分的概念
  36. 36.定积分的性质与积分中值定理
  37. 37.变上限定积分
  38. 38.微积分基本定理之“高斯教你如何优雅地装逼”
  39. 39.定积分的换元法
  40. 40.奇偶函数与周期函数的定积分
  41. 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
  42. 42.旋转体体积
  43. 43.旋转体侧面积
  44. 44.极坐标下图形的面积(数学系常用表白曲线)
  45. 45.欧式空间
  46. 46.点列极限,开集与闭集
  47. 47.多元函数的定义
  48. 48.多元函数的极限
  49. 49.多元连续函数
  50. 50.一阶偏导数
  51. 51.高阶偏导数
  52. 52.全微分
  53. 53.方向导数与梯度
  54. 54.链式法则
  55. 55.一阶全微分形式的不变性与高阶微分
  56. 56.多元函数的泰勒公式
  57. 57.隐函数存在定理与逆映射存在定理
  58. 58.多元函数的极值
  59. 59.矩阵基础知识
  60. 60.行列式的定义与特殊矩阵的行列式
  61. 61.行列式的性质
  62. 62.行列式按k行展开
  63. 63.线性方程组初步与高斯消元法
  64. 64.齐次线性方程组与Cramer法则
  65. 65.线性空间
  66. 66.线性相关与线性无关
  67. 67.向量组的秩
  68. 68.矩阵的秩与线性方程组有解的充要条件
  69. 69.齐次线性方程组的解集结构
  70. 70.非齐次线性方程组解集结构
  71. 71.基与维数
  72. 72.矩阵的乘法
  73. 73.特殊矩阵
  74. 74.矩阵乘积的秩与行列式
  75. 75.矩阵的逆
  76. 76.正交矩阵
  77. 77.矩阵对角化与特征值特征向量
  78. 78.实对称矩阵对角化
  79. 79.二次型与正定矩阵
  80. 80.LU分解
  81. 81.Cholesky分解
  82. 82.SVD分解
  83. 83.线搜索
  84. 84.步长
  85. 85.最速下降法和牛顿法
  86. 86.共轭梯度法
  87. 87.拟牛顿法
  88. 88.无约束优化
  89. 89.若干知识点补充(一)
  90. 90.若干知识点补充(二)
  91. 91.凸优化问题
  92. 92.对偶问题(一)
  93. 93.对偶问题(二)

矩阵的乘法

约 43 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

矩阵的乘法

小象实战讲义 · 人工智能数学基础

在上一节学习了矩阵的加法和数乘后,我们掌握了矩阵线性运算的基础。然而,在人工智能领域,尤其是处理多层神经网络、主成分分析(PCA)等任务时,矩阵之间更核心的运算是乘法。本节将系统性地定义矩阵乘法,并深入探讨其一系列关键性质。掌握矩阵乘法是理解线性变换、求解线性方程组以及后续学习特征值与奇异值分解的基石。

💡 核心导读

本节你将学到:

  • 矩阵乘法的定义与计算规则:理解“行乘列”的核心思想,并能熟练计算任意两个可乘矩阵的乘积。
  • 矩阵乘法的核心性质:包括结合律、分配律、与单位矩阵的关系,以及不满足交换律这一关键特性。
  • 矩阵乘法的转置规则:掌握 (AB)T=BTAT(AB)^T = B^T A^T 这一重要公式及其证明思路。
  • 分块矩阵的乘法:学习一种高效的矩阵运算技巧,为处理大规模矩阵计算打下基础。

矩阵乘法的定义

设矩阵 AA 是一个 s×ns \times n 的矩阵,矩阵 BB 是一个 n×mn \times m 的矩阵,即 AA 的列数等于 BB 的行数。

定义矩阵 AABB乘积 C=ABC = AB 为一个 s×ms \times m 的矩阵,其第 ii 行第 jj 列的元素 cijc_{ij} 由下式给出: cij=k=1naikbkj,i=1,,s;j=1,,m.c_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}, \quad i = 1, \dots, s; \quad j = 1, \dots, m.

定义解读与注意事项

  1. 可乘性前提:两个矩阵 AABB 能够相乘的充要条件左边矩阵 AA 的列数必须等于右边矩阵 BB 的行数。记 AAs×ns \times nBBn×mn \times m,则 ABAB 有意义。
  2. 乘积矩阵的维度:若 AAs×ns \times nBBn×mn \times m,则乘积 C=ABC = AB 是一个 s×ms \times m 的矩阵。可以形象地记为:(s×n)(n×m)(s×m)(s \times n) \cdot (n \times m) \rightarrow (s \times m),中间的 nn “相消”。
  3. “行乘列”的本质:元素 cijc_{ij}AA 的第 ii 行行向量与 BB 的第 jj 列列向量的内积(点积)。这一定义是向量内积运算在矩阵层面的自然推广。
  4. 顺序至关重要:矩阵乘法不满足交换律(后文详述),因此 AA 乘以 BB 必须写作 ABAB,顺序不能随意调换。

示例:计算 A=[120312]A = \begin{bmatrix} 1 & -2 \ 0 & 3 \ -1 & 2 \end{bmatrix}B=[4567]B = \begin{bmatrix} 4 & 5 \ 6 & 7 \end{bmatrix} 的乘积 ABAB

AA3×23 \times 2BB2×22 \times 2,满足可乘条件,结果应为 3×23 \times 2 矩阵。 AB=[120312][4567]=[1×4+(2)×61×5+(2)×70×4+3×60×5+3×7(1)×4+2×6(1)×5+2×7]=[4125140+180+214+125+14]=[89182189].\begin{aligned} AB &= \begin{bmatrix} 1 & -2 \ 0 & 3 \ -1 & 2 \end{bmatrix} \begin{bmatrix} 4 & 5 \ 6 & 7 \end{bmatrix} \ &= \begin{bmatrix} 1\times4 + (-2)\times6 & 1\times5 + (-2)\times7 \ 0\times4 + 3\times6 & 0\times5 + 3\times7 \ (-1)\times4 + 2\times6 & (-1)\times5 + 2\times7 \end{bmatrix} \ &= \begin{bmatrix} 4-12 & 5-14 \ 0+18 & 0+21 \ -4+12 & -5+14 \end{bmatrix} = \begin{bmatrix} -8 & -9 \ 18 & 21 \ 8 & 9 \end{bmatrix}. \end{aligned}

矩阵乘法的基本性质

矩阵乘法具有一系列重要的代数性质,其中一些与数的乘法相似,但也有一些根本性的不同。

性质 1:乘法结合律

对于可乘的矩阵 AA (s×ns \times n), BB (n×mn \times m), CC (m×rm \times r),有: (AB)C=A(BC).(AB)C = A(BC). 这意味着在矩阵连乘时,只要乘法的顺序(从左到右)不变,我们可以任意选择先计算哪两个矩阵的乘积。这为矩阵运算和算法设计带来了极大的便利。

证明思路:比较 (AB)C(AB)CA(BC)A(BC)(i,j)(i, j) 元。两者最终都等于 k=1nl=1maikbklclj\sum_{k=1}^{n} \sum_{l=1}^{m} a_{ik} b_{kl} c_{lj},只是求和顺序不同,根据双重求和的可交换性,结果相等。

性质 2:乘法对加法的分配律

矩阵乘法对矩阵加法满足左分配律右分配律

  • 左分配律A(B+C)=AB+ACA(B + C) = AB + AC (要求 B,CB, C 的列数相同,且 AA 的列数等于 B,CB, C 的行数)。
  • 右分配律(B+C)A=BA+CA(B + C)A = BA + CA (要求 B,CB, C 的行数相同,且 B,CB, C 的列数等于 AA 的行数)。

注意:分配时,矩阵 AA 的位置(左乘或右乘)必须保持不变。

性质 3:单位矩阵是乘法单位元

nn单位矩阵 InI_n(或简记为 II)是一个主对角线上元素全为 11,其余元素全为 00 的方阵。 In=[100010001].I_n = \begin{bmatrix} 1 & 0 & \cdots & 0 \ 0 & 1 & \cdots & 0 \ \vdots & \vdots & \ddots & \vdots \ 0 & 0 & \cdots & 1 \end{bmatrix}. 对于任意 s×ns \times n 矩阵 AAn×mn \times m 矩阵 BB,有: IsA=A,AIn=A.I_s A = A, \quad A I_n = A. 特别地,对于 nn 阶方阵 AA,有 InA=AIn=AI_n A = A I_n = A。因此,单位矩阵 InI_nnn 阶方阵的乘法运算中扮演着“11”的角色。

性质 4:数乘与矩阵乘法的相容性

kk 是一个数(标量),AA, BB 为可乘矩阵,则: k(AB)=(kA)B=A(kB).k(AB) = (kA)B = A(kB). 这意味着标量乘法可以自由地“穿过”矩阵乘法。

性质 5:矩阵乘法不满足交换律

这是矩阵乘法与数的乘法最显著的区别。一般地,ABBAAB \neq BA

  1. 维度不匹配:即使 ABAB 有定义,BABA 也可能因维度不匹配而无法计算。例如,若 AA2×32 \times 3BB3×43 \times 4,则 ABAB2×42 \times 4,但 BABA 无定义。
  2. 结果不相等:即使 AABB 都是 nn 阶方阵,ABABBABA 也未必相等。

示例: 令 A=[111]1×3A = \begin{bmatrix} 1 & 1 & 1 \end{bmatrix}{1 \times 3}, B=[111]3×1B = \begin{bmatrix} 1 \ 1 \ 1 \end{bmatrix}{3 \times 1}。 则 AB=[3]1×1AB = \begin{bmatrix} 3 \end{bmatrix}{1 \times 1},而 BA=[111111111]3×3BA = \begin{bmatrix} 1 & 1 & 1 \ 1 & 1 & 1 \ 1 & 1 & 1 \end{bmatrix}{3 \times 3}。显然 ABBAAB \neq BA

定义:如果两个矩阵 AABB 满足 AB=BAAB = BA,则称 AABB可交换的。可交换是一种特殊且重要的关系。例如,数量矩阵 kIkI(即 kk 乘以单位矩阵)与任何同阶方阵都是可交换的。

性质 6:零因子存在性

对于实数,若 ab=0ab=0,则必有 a=0a=0b=0b=0。但对于矩阵,两个非零矩阵的乘积可能是零矩阵示例A=[0010],B=[0001],BA=[0001][0010]=[0000].A = \begin{bmatrix} 0 & 0 \ 1 & 0 \end{bmatrix}, \quad B = \begin{bmatrix} 0 & 0 \ 0 & 1 \end{bmatrix}, \quad 则 BA = \begin{bmatrix} 0 & 0 \ 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 0 \ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 0 \ 0 & 0 \end{bmatrix}. 这里 A0A \neq 0, B0B \neq 0,但 BA=0BA = 0。这使得矩阵代数比实数代数更为复杂。

性质 7:转置运算的性质

矩阵的转置运算与加法、数乘和乘法有如下关系:

  1. (A+B)T=AT+BT(A + B)^T = A^T + B^T
  2. (kA)T=kAT(kA)^T = k A^T
  3. 最重要的(AB)T=BTAT(AB)^T = B^T A^T

注意:乘积的转置等于转置矩阵反向相乘。这一性质可以推广到多个矩阵:(ABC)T=CTBTAT(ABC)^T = C^T B^T A^T

证明 (AB)T=BTAT(AB)^T = B^T A^T 的思路: 设 AAs×ns \times nBBn×mn \times m。比较等式两边的 (i,j)(i, j) 元。

  • (AB)T(AB)^T(i,j)(i, j) 元等于 ABAB(j,i)(j, i) 元,即 k=1najkbki\sum_{k=1}^{n} a_{jk} b_{ki}
  • BTATB^T A^T(i,j)(i, j) 元等于 BTB^T 的第 ii 行(即 BB 的第 ii 列)与 ATA^T 的第 jj 列(即 AA 的第 jj 行)的内积,即 k=1n(BT)ik(AT)kj=k=1nbkiajk\sum_{k=1}^{n} (B^T){ik} (A^T){kj} = \sum_{k=1}^{n} b_{ki} a_{jk}。 由于求和顺序可交换,两者相等。又因为矩阵维度相同,故等式成立。

分块矩阵的乘法

分块矩阵是处理大型矩阵运算的强大工具。其核心思想是将大矩阵划分为若干个小块(子矩阵),然后像处理“数”一样,按照矩阵乘法的规则对这些子矩阵进行运算。

分块乘法规则: 设矩阵 AA (s×ns \times n) 和 BB (n×mn \times m) 被分块如下: A=[A11A12A1tA21A22A2tAr1Ar2Art],B=[B11B12B1pB21B22B2pBt1Bt2Btp].A = \begin{bmatrix} A_{11} & A_{12} & \cdots & A_{1t} \ A_{21} & A_{22} & \cdots & A_{2t} \ \vdots & \vdots & \ddots & \vdots \ A_{r1} & A_{r2} & \cdots & A_{rt} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} & B_{12} & \cdots & B_{1p} \ B_{21} & B_{22} & \cdots & B_{2p} \ \vdots & \vdots & \ddots & \vdots \ B_{t1} & B_{t2} & \cdots & B_{tp} \end{bmatrix}. 其中,AA 的列分块方式与 BB 的行分块方式必须完全一致,即 AikA_{ik} 的列数等于 BkjB_{kj} 的行数(对所有 i,j,ki, j, k)。则 AABB 的乘积 C=ABC = AB 可以分块计算: Cij=k=1tAikBkj,i=1,,r; j=1,,p.C_{ij} = \sum_{k=1}^{t} A_{ik} B_{kj}, \quad i=1,\dots,r; \ j=1,\dots,p. 这里 CijC_{ij} 是乘积矩阵 CC 对应的子块。

关键要求

  1. 外维匹配:左边矩阵 AA列组数等于右边矩阵 BB行组数(上例中均为 tt)。
  2. 内维匹配AA 中每个子块 AikA_{ik}列数必须等于 BB 中对应子块 BkjB_{kj}行数。这保证了每一个子矩阵乘法 AikBkjA_{ik}B_{kj} 都是合法的。

特殊且常用的分块技巧:列分块 将右乘矩阵 BB 按列分块:B=[β1,β2,,βm]B = [\boldsymbol{\beta}_1, \boldsymbol{\beta}_2, \dots, \boldsymbol{\beta}_m],其中 βj\boldsymbol{\beta}_jBB 的第 jj 列(视为 n×1n \times 1 矩阵)。则乘积 ABAB 可以简洁地表示为: AB=A[β1,β2,,βm]=[Aβ1,Aβ2,,Aβm].AB = A[\boldsymbol{\beta}_1, \boldsymbol{\beta}_2, \dots, \boldsymbol{\beta}_m] = [A\boldsymbol{\beta}_1, A\boldsymbol{\beta}_2, \dots, A\boldsymbol{\beta}_m]. 这意味着矩阵 AA 左乘 BB 等价于 AA 分别左乘 BB 的每一列。这个视角在理解线性变换 xAxx \mapsto Ax 时非常直观。

📝 动手练一练

  1. 计算与验证:已知矩阵 P=[2101]P = \begin{bmatrix} 2 & -1 \ 0 & 1 \end{bmatrix}, Q=[1234]Q = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix}, R=[0110]R = \begin{bmatrix} 0 & 1 \ -1 & 0 \end{bmatrix}。 a) 计算 PQPQQPQP,并验证 PQQPPQ \neq QP。 b) 计算 (PQ)R(PQ)RP(QR)P(QR),验证结合律。 c) 计算 (PQ)T(PQ)^TQTPTQ^T P^T,验证转置性质。

  2. 分块矩阵计算:将矩阵 A=[102301451201]A = \begin{bmatrix} 1 & 0 & 2 & 3 \ 0 & 1 & 4 & 5 \ -1 & 2 & 0 & 1 \end{bmatrix}B=[12345678]B = \begin{bmatrix} 1 & 2 \ 3 & 4 \ 5 & 6 \ 7 & 8 \end{bmatrix} 进行如下分块: A=[I2A12A21A22],B=[B11B21],A = \begin{bmatrix} I_2 & A_{12} \ A_{21} & A_{22} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} \ B_{21} \end{bmatrix}, 其中 I2I_22×22 \times 2 单位矩阵。请利用分块乘法计算 ABAB,并与直接计算 ABAB 的结果进行对比。

参考答案

  1. a) PQ=[1034]PQ = \begin{bmatrix} -1 & 0 \ 3 & 4 \end{bmatrix}, QP=[2161]QP = \begin{bmatrix} 2 & 1 \ 6 & 1 \end{bmatrix},不相等。 b) (PQ)R=[0143](PQ)R = \begin{bmatrix} 0 & -1 \ -4 & 3 \end{bmatrix}, P(QR)=[0143]P(QR) = \begin{bmatrix} 0 & -1 \ -4 & 3 \end{bmatrix},相等。 c) (PQ)T=[1304](PQ)^T = \begin{bmatrix} -1 & 3 \ 0 & 4 \end{bmatrix}, QTPT=[1324][2011]=[1304]Q^T P^T = \begin{bmatrix} 1 & 3 \ 2 & 4 \end{bmatrix} \begin{bmatrix} 2 & 0 \ -1 & 1 \end{bmatrix} = \begin{bmatrix} -1 & 3 \ 0 & 4 \end{bmatrix},相等。
  2. 分块后,A12=[2345]A_{12} = \begin{bmatrix} 2 & 3 \ 4 & 5 \end{bmatrix}, A21=[12]A_{21} = \begin{bmatrix} -1 & 2 \end{bmatrix}, A22=[01]A_{22} = \begin{bmatrix} 0 & 1 \end{bmatrix}, B11=[1234]B_{11} = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix}, B21=[5678]B_{21} = \begin{bmatrix} 5 & 6 \ 7 & 8 \end{bmatrix}。 则 AB=[I2B11+A12B21A21B11+A22B21]=[[1234]+[31365564][56]+[78]]=[323858681214]AB = \begin{bmatrix} I_2 B_{11} + A_{12} B_{21} \ A_{21} B_{11} + A_{22} B_{21} \end{bmatrix} = \begin{bmatrix} \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} + \begin{bmatrix} 31 & 36 \ 55 & 64 \end{bmatrix} \ \begin{bmatrix} 5 & 6 \end{bmatrix} + \begin{bmatrix} 7 & 8 \end{bmatrix} \end{bmatrix} = \begin{bmatrix} 32 & 38 \ 58 & 68 \ 12 & 14 \end{bmatrix}。 直接计算 ABAB 可得相同结果。
import numpy as np

# 练习1的代码验证
P = np.array([[2, -1], [0, 1]])
Q = np.array([[1, 2], [3, 4]])
R = np.array([[0, 1], [-1, 0]])

print("1. a) 验证交换律不成立:")
PQ = P @ Q
QP = Q @ P
print(f"PQ = \n{PQ}")
print(f"QP = \n{QP}")
print(f"PQ == QP? {np.array_equal(PQ, QP)}")

print("\n1. b) 验证结合律:")
P_QR = P @ (Q @ R)
PQ_R = (P @ Q) @ R
print(f"P(QR) = \n{P_QR}")
print(f"(PQ)R = \n{PQ_R}")
print(f"P(QR) == (PQ)R? {np.array_equal(P_QR, PQ_R)}")

print("\n1. c) 验证转置性质:")
PQ_T = (P @ Q).T
QT_PT = Q.T @ P.T
print(f"(PQ)^T = \n{PQ_T}")
print(f"Q^T P^T = \n{QT_PT}")
print(f"(PQ)^T == Q^T P^T? {np.array_equal(PQ_T, QT_PT)}")

# 练习2的代码验证:分块矩阵乘法 vs 直接乘法
print("\n" + "="*50)
print("2. 分块矩阵乘法验证:")
A = np.array([[1, 0, 2, 3],
              [0, 1, 4, 5],
              [-1, 2, 0, 1]])
B = np.array([[1, 2],
              [3, 4],
              [5, 6],
              [7, 8]])

# 直接计算
AB_direct = A @ B
print(f"直接计算 AB = \n{AB_direct}")

# 分块计算
I2 = np.eye(2)
A12 = np.array([[2, 3], [4, 5]])
A21 = np.array([[-1, 2]])
A22 = np.array([[0, 1]])
B11 = np.array([[1, 2], [3, 4]])
B21 = np.array([[5, 6], [7, 8]])

# 按照分块公式计算
AB_block_top = I2 @ B11 + A12 @ B21
AB_block_bottom = A21 @ B11 + A22 @ B21
AB_block = np.vstack((AB_block_top, AB_block_bottom))

print(f"分块计算 AB = \n{AB_block}")
print(f"两种方法结果一致? {np.array_equal(AB_direct, AB_block)}")

本章小结

本节深入探讨了线性代数的核心运算——矩阵乘法。

  • 定义与计算:你掌握了矩阵乘法的“行乘列”定义,理解了可乘性的维度条件,并能熟练进行计算。
  • 核心性质:你学习了矩阵乘法的结合律、分配律、与单位矩阵的关系,并深刻理解了其不满足交换律的特性,认识了零因子和转置的重要规则 (AB)T=BTAT(AB)^T = B^T A^T
  • 高级技巧:你初步了解了分块矩阵的乘法,这是一种化整为零、简化大规模计算的有效策略。

行动清单

  1. 强化计算:任意构造几个不同维度的矩阵,手动计算它们的乘积,并利用上方的 Python 代码进行验证,确保对“行乘列”规则烂熟于心。
  2. 性质对比:制作一个表格,对比矩阵乘法与实数乘法的异同(交换律、零因子、单位元等),加深对矩阵代数独特性的理解。
  3. 视角应用:尝试用“列分块”的视角重新理解一个矩阵乘法 AXAX,将结果矩阵的每一列视为 AAXX 对应列的线性变换。这为下一章理解线性变换打下直观基础。

— 小象教研组

配套学习资源与课件
  • 第10章讲义(含板书):线性代数(PDF · 15.5MB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问