ML · 形状实验

矩阵形状实验室

调整样本数 m、特征数 n 和输出数 k,观察机器学习中最常见的数据、参数与运算结果怎样一起改变。

矩阵乘法口诀:
中间维度要相等,
结果留下外侧维度。

形状总览

逗号表示一维向量;乘号表示矩阵的行数与列数。

X
(4 × 3)

数据矩阵:每行一个样本,每列一个特征。

θ
(3,)

单输出模型的参数向量:每个特征一个权重。

y
(4,)

目标向量:每个样本对应一个目标值。

W
(3 × 2)

多输出参数矩阵:把 n 个特征映射到 k 个输出。

X @ θ
(4,)

单输出预测:每个样本得到一个预测值。

X @ W
(4 × 2)

多输出预测:每个样本得到 k 个结果。

Xᵀ @ X
(3 × 3)

特征两两组合,得到特征空间中的方阵。

运算检查台

矩阵乘法只检查相邻的两个维度。匹配时,它们在结果中“消去”;不匹配时,运算没有定义。

试着令 m=n,或令 k=m,再观察后两个运算如何从“不匹配”变成“匹配”。

左操作数 X (4 × 3)
右操作数 θ (3,)
结果形状 (4,)

相接维度:3 = 3

✓ 维度匹配,可以相乘。

中间的 n 与 n 消去,外侧留下 m,因此得到长度为 m 的预测向量。

广播陷阱:(m,) 不等于 (m, 1)

一维向量没有明确的“行”或“列”。当它和二维列向量相减时,广播会从最右侧对齐维度,于是一次看似逐元素的相减,悄悄长成了方阵。

y_flat (4,)
y_column (4, 1)
y_flat - y_column (4, 4)
⚠ 不是长度为 m 的误差向量 广播把 (4,) 当作 (1, 4),再与 (4, 1) 扩展,结果是 (4, 4)。
  • 想得到一维误差:让两边都保持 (m,)
  • 想得到列向量误差:让两边都 reshape 为 (m, 1)
  • 运算前先检查 .shape,不要只看元素个数。

广播后的差值矩阵

y_flat = [1, 2, 3, 4]

第 i 行第 j 列 = y_flat[j] − y_column[i]

即时形状判断

选择答案后会立即反馈。若拿不准,先写出每个操作数的形状,再圈出相接的两个维度。

1若 X 是 (m × n),W 是 (n × k),X @ W 的形状是?
2X 是 (m × n),那么 Xᵀ @ X 的形状是?
3当前 X 是 (4 × 3),y 是 (4,),X @ y 能直接计算吗?
4(m,)(m, 1) 相减,广播后的形状是?

离开实验室前记住:形状不是附属信息,而是运算规则的一部分。先标形状、再看相接维度,能提前消灭大量机器学习代码中的维度错误。