向量、矩阵与形状
本节目标
本节把上一课的一维向量扩展成矩阵与张量。重点不是背符号,而是为每个轴写出业务含义,在计算前做 shape 推导,并区分矩阵乘法、点积和逐元素乘法。
为什么需要
一条样本的特征是向量,一批样本是矩阵,模型权重也常是矩阵。大量 ML 错误首先是 shape 错误,而不是“算法太难”。
标量、向量、矩阵
- 标量 :一个数,例如学习率 0.01。
- 列向量 : 个有顺序的分量。
- 矩阵 : 行、 列;常约定每行一个样本、每列一个特征。
- 张量:零维、向量和矩阵向更高维的推广。例如
batch × sequence × hidden是三维张量;每个轴都必须有明确语义。
的形状可写 (2,) 或 (2,1),二者在具体库中行为可能不同; 是 。
基本运算
同形向量相加、标量缩放:
矩阵乘法 要求 的列数等于 的行数:
元素公式:
例:
第一项 。它不同于逐元素乘法。
同形矩阵的逐元素乘法(Hadamard product)写作 。它保留 shape;矩阵乘法会收缩相邻内维。不要因为某个库用 * 或 @ 就跳过数学语义检查。
转置与批量视角
转置交换行列:。若每行是一条样本,线性预测可写:
为 , 为 ,输出为 :一次计算 条样本。
Shape 账本
对每个计算写一行账本:
| 名称 | Shape | 轴的语义 |
|---|---|---|
X | n × d_in | 样本 × 输入特征 |
W | d_out × d_in | 输出特征 × 输入特征 |
X @ W.T | n × d_out | 样本 × 输出特征 |
b | d_out | 每个输出特征的偏置 |
Z | n × d_out | 每条样本的输出表示 |
如果使用列样本约定,公式会改写,但语义应保持一致。一个项目可以选择任一约定,不能在中途悄悄切换。
可运行的矩阵向量乘法
from math import fsum
def matvec(matrix: list[list[float]], vector: list[float]) -> list[float]:
if not matrix or not vector:
raise ValueError("matrix and vector must be non-empty")
columns = len(matrix[0])
if columns != len(vector) or any(len(row) != columns for row in matrix):
raise ValueError("matrix must be rectangular and inner dimensions must match")
return [fsum(value * weight for value, weight in zip(row, vector))
for row in matrix]
assert matvec([[1.0, 2.0], [3.0, 4.0]], [5.0, 6.0]) == [17.0, 39.0]这段代码优先展示内维检查;真实张量库还会处理 dtype、device、batch 轴、稀疏布局和广播规则。
在 ML/Embedding 中的用途
- token 表示常形成
batch × sequence × hidden三维张量;矩阵是张量的二维特例。 - Embedding 表可看作
vocabulary × dimension矩阵,按 token ID 选行。 - 检索库把每个文档向量堆成矩阵,可批量计算 query 与所有文档的得分。
- 权重 的输入维度必须等于向量最后一维。
常见误区
- 认为 ;矩阵乘法通常不可交换,甚至另一方向可能无法计算。
- 忽略行向量/列向量约定,靠广播“算出一个结果”却语义错误。
- 把维度数和样本数混淆。
- 逐元素乘法与点积、矩阵乘法混为一谈。
- 看到元素总数相同就随意
reshape;重排 shape 可能改变样本、token 和特征的对应关系。 - 把广播成功当成语义正确,未检查偏置究竟加在哪个轴上。
练习与自测
- 为
32×768、 为768×128,输出 shape 是什么?答32×128。 - 手算上面的矩阵向量乘法并解释每行是如何与 组合的。
- 为
batch=4, sequence=128, hidden=768写出每个轴的业务含义;说明为什么不能无说明地变成512×768。 - 修改
matvec,为不规则矩阵、空输入和内维不匹配各写一个测试。
- 计算前我会写 shape。
- 我能解释矩阵乘法的内维条件。
- 我能把批量预测写成 。
- 我能区分矩阵乘法、点积和逐元素乘法。
- 我会为 batch、sequence、feature 等轴写语义,而不只写数字。
参考资料
核验日期:2026-07-14。
上一节:坐标、点积、范数与相似度|下一步:线性组合、方程组与秩。