跳转至

第 01 章 · 04 讲解稿 — 向量积

口播时长目标: 15–20 分钟 · 中文口播 · 第二人称叙述 建议语速: 240–260 字/分钟 配套原文: zh/第01章 - 向量/04. 向量积.md


【开场钩子】—— 大约 1 分半

你先别急着翻笔记,我问你一个问题:两个向量到底能不能"相乘"?

你可能会脱口而出:当然能,不就是点积嘛。可如果我再追问一句——你算出来那个数,到底是什么东西的度量? 是长度?是角度?还是它俩"合拍"的程度? 你要是一时答不上来,别慌,这一节我们就是要把这层窗户纸捅破。

而且我告诉你,乘法这件事,在向量世界里不止一种。你会见到三种典型玩法:一种把两个向量咬合成一个数,另一种把两个向量拧出一个垂直的新向量,还有一种把三个向量凑一块儿量出一个体积。它们不是数学家闲得没事发明的花样,而是分别在回答三个完全不同的问题:方向合不合拍、面积撑得多大、体积歪成什么样。

更关键的是——现在你手机上滑到的每一条推荐、每一条搜索结果、每一段大模型输出,底层几乎都在疯狂地做向量相乘。Transformer 里的注意力机制、embedding 检索、图像里的姿态估计、机器人抓取时的力矩计算……全都绕不开今天这几个式子。

所以这一讲你要拿走三样东西:点积的几何直觉、叉积的空间感,以及三重积告诉你的关于"共面"的秘密。走,开始。


【核心概念之一:内积是抽象蓝图】—— 大约 2 分钟

先给你打个预防针。教材里出现的第一个词往往不是"点积",而是"内积 (inner product)"。你别觉得这只是换个说法,这两个词的地位不一样。

内积是一个抽象的框架,点积是这个框架下最常见的一个具体实例。 你可以把内积理解成一个"合同":它规定,任何一种被称作"向量相乘"的操作,只要它满足三条铁律,就有资格戴上"内积"这顶帽子。这三条铁律是:

第一,正定性。向量跟自己做内积,结果必须非负,而且只有零向量做出来才是零。写成公式就是 \(\langle \mathbf{v}, \mathbf{v} \rangle \geq 0\),等号仅当 \(\mathbf{v} = \mathbf{0}\) 时成立。这一条直白地讲就是:一个东西跟自己的"契合度"不能是负的。

第二,对称性。\(\langle \mathbf{u}, \mathbf{v} \rangle = \langle \mathbf{v}, \mathbf{u} \rangle\)。你先说还是我先说,不影响结论。

第三,线性性。\(\langle a\mathbf{u} + b\mathbf{v}, \mathbf{w} \rangle = a\langle \mathbf{u}, \mathbf{w} \rangle + b\langle \mathbf{v}, \mathbf{w} \rangle\)。对加法和缩放都讲分配律。

你先记住这三条。等下我们看点积,你会发现它逐条兑现了这个合同。

暂停思考 ①: 你能不能自己想一个满足这三条的"奇怪"内积?比如给不同坐标加不同权重,像 \(\langle \mathbf{u}, \mathbf{v} \rangle = 2 u_1 v_1 + u_2 v_2\)——它算不算内积?如果算,它跟标准点积在几何上有什么区别?先在脑子里过一遍,再往下听。


【核心概念之二:点积——最亲民的那一版】—— 大约 3 分钟

现在说主角。点积 (dot product) 就是内积的"日常版",公式简单到你会怀疑人生:

\[\mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n\]

对应分量相乘,然后一股脑加起来。就这样。你在纸上五秒钟就能算完。

可这个数代表什么?这才是关键。点积藏着一个漂亮的几何等价式:

\[\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \, \|\mathbf{b}\| \cos(\theta)\]

看到这个式子,你就该品出味儿来了——点积其实是两根尺子的长度乘以它们夹角的余弦。而 \(\cos\theta\) 恰恰是衡量"方向对齐度"的天然指标。

我给你把三种极端情况摆出来,一次记牢:

  • 如果两向量同向,\(\theta = 0°\),\(\cos\theta = 1\),点积取最大值——它俩齐心协力,值拉满。
  • 如果两向量正交,\(\theta = 90°\),\(\cos\theta = 0\),点积等于零。这就是我们判断"垂直"最锋利的一把刀:只要点积为零,它俩就是正交的。
  • 如果两向量反向,\(\theta = 180°\),\(\cos\theta = -1\),点积为负——完全对着干。

还有一个小彩蛋:向量点乘自己,\(\mathbf{a} \cdot \mathbf{a} = \|\mathbf{a}\|^2\),直接给你长度的平方。所以范数其实是点积的副产品,这就把上一节的 \(\ell_2\) 范数和这一节的点积,一根线串起来了。


【直觉例子:投影就是影子】—— 大约 2 分钟

光记公式没意思,我给你一个画面。

你想象太阳正从垂直于向量 \(\mathbf{b}\) 的方向打光下来,\(\mathbf{a}\) 是一根斜着立在地上的杆子,那么 \(\mathbf{a}\) 在 \(\mathbf{b}\) 所在那条线上,会投下一段影子。这段影子有多长、指向哪里,就是所谓的投影 (projection):

\[\text{proj}_{\mathbf{b}}(\mathbf{a}) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{b}\|^2} \, \mathbf{b}\]

你别被这一坨吓到,拆着看:前面那个分数 \(\frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{b}\|^2}\) 是个标量,它告诉你影子有多长、方向正不正;后面乘上 \(\mathbf{b}\) 只是把这个长度贴回 \(\mathbf{b}\) 那条直线上。

投影这个概念,在机器学习里到处都是:最小二乘拟合是投影,PCA 是投影,注意力里 query 打到 key 上算权重也是投影。你脑子里只要留一个画面——太阳从垂直方向打光,影子的长度是多少——就够用一辈子。

顺着投影,还有一个高频词:余弦相似度 (cosine similarity)。把点积除以两个向量的模长,就把长度信息扔掉,只留下方向:

\[\cos(\theta) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \, \|\mathbf{b}\|}\]

得到一个 \([-1, 1]\) 区间的数。这在 NLP 里就是判断"两段文本 embedding 有多像"的标配。你搜索一句话,系统在向量库里找和你 query 余弦相似度最高的几条,就是所谓的语义检索。


【核心概念之三:叉积,反其道而行】—— 大约 3 分钟

到这儿点积讲完了,输入两个向量,输出一个数。你可能会问:能不能反过来玩,输入两个向量,输出一个新向量?能,这就是叉积 (cross product)。

叉积长这样:

\[\mathbf{a} \times \mathbf{b} = (a_2 b_3 - a_3 b_2, \; a_3 b_1 - a_1 b_3, \; a_1 b_2 - a_2 b_1)\]

先注意一件事:叉积只在三维空间里定义。点积你在几维都能玩,叉积就守着三维——这是它的地盘。为什么?因为叉积要求结果同时垂直于两个输入向量,而"同时垂直于两个向量"这件事,只有在三维里才有一个明确的方向;二维里根本没有第三个方向可去,四维以上垂直的方向又太多、无法唯一确定。

叉积的模长有个非常好的几何含义:

\[\|\mathbf{a} \times \mathbf{b}\| = \|\mathbf{a}\| \, \|\mathbf{b}\| \sin(\theta)\]

它等于两个向量张成的平行四边形的面积。你看这个式子,和点积长得像不像?点积是 \(\cos\theta\),叉积是 \(\sin\theta\)。这两个三角函数天然配对——\(\cos\) 衡量"对齐度",\(\sin\) 衡量"错开度"。所以点积和叉积不是竞争关系,是互补关系:一个告诉你两个向量有多合拍,另一个告诉你它们撑开了多大的面。

方向怎么定?右手法则:右手四指从 \(\mathbf{a}\) 卷向 \(\mathbf{b}\),大拇指所指的方向就是 \(\mathbf{a} \times \mathbf{b}\)。你现在可以伸出右手比划一下,别不好意思——物理学家、工程师、图形程序员,天天都在做这个动作。

叉积还有两个"个性":

  • 反交换律:\(\mathbf{a} \times \mathbf{b} = -(\mathbf{b} \times \mathbf{a})\)。换个顺序,方向反过来。跟点积那种"顺序无所谓"的温和脾气完全不同。
  • 平行向量的叉积是零向量。因为 \(\sin 0° = 0\),面积没了,自然没有唯一的垂直方向可以指。

暂停思考 ②: 你想一下——点积为零 意味着两个向量正交;叉积为零 意味着两个向量平行。为什么这两个"零"结论刚好反过来?对着上面的 \(\cos\) 和 \(\sin\) 公式再嚼一遍,你就明白了。


【公式推导:三重积告诉你的共面秘密】—— 大约 2 分钟

三个向量能玩什么花样?两种组合。

第一种,标量三重积:\(\mathbf{a} \cdot (\mathbf{b} \times \mathbf{c})\)。先叉后点。\(\mathbf{b} \times \mathbf{c}\) 得到一个垂直于 \(\mathbf{b}, \mathbf{c}\) 所在平面的向量,长度是平行四边形面积;再点乘 \(\mathbf{a}\),相当于让 \(\mathbf{a}\) 投影到这个"高的方向"上,面积乘以高,不就是体积吗?对,这个数就是三个向量张成的平行六面体的体积。

从这里你立刻能读出一个漂亮结论:如果 \(\mathbf{a} \cdot (\mathbf{b} \times \mathbf{c}) = 0\),说明体积为零,那三个向量共面——它们全躺在同一张平面上,根本撑不出立体。你以后判断三向量共面,别再手忙脚乱解线性方程组了,一个三重积搞定。

而且顺序可以循环轮换而不改变结果:

\[\mathbf{a} \cdot (\mathbf{b} \times \mathbf{c}) = \mathbf{b} \cdot (\mathbf{c} \times \mathbf{a}) = \mathbf{c} \cdot (\mathbf{a} \times \mathbf{b})\]

三个字母轮着来,值不变。

第二种,向量三重积:\(\mathbf{a} \times (\mathbf{b} \times \mathbf{c})\),两次叉积。它有一个绰号叫"BAC-CAB 公式":

\[\mathbf{a} \times (\mathbf{b} \times \mathbf{c}) = (\mathbf{a} \cdot \mathbf{c})\mathbf{b} - (\mathbf{a} \cdot \mathbf{b})\mathbf{c}\]

念作"back-cab",帮你记顺序。结果一定落在 \(\mathbf{b}, \mathbf{c}\) 张成的那个平面里,这是叉积几何性质倒推出来的。

最后要提醒你一句:叉积不满足结合律,\(\mathbf{a} \times (\mathbf{b} \times \mathbf{c}) \neq (\mathbf{a} \times \mathbf{b}) \times \mathbf{c}\)。你写公式的时候,括号位置千万不能随便挪。


【应用场景:AI 里到处都是它们的影子】—— 大约 2 分钟

理论过完,你可能会问:这些东西到底在哪儿用?我给你举几个你天天在打交道、只是没意识到的例子。

注意力机制里那个 \(\text{softmax}(QK^\top / \sqrt{d}) V\)——里面的 \(QK^\top\),一层剥开,就是 query 向量和 key 向量在做点积。每个 token 到底该关注哪些其他 token,是靠点积算出来的。

embedding 检索、语义搜索、推荐系统,基本全是余弦相似度的天下。你在向量数据库里做 top-k 检索,底层就是无数次余弦相似度的比较,再靠 ANN(近似最近邻)算法优化速度。

图形学和机器人里,叉积是命脉。表面法向量?两条边做叉积。力矩 \(\boldsymbol{\tau} = \mathbf{r} \times \mathbf{F}\)?叉积。判断一个点在三角形的哪一侧?叉积的正负号。

3D 姿态估计和 SLAM里,标量三重积告诉你三个观测点是不是共面——共面就意味着标定过程会有奇异,得换角度重来。

Lasso 和 Ridge 正则里的距离度量,虽然主角是范数,但正则项本身的梯度,里头就是各种点积在展开。

所以你别把这一节当成"数学作业",它是你之后所有 AI 篇章的共同底座。基础不稳,后面读论文你会反复卡在同一个地方。

暂停思考 ③: 如果让你比较两段用户评论的"情感相似度",你会用欧氏距离还是余弦相似度?为什么?再想想:如果两段文本长度差得特别大,哪种度量更公平?这个问题会一直伴随你到 NLP 章节。


【一句话总结】—— 大约 30 秒

如果这 20 分钟你什么都记不住,请你只带走这一句:

点积用 \(\cos\) 量"合拍",叉积用 \(\sin\) 量"撑开",三重积用体积量"共面"。

一个测方向,一个测面积,一个测立体。三兄弟各司其职,合起来就是向量代数的第一层地基。


【结尾反思与下一节引子】—— 大约 1 分钟

我给你留三个问题,作为进入下一节"基与对偶"的钥匙:

  1. 点积的"分量相乘再求和"这个公式,凭什么能对应上"\(\|\mathbf{a}\|\|\mathbf{b}\|\cos\theta\)"这个几何量? 这背后其实藏着"标准正交基"这个前提。如果换一组基,公式还成立吗?

  2. 投影公式 \(\frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{b}\|^2}\mathbf{b}\) 让你能把任意向量分解到一根基向量方向上——如果我给你一整组基,是不是就能把向量"拆散"成一堆坐标?那这些坐标是怎么被"读"出来的?

  3. 点积和一个"线性泛函"(输入向量、输出数)长得一模一样。这暗示着:每一个向量,其实都藏着一把"读坐标的尺子"。这把尺子是什么?它就是下一节要讲的——对偶。

带着这三个问题,我们进 05 节。到时候你会发现,今天的点积,只是"读坐标"这件事的一个特例。而基与对偶,是把整个线性代数的骨架撑起来的那根梁。

下一节见。