机器学习数学基础 120 章

矩阵加法、乘法、转置与分块

层级:A|必学

1. 矩阵运算不是逐元素运算的别名

矩阵加法确实逐元素进行,但矩阵乘法表示线性变换的复合,规则与逐元素乘完全不同。深度学习的全连接层、批量线性回归、协方差、注意力和反向传播都依赖形状正确的矩阵乘法。

2. 矩阵加法与数乘

只有同形状矩阵可以相加:

(A+B)ij=aij+bij.(\boldsymbol A+\boldsymbol B)_{ij}=a_{ij}+b_{ij}.

标量乘矩阵逐元素缩放:

(cA)ij=caij.(c\boldsymbol A)_{ij}=ca_{ij}.

它们满足交换律、结合律和分配律。若形状不同,数学上不能直接相加;程序广播是额外约定。

3. 矩阵—向量乘法

ARm×n\boldsymbol A\in\mathbb R^{m\times n}xRn\boldsymbol x\in\mathbb R^n,则

y=AxRm,\boldsymbol y=\boldsymbol A\boldsymbol x\in\mathbb R^m,

ii 个分量为

yi=j=1naijxj.y_i=\sum_{j=1}^{n}a_{ij}x_j.

可以从两种角度理解:

  • 按行yiy_i 是第 ii 行与 x\boldsymbol x 的内积;
  • 按列:输出是 A\boldsymbol A 各列按 xjx_j 加权的线性组合。

例:

[1234][56]=[15+2635+46]=[1739].\begin{bmatrix}1&2\\3&4\end{bmatrix} \begin{bmatrix}5\\6\end{bmatrix} =\begin{bmatrix}1\cdot5+2\cdot6\\3\cdot5+4\cdot6\end{bmatrix} =\begin{bmatrix}17\\39\end{bmatrix}.

4. 矩阵乘法

ARm×n,BRn×p,\boldsymbol A\in\mathbb R^{m\times n}, \qquad \boldsymbol B\in\mathbb R^{n\times p},

C=ABRm×p,\boldsymbol C=\boldsymbol A\boldsymbol B \in\mathbb R^{m\times p},

cik=j=1naijbjk.c_{ik}=\sum_{j=1}^{n}a_{ij}b_{jk}.

口诀“内部维度相等,输出保留外部维度”:

(m×n)(n×p)=m×p.(m\times\underline n)(\underline n\times p)=m\times p.

cikc_{ik}A\boldsymbol Aii 行与 B\boldsymbol Bkk 列的内积。

5. 为什么这样定义乘法

假设先做线性变换 z=Bx\boldsymbol z=\boldsymbol B\boldsymbol x,再做 y=Az\boldsymbol y=\boldsymbol A\boldsymbol z

y=A(Bx)=(AB)x.\boldsymbol y=\boldsymbol A(\boldsymbol B\boldsymbol x) =(\boldsymbol A\boldsymbol B)\boldsymbol x.

因此矩阵乘法精确表示线性变换的复合。运算次序从右向左:AB\boldsymbol A\boldsymbol B 表示先应用 B\boldsymbol B,再应用 A\boldsymbol A

6. 乘法性质与不交换性

矩阵乘法满足:

(AB)C=A(BC),(\boldsymbol A\boldsymbol B)\boldsymbol C =\boldsymbol A(\boldsymbol B\boldsymbol C), A(B+C)=AB+AC.\boldsymbol A(\boldsymbol B+\boldsymbol C) =\boldsymbol A\boldsymbol B+\boldsymbol A\boldsymbol C.

但一般

ABBA.\boldsymbol A\boldsymbol B\ne\boldsymbol B\boldsymbol A.

有时 AB\boldsymbol A\boldsymbol B 有定义而 BA\boldsymbol B\boldsymbol A 无定义;即使都存在,形状和数值也可能不同。不能像标量代数那样随意调换矩阵顺序。

7. 单位矩阵与零矩阵

只要形状匹配:

ImA=A,AIn=A,\boldsymbol I_m\boldsymbol A=\boldsymbol A, \qquad \boldsymbol A\boldsymbol I_n=\boldsymbol A, 0A=0,A0=0.\boldsymbol0\boldsymbol A=\boldsymbol0, \qquad \boldsymbol A\boldsymbol0=\boldsymbol0.

但矩阵存在“零因子”:可能 A0\boldsymbol A\ne0B0\boldsymbol B\ne0,却 AB=0\boldsymbol A\boldsymbol B=0。因此不能总从 AB=ACAB=AC 消去 AA,除非 AA 具有足够的可逆性。

8. 转置

转置交换行与列:

(AT)ij=aji.(\boldsymbol A^{\mathsf T})_{ij}=a_{ji}.

A\boldsymbol Am×nm\times n,则 AT\boldsymbol A^{\mathsf T}n×mn\times m。常用规则:

(AT)T=A,(\boldsymbol A^{\mathsf T})^{\mathsf T}=\boldsymbol A, (A+B)T=AT+BT,(\boldsymbol A+\boldsymbol B)^{\mathsf T} =\boldsymbol A^{\mathsf T}+\boldsymbol B^{\mathsf T}, (AB)T=BTAT.(\boldsymbol A\boldsymbol B)^{\mathsf T} =\boldsymbol B^{\mathsf T}\boldsymbol A^{\mathsf T}.

最后一条必须反转顺序,可理解为复合变换反向展开。

9. 逐元素乘法

Hadamard 乘积记为

AB,(AB)ij=aijbij.\boldsymbol A\odot\boldsymbol B, \qquad (\boldsymbol A\odot\boldsymbol B)_{ij}=a_{ij}b_{ij}.

要求两矩阵同形状。它与矩阵乘法不同。深度学习中的门控、掩码和逐元素激活导数常用 Hadamard 乘。代码里的 * 是逐元素还是矩阵乘,取决于语言与类型;必须查清。

10. 外积与 Gram 矩阵

列向量 xRm\boldsymbol x\in\mathbb R^myRn\boldsymbol y\in\mathbb R^n 的外积

xyTRm×n,\boldsymbol x\boldsymbol y^{\mathsf T}\in\mathbb R^{m\times n},

(i,j)(i,j) 项为 xiyjx_iy_j。外积常用于协方差、秩一更新和梯度。

对数据矩阵 XRn×d\boldsymbol X\in\mathbb R^{n\times d}

  • XTX\boldsymbol X^{\mathsf T}\boldsymbol Xd×dd\times d,比较特征与特征;
  • XXT\boldsymbol X\boldsymbol X^{\mathsf T}n×nn\times n,比较样本与样本。

两者不可混淆。

11. 分块矩阵

大矩阵可按兼容形状分块:

A=[A11A12A21A22].\boldsymbol A= \begin{bmatrix} \boldsymbol A_{11}&\boldsymbol A_{12}\\ \boldsymbol A_{21}&\boldsymbol A_{22} \end{bmatrix}.

只要块的边界匹配,就能像标量一样做块乘法,但每个“乘法”仍是矩阵乘法。例如

[AB][xy]=Ax+By.\begin{bmatrix}\boldsymbol A&\boldsymbol B\end{bmatrix} \begin{bmatrix}\boldsymbol x\\\boldsymbol y\end{bmatrix} =\boldsymbol A\boldsymbol x+\boldsymbol B\boldsymbol y.

分块有助于理解多组特征、偏置合并和多任务参数。

12. 批量神经网络层

若每行一个样本,输入 XRn×d\boldsymbol X\in\mathbb R^{n\times d},权重 WRd×h\boldsymbol W\in\mathbb R^{d\times h},偏置 bRh\boldsymbol b\in\mathbb R^h

Z=XW+1nbTRn×h.\boldsymbol Z=\boldsymbol X\boldsymbol W +\boldsymbol1_n\boldsymbol b^{\mathsf T} \in\mathbb R^{n\times h}.

它一次为 nn 个样本计算 hh 个隐藏单元。程序里的广播省略了 1n\boldsymbol1_n

易错点

  1. 矩阵乘法不是逐元素乘法。
  2. ABAB 一般不等于 BABA
  3. (AB)T=BTAT(AB)^T=B^TA^T,顺序反转。
  4. XTXX^TXXXTXX^T 形状、语义不同。
  5. 能相乘不代表能相加;相加要求整体形状相同。

常见问答

Q1:矩阵乘法为什么不能交换?

因为它表示函数复合。先旋转再拉伸通常不同于先拉伸再旋转,正如两个非交换的程序步骤。

Q2:矩阵乘法结合律允许随便加括号吗?

数学结果相同,但计算成本可能差别巨大。例如链式乘法应选择中间矩阵较小的顺序。

Q3:X @ W + b 为什么能运行?

@ 做矩阵乘法;b 按框架的广播规则复制到每一行。数学上等价于加 1bT\boldsymbol1b^T

练习

  1. 判断 (3×4)(4×2)(3\times4)(4\times2) 的输出形状。
  2. 计算 [1201][34]\begin{bmatrix}1&2\\0&-1\end{bmatrix}\begin{bmatrix}3\\4\end{bmatrix}
  3. AA2×32\times3BB3×53\times5BABA 是否有定义?
  4. 写出 (ABC)T(ABC)^T
  5. XX100×20100\times20,求 XTXX^TXXXTXX^T 的形状。
  6. 给出两个非零 2×22\times2 矩阵,使其乘积为零矩阵。

答案与提示

  1. 3×23\times2
  2. (11,4)T(11,-4)^T
  3. 无定义,因为 (3×5)(2×3)(3\times5)(2\times3) 的内部维度不匹配。
  4. CTBTATC^TB^TA^T
  5. 20×2020\times20100×100100\times100
  6. 例如 A=[1000]A=\begin{bmatrix}1&0\\0&0\end{bmatrix}B=[0001]B=\begin{bmatrix}0&0\\0&1\end{bmatrix}