跳转至

讲解稿 · 第01章 第05节 · 基与对偶

口播时长:约 15–20 分钟|建议语速:中速偏慢,遇到公式停顿两拍


开场钩子

嘿,先问你一个问题。

你打开手机地图,输入"星巴克",屏幕上跳出一个点。你朋友也打开她的地图,输入同一家店,屏幕上也跳出一个点。你们俩看到的,是同一家咖啡馆。

可如果你俩打电话商量怎么走过去——你说"往东三个街区,往北两个街区",你朋友却说"沿我东北方向走两步半,再沿西北方向倒着走半步"——听起来完全是两回事对不对?但你们要去的,明明就是同一个地方。

这,就是这一节要讲的东西:同一个向量,可以有无穷多种坐标。而在这些坐标背后,藏着一整套"翻译字典"——它的名字叫基,它的影子叫对偶。听着抽象?别急。等你听完这十几分钟,你会明白,为什么 PCA 要"换基",为什么神经网络里的注意力机制本质是一次"查询",还有——为什么很多人第一次学线性代数会栽在 \(P\) 和 \(P^{-1}\) 这两个符号上。

扶稳了,我们开始。


第一段 · 什么是基

我们先把最朴素的问题说清楚:什么是基?

一句话:基是搭起一个向量空间的最小骨架。你可以把它想成乐高的基础颗粒——通过缩放它、把它们加起来,你就能拼出这个空间里的任何一个向量。而且——注意"而且"两个字——没有一块是多余的。

一组向量要成为基,必须同时满足两件事:

  • 第一,线性无关。翻译成人话就是,这些向量里没有哪一个能被其他人"凑"出来。每一个都贡献一个真正新的方向。
  • 第二,能张成整个空间。也就是说,空间里任何一个向量,都能被它们的线性组合表达出来。一个不漏。

一组基里向量的个数,就是这个空间的维度。\(\mathbb{R}^2\) 里两个基向量就够,\(\mathbb{R}^3\) 里要三个,依此类推。

最省事、最熟悉的一组基,叫标准基——沿着坐标轴的那些单位向量。在 \(\mathbb{R}^2\) 里就是 \(\hat{\mathbf{i}} = (1, 0)\) 和 \(\hat{\mathbf{j}} = (0, 1)\)。你写向量 \((3, 2)\),其实就是在偷偷地说 \(3\hat{\mathbf{i}} + 2\hat{\mathbf{j}}\)。那个 3 和 2,就是它在这组基下的坐标。

但标准基不是唯一的基。在 \(\mathbb{R}^2\) 里,\((1, 1)\) 和 \((-1, 1)\) 一样能撑起整个平面。它俩线性无关,也能张成,所以合法。只不过——同一个向量在这组新基下的坐标,会不一样。

暂停思考一下:如果我告诉你 \((1, 1)\) 和 \((2, 2)\) 也是一组基,你信吗?想清楚再往下听。

——不信对吧?因为 \((2, 2)\) 就是 \(2 \cdot (1, 1)\),两者根本在同一条线上,线性相关,第二个是冗余的。你两个向量都被困在一条直线上,怎么可能张成整个平面?


第二段 · 换基与咖啡馆

好,现在真正的戏来了:基变换。

回到咖啡馆的故事。你和朋友,同一家店,两种走法。

你的语言是标准基下的 \((3, 2)\)。她的两个"方向"是 \(\mathbf{b}_1 = (1, 1)\)(东北)和 \(\mathbf{b}_2 = (-1, 1)\)(西北)。她告诉你:"咖啡馆在 \((2.5, -0.5)\)",意思是"沿东北走 2.5 步,再沿西北倒着走半步"。

那怎么把她的话翻译回你的街道语言?照着她的配方走一遍就行:

\[2.5 \begin{bmatrix} 1 \\ 1 \end{bmatrix} - 0.5 \begin{bmatrix} -1 \\ 1 \end{bmatrix} = \begin{bmatrix} 3 \\ 2 \end{bmatrix}\]

一模一样的咖啡馆。照配方走一遍这个动作,其实就是矩阵乘法。你把她的基向量按列堆起来:

\[P = \begin{bmatrix} 1 & -1 \\ 1 & 1 \end{bmatrix}, \qquad P \begin{bmatrix} 2.5 \\ -0.5 \end{bmatrix} = \begin{bmatrix} 3 \\ 2 \end{bmatrix}\]

这个 \(P\),就叫基变换矩阵。它的列,是新基向量用旧坐标写出来的样子。这句话你记住——考试爱考,实战容易翻车。

那反过来呢?你手里拿着 \((3, 2)\),想翻成朋友的语言,怎么办?把配方倒回去——也就是乘 \(P^{-1}\):

\[P^{-1} \begin{bmatrix} 3 \\ 2 \end{bmatrix} = \begin{bmatrix} 2.5 \\ -0.5 \end{bmatrix}\]

什么都没动。向量本身、那家咖啡馆本身,没有移动过半步。移动的只是"描述它的语言"。\(P\) 和 \(P^{-1}\),就是两种语言之间的翻译字典。

暂停思考一下:如果你搞反了,用 \(P\) 而不是 \(P^{-1}\),会发生什么?很多 PCA 的 bug 就藏在这里。


第三段 · 对偶的登场

好,前面这半节其实相对好懂。接下来这段——对偶——会突然抽象起来。第一次听可能会有点扶不住,我们慢慢来。

我先埋一个问题:当你写 \(\mathbf{v} = (3, 2)\),那个"3"是从哪冒出来的?

它其实是一次测量的结果。第一个坐标在问:"这个向量 \(\mathbf{v}\) 里,有多少份 \(\hat{\mathbf{i}}\)?"第二个坐标在问:"有多少份 \(\hat{\mathbf{j}}\)?"

在咖啡馆的故事里也是一样。朋友那两个坐标,就是两个问题:"你沿我的东北对角线走了多远?""沿我的西北对角线走了多远?"

每一组基,都自带一组问题——每个方向一个。

而这些"问题"——每一个都是一个函数:吃进去一个向量,吐出来一个数。数学上给它一个名字,叫线性泛函 (linear functional)。"线性"两个字是说,这个函数尊重加法和数乘:

\[f(\mathbf{u} + \mathbf{v}) = f(\mathbf{u}) + f(\mathbf{v}), \qquad f(c\mathbf{v}) = c\,f(\mathbf{v})\]

翻译成人话就是——线性泛函是一把诚实的尺子。你把两根棒子并起来量,读数是两个读数相加;你把棒子拉长两倍,读数也翻倍。它不会撒谎,不会打折。

而所有可能的尺子的集合,就构成了一个新空间,叫对偶空间,记作 \(V^\ast\)。

对每一组基,都有一套配套的尺子——对偶基。对偶基里的 \(\mathbf{e}_i^\ast\) 只干一件事:回答"有多少份 \(\mathbf{e}_i\)"。一把校准良好的尺子,在它对应的那个基向量上读 1,在其他所有基向量上读 0。这条规则用克罗内克 δ 写起来最省字:

\[\mathbf{e}_i^\ast(\mathbf{e}_j) = \delta_{ij} = \begin{cases} 1 & i = j \\ 0 & i \neq j \end{cases}\]

就这一条小小的校准规则,就够了。剩下的事,线性会替它做完。你看 \(\mathbf{e}_1^\ast\) 读 \(\mathbf{v} = 3\mathbf{e}_1 + 2\mathbf{e}_2\):

\[\mathbf{e}_1^\ast(3\mathbf{e}_1 + 2\mathbf{e}_2) = 3\cdot 1 + 2 \cdot 0 = 3\]

它无视除自己之外的所有方向,只报告一个坐标。坐标本身,就是对偶基的读数。

暂停思考一下:如果这一段有点晕,很正常。你可以先记住一句话——基是被测量的对象,对偶基是测量的尺子。然后我们继续。


第四段 · 尺子藏在哪里

那么问题来了:这些"尺子"具体长什么样?

在 \(\mathbb{R}^n\) 里其实很朴素——每一个线性泛函,都不过是"一行数字,跟向量做点积"。而对于朋友那组基,我们不知不觉已经把她的尺子造出来了:把 \((3, 2)\) 翻成她的语言,我们乘的是 \(P^{-1}\)。而 \(P^{-1}\) 的每一行,就产出一个坐标。

也就是说——\(P^{-1}\) 的行,就是对偶基。

具体到咖啡馆:

\[P^{-1} = \frac{1}{2}\begin{bmatrix} 1 & 1 \\ -1 & 1 \end{bmatrix} \Rightarrow \mathbf{b}_1^\ast = (0.5, 0.5), \; \mathbf{b}_2^\ast = (-0.5, 0.5)\]

验算一下:\(\mathbf{b}_1^\ast \cdot (3, 2) = 0.5\cdot 3 + 0.5 \cdot 2 = 2.5\)。正好是朋友的第一个坐标。

而那个校准规则 \(P^{-1}P = I\),其实一直大大方方地摆在那儿——单位矩阵,就是克罗内克 δ 的表格版。尺子 \(i\) 遇到基向量 \(i\) 读 1,遇到别的读 0。


第五段 · 一个容易踩的坑

这里我必须给你打个预防针。

很多人会本能地猜:\(\mathbf{b}_1\) 对应的尺子,不就是 \(\mathbf{b}_1\) 自己吗?直接拿 \((1, 1)\) 和 \((3, 2)\) 做点积不就完了?

试试看:\((1, 1) \cdot (3, 2) = 5\)。可真正的坐标是 2.5——足足差了两倍。

用基向量自己做点积当尺子,只有在基是"单位正交"的时候才成立——也就是彼此垂直、长度为 1。标准基满足这个条件,所以 \(\mathbf{e}_1^\ast\) 恰好和 \(\mathbf{e}_1\) 长得一模一样,你怎么用都不出错。但对任何其他基,尺子都躲在 \(P^{-1}\) 的行里,不在基向量自己身上。

这个坑,是 PCA 代码里最常见的 bug 来源之一。你以为你在读坐标,实际上你在做一次错误的点积。


第六段 · 这些抽象东西到底有什么用

好,讲到这你可能想问:这么抽象的对偶空间,到底在 ML 里干什么?

三个例子:

第一,PCA。它就是在找一组新基——主成分——让数据在这些方向上方差最大。你把原始数据乘一个 \(P^{-1}\),就得到新坐标。对偶基在这里就是"提问的方向":这个数据在第一主成分上得几分?在第二主成分上得几分?

第二,注意力机制。神经网络里的 attention,本质就是让一组向量去"查询"另一组。Query 和 Key 做点积——这就是一次对偶配对。一个向量当尺子,去测量另一个向量。

第三,点积的双重身份。仔细想想:每一个向量 \(\mathbf{u}\),都悄悄定义了一把尺子(用 \(\mathbf{u}\cdot\mathbf{v}\) 去测量 \(\mathbf{v}\));反过来,每一把尺子,也不过是和某个向量做点积。在有限维里,对偶空间就是原空间的镜像。这就是为什么你在书里到处看到点积——它同时扮演了两个角色。


一句话总结

基是搭坐标系的最小骨架,对偶基是配套的一把把尺子。\(P\) 换积木,\(P^{-1}\) 换尺子——这两位一起,撑起了 PCA、注意力,以及几乎所有你会在 ML 里遇到的线性变换。


结尾 · 三个反思问题,留给下一节

在你关掉这段音频之前,带走三个问题,自己想想:

  1. 如果一组基不是单位正交的,你直接拿基向量做点积当尺子,得到的读数会偏大还是偏小?跟什么量有关? 提示:想想 \((1,1)\) 的长度。

  2. PCA 里,主成分构成的那组基,是单位正交的吗?如果是,为什么你还需要区分 \(P\) 和 \(P^{-1}\)? 提示:正交矩阵的逆等于它的转置。

  3. 注意力机制里的 Query 和 Key,如果你把它们看成"向量"和"尺子",那 Value 在这个类比里扮演什么角色? 提示:尺子测完之后,测出来的数字是拿来干嘛的?

想好了,我们下一节——第 02 章——见。