本页梳理 ML 日常最高频的向量与矩阵运算。读 PyTorch 代码时,多数时间花在理解 shape 与 @ 上。
段末注释:广播(broadcasting)指 NumPy/PyTorch 按规则自动扩展较小数组的维度以匹配运算,无需显式复制(逻辑上对齐)。
1. 向量与矩阵记号(D2)

- 列向量 $\mathbf{x} \in \mathbb{R}^{d}$:$d \times 1$
- 行向量 $\mathbf{x}^\top$:$1 \times d$
- 矩阵 $A \in \mathbb{R}^{m \times n}$:$m$ 行 $n$ 列
ML 约定:一个样本常写为行向量 $\mathbf{x}_i^\top$($1 \times d$),batch 堆成 $X \in \mathbb{R}^{n \times d}$;PyTorch 线性层 nn.Linear(in, out) 实现 $\mathbf{y} = \mathbf{x} W^\top + \mathbf{b}$,其中 $W$ 为 out × in。
2. 点积、外积与矩阵乘(D3)

点积(内积):
$$
\mathbf{a}^\top \mathbf{b} = \sum_{i=1}^d a_i b_i
$$
几何意义:$|\mathbf{a}||\mathbf{b}|\cos\theta$;归一化后为 cosine 相似度。
外积(秩-1 矩阵):
$$
\mathbf{a}\mathbf{b}^\top \in \mathbb{R}^{m \times n}, \quad [\mathbf{a}\mathbf{b}^\top]_{ij} = a_i b_j
$$
矩阵乘法 $C = AB$,$C_{ij} = \sum_k A_{ik} B_{kj}$:
| 形状 | 合法条件 |
|---|---|
| $(m \times k)(k \times n)$ | $A$ 列数 = $B$ 行数 → $C$ 为 $m \times n$ |
| batch $(B,m,k)(B,k,n)$ | 批维 $B$ 广播一致 |
结合律:$(AB)C = A(BC)$;一般不可交换 $AB \neq BA$。
3. 转置与基本性质(D3)
$$
(AB)^\top = B^\top A^\top, \quad (A^\top)^\top = A
$$
对称矩阵:$A = A^\top$(协方差、Hessian)。正交矩阵:$Q^\top Q = I$。
4. ML 中的典型 shape(D7)

| 场景 | 张量 shape | 运算 |
|---|---|---|
| MLP 一层 | $X$: $(B,d)$, $W$: $(k,d)$ | X @ W.T → $(B,k)$ |
| 全连接 + bias | $b$: $(k,)$ | 广播加 |
| 嵌入查表 | idx: $(B,L)$, $E$: $(V,h)$ |
E[idx] → $(B,L,h)$ |
| Attention | $Q,K$: $(B,h,L,d_k)$ | $QK^\top$ → $(B,h,L,L)$ |
| 梯度 | $\partial L/\partial W$ | 与 $W$ 同形 |
$B$=batch,$L$=序列长,$h$=头数,$d_k$=每头维度。
5. 广播规则(D7)
NumPy/PyTorch 从最后一维对齐:
1 | # (100, 20) + (20,) → (100, 20) 每列加同一 bias |
建议:不确定时 print(tensor.shape) 或 assert。
6. 局限与常见错误(D8)

| 误用 | 说明 |
|---|---|
| 混淆行/列向量 | 导致 $X^\top X$ vs $XX^\top$ 维度错误 |
| 隐式广播「凑巧能算」 | 逻辑错但 shape 合法 |
| 大矩阵 $(n,d)$ 当 $(d,n)$ | 特征与样本颠倒 |
Python * vs @ |
* 逐元素乘,不是矩阵乘 |
7. NumPy / PyTorch 示例(D12)
1 | import numpy as np |