课程/M03/矩阵的四种身份
M03 · 矩阵与线性映射核心约 30 分钟

3.1 矩阵的四种身份

本节位置:模块 3 · 矩阵与线性映射 | 前置:2.4 基与维数 | 预计:30 分钟

一句话:同一个 的数字阵列,可以读成数据表、线性映射、空间算子或一排列向量——四种读法算的是同一件事。

0. 场景引入

凌晨两点,手机影像团队在调 AR 贴纸。相机内参矩阵是

的传感器(约 1250 万像素),焦距 像素,水平视场 ,主点 正好落在画面中心。

这九个数字被存了三份:标定文件里一份、渲染引擎里一份、回放日志里一份。出问题的是读法——有人按表读(第 1 行是「 像素怎么算」),有人按算子读( 作用在三维坐标上),有人按列读( 的三列是图像坐标系的三个方向)。

决定:这份内参到底存成 还是 ?第三行 看起来只是一次「原样搬运」,能不能省掉?

代价:省掉它,正向投影一模一样,所有单元测试都通过;但 AR 要从用户点击的像素反推一条射线, 没有逆,只能假设「深度 2 米」硬编码。镜头一开防抖,主点漂移 像素,射线就偏 ——2 米外横向偏 mm。贴纸从桌面上浮起两厘米,穿模。

问题:同一份 的数字,为什么可以同时是表、是映射、是算子、是列向量组?四种读法在什么条件下给出同一个答案,在什么条件下开始打架?

读完本节,你应该能回答三件事:

  1. 四种身份分别对应什么提问方式,各自在代码里长什么样;
  2. 为什么「第 列是第 个基向量的像」这条恒等式能把四种身份钉在一起;
  3. 什么时候必须按映射读、什么时候按表读,读反了会坏在哪。

1. 直觉

1.1 四种读法,四种提问

矩阵不是「一堆数」,而是一张可以按行读、按列读、按整体读的表。四种身份对应四种提问方式:

  1. 数据表(data table):行是样本,列是特征——「小林喜欢什么」。
  2. 线性映射(linear map):,——「输入会被变成什么」。
  3. 算子(operator):当 ,它把空间中的每个点搬到另一点——「图形被拉伸、旋转、剪切成了什么样」。
  4. 列向量组(a list of column vectors):——「这些列张成了什么空间」。

按行得到观测,按列得到响应,按整体得到变换 。

💡 一句话直觉:行是「观测」,列是「响应」,整体是「变换」。

类比边界:数据表可以随意转置;但一旦选定「哪一维是输入、哪一维是输出」,映射方向就固定了,转置会交换输入输出空间。

1.2 现实对应:一台相机的内参矩阵

相机做的事可以一句话说完:把三维世界压到一张二维照片上。这一步在数学上就是 乘三维坐标,再除以第三个分量:

这个式子说的是: 先把「米」换算成「像素」,再靠那个除法把深度除掉。

四种身份在这里全部落地:

  • 数据表:3 行 = 3 个输出(),3 列 = 3 个输入()。
  • 映射:;但真正输出像素的是后面那一步除法,所以整体是射影映射,不是线性映射。
  • 算子: 是方阵且可逆(),它把单位球拉成一个极扁极长的椭球:三个奇异值约 。
  • 列向量组:第 3 列 是「相机正前方」这条轴落到的像素位置,也就是主点。

这个类比在哪里失效: 本身是线性的,但「投影」整体不是——除以 破坏了线性性。所以两个点投影的平均,不等于平均点的投影: 与 的两点,在 处的投影不等于它们投影的中点。这也是针孔模型必须带齐次坐标的原因。

1.3 量级直觉

的三个奇异值约 ,所以 。

这个数不是抽象的:相机坐标里 mm 的误差,在 m 处会变成 个像素。反过来,像素空间里 个像素的误差,只对应相机坐标里的 m。像素是「放大过的尺子」,误差在像素空间里看得最清楚。

2. 定义

2.1 矩阵(matrix)与形状

一个 实矩阵是 个数排成的矩形阵列:

记 。 是行数(rows), 是列数(columns), 是第 行第 列的元素。代码里形状写成 [m, n];数学里写成 。数学索引从 1 开始,代码索引从 0 开始。

「矩阵(matrix)」这个名称来自 Sylvester 1850:他把「行列式由之生成的矩形阵列」称为 matrix——当时它还是行列式的附属品,不是独立的运算对象。

2.2 四种身份

数据表: 个样本各有 个特征;第 行是第 个样本,第 列是第 个特征在所有样本上的取值。

线性映射:定义 ,。输入是 维列向量,输出是 维列向量;先记住形状 。这套「线性映射 ↔ 矩阵」的对应在 Horn & Johnson 的第 0 章(基础回顾)里有系统整理。

算子:当 时, 是同一个空间到自身的映射,描述旋转、缩放、剪切、投影等几何动作。

列向量组:把每一列看成一个 维向量,。这 个列向量的所有线性组合构成 的列空间(column space),记作 。

2.3 关键恒等式

设 是 的第 个标准基向量(第 个分量为 1,其余为 0),则

读法:矩阵的第 列,就是第 个基向量被映射到的位置。 这把「列向量组」与「线性映射」两种身份钉死在一起。

3. 为什么这样定义

为什么不把矩阵只定义成二维数组,像 Python 的嵌套列表那样?因为数组只能存数据,不能回答「输入变了输出怎么变」。线性映射的身份给矩阵装上了作用方向:左边乘一个向量,就得到一次变换的结果。没有它,矩阵乘法、逆矩阵、特征值全都无从谈起。

再往前一步:矩阵之所以能作为一个整体被相加、相乘、求逆,始于 Cayley 1858 的矩阵代数——他把矩阵从「行列式的记法」提升成了独立的研究对象。

为什么还保留数据表身份?因为实际建模时行与列的含义决定你怎么写代码。PyTorch 的 nn.Linear 权重形状是 [out_features, in_features];若按数据表的直觉把特征放在行上,形状就会错。

为什么算子要单独拿出来?因为方阵可以反复作用、可以求逆、可以研究特征方向。 的矩阵只能做一次升维或降维,谈不上可逆。

四种身份不是四个对象,而是同一份数字的四种索引约定。选哪种,取决于你此刻要问的问题。

3.1 反事实:把 砍成 会坏在哪

第三行 看起来最没用——它只是把 原样搬到 。于是有人提议:既然最后要除以 ,不如把 存成 ,投影时手写除以 :

取 、、(相机前方 2 米、偏右半米):

和 版本一字不差。这就是这个「优化」能通过所有正向测试的原因。

坏在反向。要让贴纸贴在桌面上,你得从用户点的像素反推一条射线。 不是方阵、没有逆;两个方程三个未知数,解出来的是一条直线而不是一个点,只能把深度当自由参数硬编码。

一眼可见的坏:正向等价、反向无解。第三行不是冗余,它是唯一让 可逆的那一行。这也是为什么内参矩阵必须存成方阵,而投影公式里那个除法不能提前吸收进矩阵——一旦吸收,你就丢掉了「从像素回到世界」的能力。

顺带一提:如果为了省一次乘法把 存成 ,正向就崩了。取同一个点,用 算出的 ,得到像素 ——整幅图向画面左下角塌缩。读反行列不会让结果差一点,会让结果差一个世界。

4. 性质与推导

4.1 列是基向量的像

由矩阵乘向量的定义(第 3.2 节),取 ,只有 ,其余为 0,于是 ,即 。

由此,任意 被送到

只要知道 个基向量的像,就知道整个线性映射。这就是「列组合视角」的根源。

4.2 形状是最便宜的检查

运算形状要求结果形状
的列数 的长度 维向量
的列数 的行数
两者形状完全相同同形状
无

先看形状,再算数值。 大多数实现错误在形状这一步就能抓到。

4.3 只有方阵谈得上「同一空间里的算子」

时输入输出都是 ,才能问「变换有没有逆」「有没有不被转向的方向」——这是第 3.4 节与第 6.1 节的前提。 时逆矩阵不存在,只能谈左逆或右逆。

5. 例子

5.1 手算:一份阵列,三种读法

先回到一张最小的表——用户评分,它最容易一眼看懂四种读法。取 。

数据表:2 个用户、3 个特征。小林的特征是 ,小周是 ;第一列「动作片」是 。

线性映射:。取 ,按列组合:

列向量组:、、,都在 内,任意两个不共线,所以 ,。

验证恒等式:

完全对上。 不是方阵,所以它是线性映射,不是 上的算子。

5.2 场景:权重矩阵的四种读法

一个 的线性层权重:数据表上是 4096 个输出神经元、每个 4096 个连接;线性映射是 ;算子是隐藏状态的一次混合;列向量组是 4096 个「输出方向」。参数量 ,只由形状决定。

5.3 场景闭环:一次标定,

输入: 的传感器,共 个像素;30 张棋盘格标定图,每张检出 个角点,共 个对应点。待求只有四个数:(简化模型,暂不计畸变)。

计算:每个角点给两个方程,共 个方程求 4 个未知数——超定,用最小二乘(第 4.4 节)。法方程是 的,一次求逆约 次乘加,可以忽略。真正的开销在角点检测: 个像素各扫一个 窗口,约 次乘加。

输出:四个数,外加一个验收指标——重投影误差。把 1620 个已知三维点用标定出的 投回图像,和检出的角点比距离;均方根小于 0.5 像素算通过,超过 1 像素判定失败、重拍。

成本:一帧 灰度图按 fp32 存是 MB,30 帧就是 1.5 GB,手机端必须一帧算完就丢一帧。那 次乘加,在 NPU 的 10 TOPS 上不到 1 ms,在 CPU 上要 1–2 s——「标定要等三秒」的真正来源是它,不是矩阵运算。

失败条件与兜底:

  • 角点太集中:30 张图全是正对棋盘,角点几乎共面且挤在画面中央。此时 与「棋盘离镜头多远」不可分离(尺度歧义),标出的 可以任意大而复现误差一样小。兜底:要求棋盘覆盖四角,且至少 3 个倾斜姿态。
  • 主点与畸变耦合:带畸变模型时 与径向畸变系数 高度相关,条件数能到 ,每次标定结果都不一样。兜底:固定主点为图像中心,只标 和 。
  • 温漂:镜头模组发热会让焦距变化千分之几, 漂 3 个像素。兜底:出厂标定 + 运行时用陀螺仪做在线微调,这已经是防抖的常规做法。

6. 常见误区

  1. 误区:矩阵「行是输入、列是输出」。 纠正: 中 的列对应输入维度,行对应输出维度。代码 x @ W.T 看起来像行向量在乘,数学上仍是 。

  2. 误区: 矩阵有 个列向量。 纠正:有 个列向量,每个长 ;有 个行向量,每个长 。行列数说反是最高频的错误。

  3. 误区:矩阵的「形状」只是显示格式。 纠正:形状决定能做哪些运算、参数量、显存与计算量。形状错,数值再对也没有意义。

7. 概念网络

8. 通往大模型:权重矩阵到底存了什么

出现位置:Transformer 里几乎每个可学习参数都是矩阵。线性层 ,embedding 表 ,注意力投影 。

形状与运算:输入 ,线性层算 ,其中 。以 、FFN 中间维 为例,一个升维矩阵有 个参数。

四种身份各司其职:数据表按 [out, in] 存,方便按输出神经元取行;线性映射表示每个 token 独立做同一个变换;算子表示残差流维度不变时的 变换;列向量组表示 的第 列是「输入第 维对全部输出的影响向量」。

可检验结论:把 的行列读反,参数量不变,但输出完全不同;W @ x 与 x @ W.T 必须得到同一个向量,可用 NumPy 随机生成 、 验证。

如果这一步算错,用户会看到什么现象:行列读反,输出会向某个方向「塌缩」,表现为语义彻底乱掉,而不是轻微退化。把 embedding 表按 [D, V] 而不是 [V, D] 存,查表时按 token id 取到的其实是「所有 token 在同一个维度上的值」,模型会退化成反复输出高频词——现象像「模型变傻了」,根因却是形状。反过来,按数据表理解、把特征放在行上,X @ W 与 X @ W.T 只差一个转置,代码不报错、loss 也能降一点,但收敛明显变慢;这类「不报错的错」最难查,因为形状检查全通过了。

9. 练习

  1. 概念:用四种身份各写一句话描述单位阵 。哪一种身份下「不变」最直观?
  2. 计算:,写出三个列向量、形状,并计算 与 。
  3. 计算:把上面的 当数据表,2 行 3 列分别可能代表什么?转置成 后四种读法各有什么变化?
  4. 场景:线性层输入 768 维、输出 3072 维,权重形状是什么?参数量是多少?
  5. 开放:为什么矩阵的列数等于输入维数?若代码写成 x @ W 而不是 x @ W.T,形状检查会怎样提示你?
参考答案
  1. 数据表:3 个样本、3 个特征,对角线为 1;线性映射:;算子:恒等变换,每个点不动;列向量组:三个标准基向量。算子身份下「不变」最直观。
  2. 列向量 、、;形状 ;;。
  3. 2 个样本、3 个特征(两个用户对三类电影的评分)。转置后是 3 个样本、2 个特征;映射变成 ;列向量变成 3 维、只有 2 个;不再是算子(非方阵)。
  4. 形状 ;参数量 。
  5. 要求 的列数等于 的长度,列的每个分量对应一个输入维度。写 x @ W 时,要求 x 的最后一维等于 W 的行数;形状报错会直接指出维度不匹配。

10. 一页速记

  • 矩阵 : 行、 列, 个数。
  • 物理意义 / 现实对应:矩阵是「一台把输入坐标换成输出坐标的机器」;现实里像相机的内参矩阵—— 把「米」换算成「像素」,四种身份就是四种不同的问法。
  • 四种身份:数据表、线性映射 、算子()、 个列向量。
  • :第 列是第 个基向量的像。
  • 形状先于数值:。
  • 权重矩阵按 [out, in] 存,参数量由形状直接决定。

11. 参考文献与致谢

这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。

  • 凯莱(Arthur Cayley, 1858):A Memoir on the Theory of Matrices。第一次把矩阵当作可加、可乘、可求逆的独立对象来研究,本页「矩阵不是一堆数,而是一张有代数的表」的读法由它开端。Phil. Trans. R. Soc. (1858)
  • 西尔维斯特(James Joseph Sylvester, 1850):Additions to the Articles in the September Number of this Journal, “On a New Class of Theorems,” and on Pascal’s Theorem。首次把矩形阵列称为 matrix(行列式由它「生成」),本页 §2.1 的术语即源于此。Phil. Mag. (1850)
  • Horn & Johnson(2012):Matrix Analysis(第 2 版)。把「线性变换 ↔ 矩阵」的对应写成标准语言,本页「线性映射」与「算子」两种身份以它为准。Cambridge University Press

下一篇 → 3.2 矩阵乘向量:线性映射

返回 M03 导览去练习场

随堂测 · 4 题

单选难度 1第 1 / 4 题
把 当数据表读,正确的解释是?

源文件:03-矩阵与线性映射/01-矩阵的四种身份.md

输入关键词开始搜索