第01章 · 03 范数与度量 — 讲解稿¶
口播时长约 15-18 分钟 | 字数约 2600 字 | 建议语速 250 字/分钟
【开场钩子 · 约 90 秒】¶
来,你先想象一个画面。
你在纽约曼哈顿的街头,手里拿着手机,想从第五大道和 42 街的路口,走到第八大道和 45 街的路口。地图上,那两个点之间的直线距离大概是 800 米。但你不可能斜着穿墙、也不可能踩着别人家的屋顶飞过去。你只能沿着街道走——横着走三个 block,竖着走三个 block。真正的脚力距离,是 1200 米,不是 800 米。
你看,同样是"两个点之间的距离",答案居然不止一个。
那问题就来了:当我们在机器学习里说"这两个用户很像"、"这张图片和那张图片很接近"、"这段话和那段话语义相似"——我们说的到底是哪一种距离?
你要是选错了,kNN 会给你推错电影,聚类会把风马牛不相及的样本聚成一堆,向量检索会返回一堆看似接近、实际风牛马不相及的结果。
这一节,咱们就把"大小"和"距离"这两件事,一次说清楚。我们要讲的是范数和度量。
【核心概念 · 约 3 分钟】¶
先给你一个最粗的定位,你记住这一句就行:
范数量的是一个向量有多大;度量量的是两个向量之间隔多远。
一个是"我多重",一个是"咱俩差多少"。
在标量的世界里,这事根本不用讨论。 10 比 5 大,这没什么好争的,数字本身就把大小告诉你了。可到了向量,一个 \(\mathbf{v} = (3, -4, 1)\),你说它多大?你不能直接说"3 大",因为它还有 -4 和 1 呢。所以我们要发明一个函数,把这个向量压成一个非负实数,这个函数就叫范数,记号写成 \(\|\mathbf{v}\|\)。
你最熟的那个,叫欧几里得范数,也叫 L2 范数,就是勾股定理的高维推广:
这个你从初中就见过,不用害怕。
但——注意听——衡量大小的方式,不止这一种。回到咱们开场的曼哈顿。如果你不能斜着走,你走的是每一个坐标轴方向的总和:
这就是 L1 范数,也叫曼哈顿范数。名字都对上了,你能记住。
还有第三种,更暴躁一点:你根本不在乎那些小分量,你只盯着最大的那一个看:
这叫 L 无穷范数,或者最大范数。你可以理解成一种"极端主义者"——木桶原理反着用,只看最长的那根板。
那这三种,是三个孤岛吗?不是。它们其实是同一个家族的三个代表,统一在一个更大的公式底下:
这就是广义 Lp 范数。 \(p=1\) 你得到曼哈顿, \(p=2\) 你得到欧几里得, \(p \to \infty\) 你得到最大范数——因为 \(p\) 越大,大的那个分量占的比重越夸张,最后小的那些几乎就"消失"了,只剩最大那一个说了算。
【暂停思考 · 30 秒】¶
⏸️ 暂停一下——你先在脑子里想一个向量,比如 \((3, -4, 1)\),别看下面,自己心算一下:
- 它的 L1 是多少?
- 它的 L2 是多少?
- 它的 L∞ 是多少?
……
好,答案:L1 是 \(3 + 4 + 1 = 8\),L2 是 \(\sqrt{9+16+1} = \sqrt{26} \approx 5.1\),L∞ 是 \(4\)。
你会发现同一个向量,三种范数给出三个不一样的"大小"。这不是矛盾,这是视角不同。
【公式推导:三条铁律 · 约 2 分钟】¶
有人会问了:那我随便发明一个函数,把向量映射到一个非负数,是不是就都能叫范数?
不行。范数是有身份门槛的。任何一个函数,要想混进"范数俱乐部",必须签三条协议:
第一条,非负性: \(\|\mathbf{v}\| \geq 0\),而且只有零向量的大小才是零。
翻译成人话:大小不能是负的,而且如果一个向量"大小是零",那它必须真的是零向量。你不能作弊,不能让一个非零向量的"大小"算出来是零。
第二条,齐次性: \(\|c\mathbf{v}\| = |c| \cdot \|\mathbf{v}\|\)。
翻译成人话:你把一个向量拉长两倍,它的大小就该是原来的两倍。放大三倍就三倍。你别搞什么"放大两倍,大小反而变小了"这种鬼东西。注意 \(c\) 是负数也一样,取绝对值。
第三条,三角不等式: \(\|\mathbf{u} + \mathbf{v}\| \leq \|\mathbf{u}\| + \|\mathbf{v}\|\)。
翻译成人话:抄近路,永远不会比绕道更长。你先走 \(\mathbf{u}\),再走 \(\mathbf{v}\),总路程一定大于等于直接从起点走到终点。这条最重要,几乎所有几何直觉都建立在它上面。
L1、L2、L∞,都乖乖满足这三条。你以后如果自己发明一种"距离",记得先拿这三条卡一遍。
【度量:从"我多大"到"咱俩差多远" · 约 2 分钟】¶
范数讲完了。现在换视角——度量。
度量问的是:"这两个点之间,离多远?"记号是 \(d(\mathbf{u}, \mathbf{v})\)。
有一个特别简单的办法可以从范数造出度量。你想啊,两个点离多远,不就是它们的差有多大吗?
用 L2 范数套进去,你就得到教科书上的欧几里得距离:
用 L1 就得到曼哈顿距离。就这么简单。
那度量的入场协议是什么?比范数多一条,一共四条:
- 非负性: \(d(\mathbf{u}, \mathbf{v}) \geq 0\);
- 同一性: \(d(\mathbf{u}, \mathbf{v}) = 0\) 当且仅当 \(\mathbf{u} = \mathbf{v}\);
- 对称性: \(d(\mathbf{u}, \mathbf{v}) = d(\mathbf{v}, \mathbf{u})\)——你从家到公司多远,从公司回家就多远;
- 三角不等式: \(d(\mathbf{u}, \mathbf{w}) \leq d(\mathbf{u}, \mathbf{v}) + d(\mathbf{v}, \mathbf{w})\)。
对称性是新加的一条。你别小看它,现实世界里很多"距离"其实不对称——比如你从山脚爬到山顶,和从山顶滑到山脚,花的力气可差远了。但严格数学意义上的度量,必须对称。
这里有个反常识的点:每个范数都能造出度量,但并不是每个度量都来自范数。举个例子——汉明距离,它数的是两个等长向量有多少个位置不一样。 \((1,0,1,1)\) 和 \((1,1,1,0)\) 汉明距离是 2,因为第二位和第四位不同。它是合法的度量,但你找不到一个范数能把它导出来。这个知识点考试爱考,你记住。
【暂停思考 · 30 秒】¶
⏸️ 再停一下——你自己想:如果我把"从家到公司花的时间"当作距离函数,它满足度量的四条公理吗?
……
答案是:大概率不满足对称性。因为早高峰通勤 1 小时,晚上回家 30 分钟,方向一变结果就变。所以"通勤时间"严格来说不是一个数学意义上的度量,只是一个日常语言里的"距离"。
【应用场景:ML 里到底怎么选 · 约 3 分钟】¶
好,现在轮到最重要的部分——在机器学习里,你到底该选哪个?
先记住一句话:L2 会被离群值主导,L1 更平权。
为什么?因为 L2 在求和之前,把每个差平方了。假设两个向量在某一维差了 10,其它九维都差 0.1。L2 一算,10 的平方是 100,而 0.1 的平方是 0.01——那个大差直接把小差们碾成尘。而 L1 呢,10 就是 10,0.1 就是 0.1,大差还是大,但没那么"大"。
这就导致了实践里的分野:
- kNN、聚类、向量检索:如果你的数据有几个维度天生数值大(比如价格是几千,年龄是几十),用 L2 会让"价格差"完全统治相似度判断,你得先做标准化,或者干脆用 L1;
- Lasso 回归用 L1 正则化,能把不重要的系数压到严格为零,产生稀疏解;
- Ridge 回归用 L2 正则化,把系数平滑地压小,但一般不会压到零;
- 文本相似度、embedding 检索:这时你往往用余弦距离,因为你关心的是方向,不是大小;
- 图像哈希、DNA 序列比对:用汉明距离,因为你要数"多少位不同"。
一句话总结这一段:选距离,就是选你相信什么样的"相似"。你选 L2,你就相信"欧氏几何";你选 L1,你就相信"街区式加权";你选余弦,你就相信"方向比长度重要"。这不是数学问题,是建模决策。
【一句话总结 · 30 秒】¶
范数量单个向量,度量量两个向量之差;L1、L2、L∞ 是同一族 Lp 范数的三个代表;选错距离函数,你的 kNN、聚类、检索会一路错到底。
【反思问题 · 引导下一节】¶
留三个问题,你带着走到下一节。
问题一:如果一个向量 \(\mathbf{v}\) 已经 L2 归一化(即 \(\|\mathbf{v}\|_2 = 1\)),那 \(\mathbf{v}\) 和 \(\mathbf{u}\) 的欧几里得距离,和它们的余弦相似度之间,有什么代数关系?你能不能用一行公式写出来?
问题二:你能不能自己举一个函数,它满足非负性、齐次性,但不满足三角不等式?这个函数还能叫"范数"吗?
问题三:下一节我们要讲向量积——点积和叉积。你先思考一下:L2 范数的平方 \(\|\mathbf{v}\|_2^2\),能不能写成某种"向量自己和自己"的运算?这个运算,和"两个向量有多像"之间,是不是有隐秘联系?
带着这三个问题,咱们下一节见。