跳到主要内容

进计算机的东西只有一样:一串按顺序排好的数。 这一章讲这串数能被怎么摆弄。

把一张图、一句话变成一串数

1. 这一章讲什么

三件事: 一张图、一句话怎么变成机器能算的东西;这串数之间能比什么; 以及那些「把一串数变成另一串数」的机器长什么样、能被拆成哪几个动作。

它在全书链条里的位置: 这是地基里最底下的一层。 后面三十多章里,每一次「输入」「输出」「参数」都是这一章说的那串数, 每一层网络都是这一章说的那台机器。第 25 章把一堆数压成几个数、第 16 章判断循环网络会不会训崩、 第 38 章生成图像时算密度怎么变——用的全是这一章最后三节的东西。

不需要任何基础。 原书把这部分放在附录,但从正文第二章起就在承重使用1, 所以我们把它挪到了最前面。

2. 顶层全景

一串数(向量) ──量长度──▶ 范数:这串数"多大"

├──和另一串数比──▶ 点积:方向上有多合拍(为 0 就是互不相干)

└──喂给一台机器──▶ 矩阵:把它搬到另一个空间去

┌────────────┼────────────┐
▼ ▼ ▼
哪些方向只 拆成三个 体积被
被拉长不转向 简单动作 放大几倍
(特征值/向量) (奇异值分解) (行列式)

一句话链条: 数据是一串数 → 机器是一张数表 → 机器作用在数据上就是把它搬个地方 → 搬的效果可以拆成「转一下、各方向拉伸不同倍数、再转一下」。后面所有模型都在这条链上。

3. 一串数:从一张灰度图说起

一张 28×28 的黑白手写数字图,在计算机里就是 784 个亮度值。 把它们按固定顺序排成一列,就得到一个 784 项的数组。 这种「一组按顺序排好的实数」叫向量(Vector)2——排好的顺序是它的一部分, 换了顺序就不是同一个东西了。

一个向量里有几项,就说它是几的。上面那张图是 784 维。 一个芒果如果只记颜色、大小、产地三样,那就是 3 维。维数就是「你记了几件事」。

与之相对,单独一个实数叫标量(Scalar)——它只有大小,没有方向。 体重 62.5、今天的气温 26.5,这些都是标量。

约定一件事,后面全书都用: 本书的向量默认是列向量,竖着写; 一批样本堆成一张表时,每一列是一个样本3。 这个约定看着无关紧要,但它决定了后面每个公式里矩阵和向量谁乘谁,不统一就会全乱。

还有一种向量后面会反复出现:只有一项是 1、其余全是 0。 它叫 one-hot 向量4,名字来自数字电路里的一种状态编码——任何时刻只有一位是"热"的。 你要表示「这是第 3 类」,就让第 3 项为 1,别的都是 0。

下标更多的表也有名字。 一张彩色图片是「高 × 宽 × 三个颜色通道」, 需要三个下标才能定位一个数;一批彩色图片再加一个下标。

这种下标个数超过 2 的数组叫张量(Tensor)5。 向量是一维的张量,矩阵是二维的,再往上就直接说几维张量。

顺带把一个后面常见的说法也钉住:高维就是「这串数很长」, 一张 784 项的图、一个几千项的表示,都算高维。高维带来的麻烦贯穿全书。

4. 这一串数有多长

问题: 784 个数摆在这儿,怎么说它「大」还是「小」?

给一串数量长度的规矩叫范数(Norm)6。它不止一种,常用的有三种,分别对应三种关心的事:

向量 v = [3, -4]

ℓ1 范数 = |3| + |-4| = 7 ← 所有项的绝对值加起来
ℓ2 范数 = √(3² + 4²) = 5 ← 勾股定理,几何上的直线距离
ℓ∞ 范数 = max(|3|, |-4|) = 4 ← 只看最大的那一项

ℓ2 范数就是我们平常说的「长度」,几何上把向量看成从原点出发的一条有向线段, 它的长度就是这个数7。这本书里也叫它「模」。 一个向量的 ℓ2 范数还可以写成「它和自己按下一节那种方式乘一次,再开方」。

这三种量法为什么值得分开记? 因为后面第 19 章要给参数「上税」的时候, 用 ℓ1 还是 ℓ2 结果完全不同:ℓ1 会把一堆参数直接压成 0(留下少数几个非零的), ℓ2 只是让所有参数都变小一点。同一件事,换把尺子就换个结果。

5. 两串数有多像

问题: 两个芒果,一个是 [红=0.9, 大小=8],一个是 [红=0.85, 大小=7.6],怎么说它们像?

逐项去比很麻烦。有个办法一个数就概括了:把两个向量对应位置的数相乘,再全部加起来。 这叫点积(Dot Product)8,也叫内积。

a = [0.9, 8] b = [0.85, 7.6]
a·b = 0.9×0.85 + 8×7.6 = 0.765 + 60.8 = 61.565

点积在说什么? 它同时混了两件事:两个向量各自有多长,以及它们的方向有多合拍。 如果两个向量方向一致,点积大;方向相反,点积为负; 如果点积正好是 0,就说这两个向量正交9——它们在彼此的方向上完全没有分量, 互不相干。这是全书里「无关」最常用的形式化说法。

想只看方向、不受长度影响,就把点积除以两个向量的长度,得到一个 −1 到 1 之间的数。 这个数叫余弦相似度(名字来自它正好等于两个向量夹角的余弦值): 1 表示同向,0 表示正交,−1 表示反向。 后面第 27 章比较两段文本像不像、第 33 章从一堆资料里找相关段落,用的都是它。

6. 矩阵:一台把向量搬到另一个空间的机器

先看现象: 你有一个 784 维的向量(那张手写数字图),想把它变成一个 10 维的向量 (十个数字各自的得分)。这需要一台机器:进去 784 个数,出来 10 个数。

最简单的一种机器是这样的:输出的每一项,都是输入所有项的加权和。 这里的权重(每个输入该乘上多大的一个系数)决定了输出怎么由输入拼出来。 第 1 项输出用一套,第 2 项输出用另一套……10 项输出就要 10 套,每套 784 个。

把这 10×784 个数摆成一张表,就是一个矩阵(Matrix)10——一个 M 行 N 列的矩形数表。

先说清一个后面天天用的词:映射就是「从一堆东西到另一堆东西的对应规则」, 给一个输入必然给出一个输出。函数是映射,一层网络是映射,整个模型也是映射。

这台机器有一个关键性质:它对加法和缩放「透明」。 先把两个输入相加再喂进去,和分别喂进去再把结果相加,答案一样; 输入放大 3 倍,输出也正好放大 3 倍。满足这两条的映射叫线性映射11

矩阵和线性映射是一回事:每个矩阵定义一个线性映射,每个线性映射都能写成一个矩阵。

现实中的一层网络还要在加权和之后加一个固定的偏移量,写成 y = Ax + b这种「线性映射再加一个平移」叫仿射变换12。 它保持共线不变、比例不变、平行不变——直白说就是:它会旋转、拉伸、平移整个空间, 但不会把直线掰弯。 这也正是第 10 章要给每层网络后面加一道弯的原因—— 那道弯的正式说法叫非线性:输出不再是输入的等比例放大。 光靠仿射变换,摞几十层还是掰不弯一条直线。

6.1 三种要认得的矩阵运算

乘积:两台机器串起来。先用 B 搬一次,再用 A 搬一次,等于用一台叫 AB 的机器搬一次。 这就是矩阵乘法的全部来历——它不是凭空规定的,是「复合」这件事的记账方式。 注意它不能交换:先转再拉,和先拉再转,结果通常不同。

转置:把数表沿对角线翻过来,第 m 行第 n 列的数搬到第 n 行第 m 列,记作 Aᵀ13。 第 11 章把差错往回送的那一步用的正是转置——正向用 A,反向就用 Aᵀ

Hadamard 积:两个同样大小的表,对应位置各自相乘,记作 14。 这不是矩阵乘法,它就是逐个元素乘。第 11 章那条把差错往回送的公式里那个 ,说的就是这件事。 那套往回送的办法叫反向传播:让差错沿着网络倒着走一遍,顺路把每个旋钮该挪多少算出来。

还有一个后面要用两次的:两个向量的外积——一个 M 项的和一个 N 项的, 两两相乘摆成一张 M×N 的表15。 第 11 章算权重该挪多少时,结果正好是「那一层的差错和这一层输入的外积」。

7. 有些方向只被拉长,不被转向

先看现象: 拿一台机器 A = [[2, 0], [0, 1]] (横向拉两倍、纵向不动)去作用在不同向量上。 向量 [1, 0] 变成 [2, 0]——方向没变,只是长了一倍。 向量 [1, 1] 变成 [2, 1]——方向歪了。

大多数方向会被转歪,但总有一些方向不会。 满足 Av = λv 的那个方向 v,叫矩阵 A 的特征向量; 那个倍数 λ 叫它的特征值16。 用 A 去作用在它自己的特征向量上,得到的新向量只是在原方向上被缩放了 λ 倍17

一个必须先说清的重名(这是我们的裁决): 这里的「特征」是数学上的老译法,和第 04 章开始讲的「一个芒果的颜色、大小」那个特征 是两件毫无关系的事,只是碰巧用了同一个汉字。 本书里「特征向量」这个名字只指 Av = λv 里那个方向不变的方向; 样本的各项性质排成的那一串数,本书一律叫「样本向量」,不叫特征向量。

为什么这件事重要? 因为它回答了「反复用同一台机器会发生什么」。 把 A 连用 k 次,在特征向量方向上就是乘了 λ 的 k 次方。 λ 稍大于 1,几十次之后就是天文数字;λ 稍小于 1,几十次之后就趋近于 0。

所有特征值里绝对值最大的那一个,叫这台机器的谱半径。 第 16 章要判断一个循环网络能不能记住二十步之前的事,判据就是这个数: 大于 1 倾向于爆炸,小于 1 倾向于消失18。这一节现在读着抽象,那一章会拿真数字走一遍。

有一类矩阵格外规矩:实对称矩阵(沿对角线翻过来等于自己)。 它的特征值全是实数,而且不同特征值对应的特征向量互相正交19。 第 25 章的主成分分析、第 23 章的图分析,靠的都是这条性质—— 因为那两章要分解的矩阵都是实对称的。

8. 任意一台机器都能拆成「转—拉—转」

问题: 特征值那一套只对方阵有话说。可现实里的机器多半不是方的 (784 进、10 出),怎么办?

奇异值分解(Singular Value Decomposition,常简称 SVD)对任何形状的矩阵都成立20。 它说:任何一台机器都能拆成三个简单动作21:

A = U · Σ · Vᵀ

Vᵀ ── 在原空间里转一下(不改变任何向量的长度)
Σ ── 沿着各个坐标轴分别拉伸不同的倍数;维数不够就补零,多了就砍掉
U ── 在新空间里再转一下

Σ 对角线上那些拉伸倍数叫奇异值,按从大到小排好。 非零奇异值有几个,这台机器就只有几个方向真正起作用——这个个数叫矩阵的2223。 一台 784 进 10 出的机器,秩最多是 10:再多的输入方向也被压到同一批输出上了。

把小的奇异值直接扔掉,只留前 K 个,得到的就是一个低秩**:秩低, 也就是真正起作用的方向少**24。 这样得到的近似不能完全还原原来那台机器,但能用少得多的数把主要效果留住。

这就是压缩的共同原理,也是第 25 章那个「把一堆数压成几个数」的做法 (它叫降维)、以及第 28 章那个「只训练两个小矩阵」的省钱办法的共同来源。

9. 面积被拉伸了几倍

先看现象: 一台机器把单位正方形(面积 1)搬过去之后,变成了一个平行四边形。 它的面积是多少?

这个「体积被放大的倍数」就是行列式25。 对 A = [[2, 0], [0, 1]],单位正方形被拉成 2×1 的长方形,行列式是 2。

它为 0 意味着什么? 意味着这台机器把整个空间压扁了—— 二维压成一条线,体积变成 0。压扁之后信息就找不回来了,所以: 行列式等于 0 当且仅当这台机器不可逆26。 「可逆」就是存在另一台机器能把它搬回去,记作 A⁻¹

第 38 章讲流匹配时会用到行列式的另一面: 当一个映射把空间局部拉伸了 k 倍,那里的概率密度就要相应地缩小 k 倍—— 因为概率的总量守恒。行列式正是那个 k。

10. 三类要认得的矩阵

这三类不是分类学,是后面每一章都在用的三件工具。

对角矩阵:主对角线之外全是 027。 它作用在一个向量上,就是把各项分别乘一个数——逐维缩放,各维之间毫不干涉28。 第 11 章那个「每一项各自乘上自己那道弯的斜率」的步骤,本质就是乘一个对角矩阵。

正交矩阵:它的逆等于它的转置29。 它作用在向量上只旋转,不改变长度——上一节 SVD 里那两个"转一下"就是它。 第 18 章的正交初始化正是靠这条性质:让差错在层与层之间传递时长度不变。

正定矩阵:对任何非零向量 x,都有 xᵀAx > 030xᵀAx 这种式子叫二次型,你可以把它读成「用 A 度量出来的、x 的平方长度」。 正定就是「这个平方长度永远为正」,也就是「这个碗永远朝上」。 第 02 章判断一个平点是不是谷底,判据就是那里的二阶导数矩阵是不是半正定的。

11. 主走查:一个二维向量走完全程

输入: v = [3, 4]。机器 A = [[2, 0], [0, 1]]。这两个数是我们为演示挑的,不是书里的例子。

走到哪一步算什么结果
量长度ℓ2 范数 √(3²+4²)5
ℓ1 范数 |3|+|4|7
ℓ∞ 范数 max(3, 4)4
和 [1, 0] 比点积 3×1 + 4×03
余弦 3 ÷ (5×1)0.6
和 [4, −3] 比点积 3×4 + 4×(−3)0,正交
被 A 搬一次Av = [2×3, 1×4][6, 4]
A 的特征值解 Av = λvλ₁ = 2(方向 [1,0])、λ₂ = 1(方向 [0,1])
A 的谱半径最大特征值的绝对值2
A 的行列式2 × 12,面积翻倍
A 的秩非零奇异值个数2,满秩,可逆
A 连用 10 次[1,0] 方向 2¹⁰、[0,1] 方向 1¹⁰1024 倍 与 1 倍

最后一行就是第 16 章那整章的病因: 同一台机器反复作用,不同方向的命运会越差越远, 而且是成倍地差。 把 2 换成 0.9,连用 20 次之后只剩 0.12;换成 1.1,连用 20 次就是 6.7 倍。 中间那一点点差别,二十步之后差了五十多倍。

12. 作者的判断与证据

书里给了证据的:

  • 实对称矩阵一定有 N 个互相正交的单位特征向量19 —— 这是有严格证明的线性代数定理, 书里直接陈述、不证;
  • 非零奇异值的个数等于矩阵的秩23 —— 同上,标准结论;
  • 奇异值分解等价于「转—拉—转」三个动作21 —— 书里给的是几何解释,不是证明, 但这个解释和公式完全对得上。

书里说的是约定,不是定理:

  • 「向量默认是列向量、数据矩阵按列堆叠样本」3 —— 这是这本书自己的记号约定。 换一本书可能按行堆叠,那时所有公式里的转置位置都要跟着变。 读别的资料时对不上,先查这个约定,十有八九是这里出的问题。

书里坦白的:

  • 附录开头明确说这些工具是「本书后续会反复使用的数学工具」的汇总, 要深入必须看专门教材——它给的是够用的部分,不是完整的线性代数。

13. 边界与局限

这一章不讲怎么算。 特征分解、奇异值分解的数值算法(怎么在计算机上稳定地算出来) 完全不在书里,那是数值线性代数的内容。

不讲复数域。 全书默认实数,而一般矩阵的特征值可能是复数; 书里只在实对称矩阵那里保证了实数。

不讲那个集合本身的公理化定义。 这里说的向量空间就是「一堆向量, 加起来还落在里面、乘个数也还落在里面」的那种集合。 书里明说「本书主要讨论有限维欧氏空间,因此更关注其直观形式」。

矩阵范数只给了两个。 Frobenius 范数把矩阵所有元素平方求和再开方,第 10 章会用到; 谱范数只提了名字,没展开。

迹和 Kronecker 积书里给了定义,但在后面正文里几乎不承重。 我们只在第 37 章需要的那一处就地解释,不在这里占一张生面孔。

14. 可带走的

  1. 进计算机的一切都是一串按顺序排好的数。 图片、句子、一个人的体检单,区别只在这串数多长、怎么来的;
  2. 量长度有三种规矩:ℓ1 加绝对值、ℓ2 是勾股定理、ℓ∞ 只看最大项。 后面「给参数上税」时选哪一种,直接决定是只剩少数几个非零的、还是所有的都变小一点;
  3. 点积为 0 就是正交,也就是互不相干。 这是全书里「无关」最常用的说法;
  4. 矩阵就是线性映射,矩阵乘法就是把两台机器串起来。 它不能交换,因为「先转再拉」和「先拉再转」不一样;
  5. 正向用 A,反向就用 Aᵀ。 记住这一条,第 11 章的反向传播就不神秘了;
  6. 特征向量是那些只被拉长、不被转向的方向,特征值是拉长的倍数。 数学上的这个「特征」和「样本的特征」毫无关系;
  7. 谱半径大于 1 会爆炸、小于 1 会消失。 反复作用同一台机器时,这是唯一要看的数;
  8. 任何矩阵都能拆成「转—拉—转」,奇异值就是中间那些拉伸倍数。 扔掉小的就是低秩近似,这是压缩和降维的共同原理;
  9. 行列式是体积的放大倍数,为 0 就是把空间压扁了、找不回来了;
  10. 对角矩阵逐维缩放、正交矩阵只转不拉、正定矩阵让二次型恒正——后面每一章都在用这三件事。

15. 原文地图

主题原书章原文位置
向量、维度、标量附录 A 线性代数text/18-apx.txt:26(搜「有序数组」)
记号约定与列向量附录 A 线性代数text/18-apx.txt:14(搜「按列堆叠样本」) · text/18-apx.txt:12(搜「张量用花体字母表示」)
one-hot 向量附录 A 线性代数text/18-apx.txt:137(搜「只有一个元素为 1」)
范数附录 A 线性代数text/18-apx.txt:97(搜「一个表示向量」) · text/18-apx.txt:116(搜「有向线段」)
内积与正交附录 A 线性代数text/18-apx.txt:84(搜「内积」) · text/18-apx.txt:90(搜「内积为 0」)
线性映射与矩阵附录 A 线性代数text/18-apx.txt:145(搜「线性映射」) · text/18-apx.txt:162(搜「矩形阵列」)
仿射变换附录 A 线性代数text/18-apx.txt:194(搜「仿射变换」)
转置、Hadamard 积、外积附录 A 线性代数text/18-apx.txt:234(搜「转置」) · text/18-apx.txt:239(搜「Hadamard 积」) · text/18-apx.txt:260(搜「外积」)
秩与行列式附录 A 线性代数text/18-apx.txt:302(搜「列秩」) · text/18-apx.txt:285(搜「有向面积或体积」) · text/18-apx.txt:357(搜「当且仅当该方阵不可逆」)
对角、正交、正定矩阵附录 A 线性代数text/18-apx.txt:328(搜「主对角线之外」) · text/18-apx.txt:365(搜「逆矩阵等于其转置矩阵」) · text/18-apx.txt:363(搜「正定矩阵」)
特征值与特征向量附录 A 线性代数text/18-apx.txt:381(搜「特征值」) · text/18-apx.txt:383(搜「长度上缩放」) · text/18-apx.txt:388(搜「实对称矩阵」)
奇异值分解附录 A 线性代数text/18-apx.txt:412(搜「奇异值分解」) · text/18-apx.txt:430(搜「3 个简单操作」) · text/18-apx.txt:446(搜「截断的奇异值分解」)
谱半径与长程依赖第6章 循环神经网络text/07-ch06.txt:610(搜「谱半径来刻画」)

Footnotes

  1. 出处:「附录 数学基础」第 5 段(text/18-apx.txt:5,搜「反复使用的数学工具」)。 原书自己写明这份附录是「本书后续会反复使用的数学工具」的汇总,并强调这一版 「更强调这些工具与深度学习模型、训练和推理过程的联系」。

  2. 出处:「附录 数学基础」第 26 段(text/18-apx.txt:26,搜「有序数组」)。 原文:「向量(Vector)是由一组实数组成的有序数组,同时具有大小和方向。」

  3. 出处:「附录 数学基础」第 14 段(text/18-apx.txt:14,搜「按列堆叠样本」)。 这是本书自己的记号约定,不是数学规定。 2

  4. 出处:「附录 数学基础」第 137 段(text/18-apx.txt:137,搜「只有一个元素为 1」)。 原书还交代了名字的来历:源自数字电路中的状态编码。

  5. 出处:「附录 数学基础」第 12 段(text/18-apx.txt:12,搜「张量用花体字母表示」)。

  6. 出处:「附录 数学基础」第 97 段(text/18-apx.txt:97,搜「一个表示向量」)。

  7. 出处:「附录 数学基础」第 116 段(text/18-apx.txt:116,搜「有向线段」)。

  8. 出处:「附录 数学基础」第 84 段(text/18-apx.txt:84,搜「内积」)。 原书把点积、内积、标量积当成同一件事的三个名字。

  9. 出处:「附录 数学基础」第 90 段(text/18-apx.txt:90,搜「内积为 0」)。

  10. 出处:「附录 数学基础」第 162 段(text/18-apx.txt:162,搜「矩形阵列」)。

  11. 出处:「附录 数学基础」第 145 段(text/18-apx.txt:145,搜「线性映射」)。 原书还在边注里点明:从一个空间到它自身的线性映射称为线性变换。

  12. 出处:「附录 数学基础」第 194 段(text/18-apx.txt:194,搜「仿射变换」)。 原书列了仿射变换的四条不变性:共线性、比例、平行性、凸性。

  13. 出处:「附录 数学基础」第 234 段(text/18-apx.txt:234,搜「转置」)。

  14. 出处:「附录 数学基础」第 239 段(text/18-apx.txt:239,搜「Hadamard 积」)。 原书也叫它逐点乘积。

  15. 出处:「附录 数学基础」第 260 段(text/18-apx.txt:260,搜「外积」)。 原书边注特别提醒:符号 ⊗ 既可能表示 Kronecker 积也可能表示外积,要看上下文。

  16. 出处:「附录 数学基础」第 381 段(text/18-apx.txt:381,搜「特征值」)。

  17. 出处:「附录 数学基础」第 383 段(text/18-apx.txt:383,搜「长度上缩放」)。

  18. 出处:「第6章 循环神经网络」第 610 段(text/07-ch06.txt:610,搜「谱半径来刻画」)。 原文:「更精确的分析可通过权重矩阵 U 的谱半径来刻画:若其最大特征值的模大于 1, 则梯度倾向于爆炸;若小于 1,则倾向于消失。」

  19. 出处:「附录 数学基础」第 388 段(text/18-apx.txt:388,搜「实对称矩阵」)。 2

  20. 出处:「附录 数学基础」第 412 段(text/18-apx.txt:412,搜「奇异值分解」)。

  21. 出处:「附录 数学基础」第 430 段(text/18-apx.txt:430,搜「3 个简单操作」)。 2

  22. 出处:「附录 数学基础」第 302 段(text/18-apx.txt:302,搜「列秩」)。 原书指出行秩和列秩总相等,所以统称为秩。

  23. 出处:「附录 数学基础」第 436 段(text/18-apx.txt:436,搜「数量等于矩阵的秩」)。 2

  24. 出处:「附录 数学基础」第 446 段(text/18-apx.txt:446,搜「截断的奇异值分解」)。 原书写明它「只能近似重构原始矩阵」,常用于降维、主方向分析和表示压缩。

  25. 出处:「附录 数学基础」第 285 段(text/18-apx.txt:285,搜「有向面积或体积」)。

  26. 出处:「附录 数学基础」第 357 段(text/18-apx.txt:357,搜「当且仅当该方阵不可逆」)。

  27. 出处:「附录 数学基础」第 328 段(text/18-apx.txt:328,搜「主对角线之外」)。

  28. 出处:「附录 数学基础」第 339 段(text/18-apx.txt:339,搜「的乘积为一个」)。 原书给出对角矩阵乘向量等于按元素乘积。

  29. 出处:「附录 数学基础」第 365 段(text/18-apx.txt:365,搜「逆矩阵等于其转置矩阵」)。

  30. 出处:「附录 数学基础」第 363 段(text/18-apx.txt:363,搜「正定矩阵」)。