AI 数学课程 · 第 39 课,共 180

向量范数衡量大小,而非含义

计算 L1、L2 和 L-infinity 向量范数,验证它们的定义规则,并了解嵌入向量的模长能说明什么、不能说明什么。

分享这篇文章

两个嵌入向量可以指向同一方向,但模长不同。例如,(3,4)(3,4) 和 (6,8)(6,8) 是按比例缩放的一对向量:第二个向量是第一个的两倍长。范数按照指定规则把向量映射为一个非负数,用来概括它的大小。这个数有助于比较尺度或描述参数惩罚,但不能据此判断某个嵌入的含义有多重要。

学完本课,你将能够计算 L1L_1、L2L_2 和 L∞L_\infty 向量范数,检查使函数成为范数的性质,并使用 NumPy 计算向量大小,同时避免把一批向量误当作一个矩阵。

**学习成果:**计算常见向量范数并检查范数性质。

本课建立在第 014 课:作为 AI 数据的向量之上;那一课中,坐标按固定顺序对应特征。Mathematics for Machine Learning 第 3.1 节将范数介绍为衡量向量长度的方法。本课的示例、代码、图示和评估题均为原创。

范数是包含三项承诺的大小规则

设 xx 和 yy 是 Rn\mathbb{R}^n 中的向量,cc 是任意实数。函数 ∥⋅∥\lVert\cdot\rVert 满足以下三条规则时,称为向量范数:

第一条表示向量的大小不会是负数,而且只有零向量的大小为零。第二条表示即使把向量乘以负数,它的大小也会乘以该标量的绝对值。第三条表示两个向量相加后的大小不会超过它们各自大小之和。

对同一个向量应用三种常见规则

对于 x=(x1,…,xn)x=(x_1,\ldots,x_n),常见范数为

∥x∥1=∑i=1n∣xi∣,∥x∥2=∑i=1nxi2,∥x∥∞=max⁡i∣xi∣.\lVert x\rVert_1=\sum_{i=1}^n |x_i|,\qquad \lVert x\rVert_2=\sqrt{\sum_{i=1}^n x_i^2},\qquad \lVert x\rVert_\infty=\max_i |x_i|.

下标表示采用哪条规则。L1L_1 把各坐标的绝对值相加,L2L_2 使用熟悉的欧几里得长度,L∞L_\infty 则取绝对值最大的坐标。这三种规则是对同一个向量的三种不同概括,坐标本身并没有改变。

取向量 x=(3,−4)x=(3,-4)。第二个坐标为负会影响某些运算,但这些大小规则都使用绝对值或平方:

欧几里得单位球是所有 L2L_2 范数不超过 1 的二维向量所组成的集合。点 (0.6,0.8)(0.6,0.8) 位于它的边界上,因为 0.62+0.82=1\sqrt{0.6^2+0.8^2}=1。

欧几里得单位球包含长度不超过 1 的向量圆内和圆周上的每个点,其 L₂ 范数都不大于 1。标出的向量 (0.6, 0.8) 到达边界。
欧几里得单位球包含长度不超过 1 的向量一个以原点为中心的阴影圆形区域。横轴是 x 一,纵轴是 x 二。从原点指向边界的向量终点标记为 (0.6, 0.8)。x₁x₂原点x(0.6, 0.8)长度 1

L₂ 单位球:‖x‖₂ ≤ 1

阴影区域表达的是一条规则,而不只是一个形状:它包含原点以及所有 L2L_2 长度不大于 1 的向量。边界上的长度恰好为 1。在更高维空间中,同一集合也称为球,尽管它已不再是可以画出来的圆盘。

检查三项承诺

从公式可以直接看出正定性。绝对值之和或平方和只有在每个坐标都为零时才会为零。绝对值的最大值也只有在每个坐标都为零时才会为零。每个公式都非负,并且对零向量都返回零。

为了验证绝对齐次性,取 x=(3,−4)x=(3,-4) 并令 c=−2c=-2:

−2x=(−6,8),∥−2x∥1=14=2⋅7,∥−2x∥2=10=2⋅5,∥−2x∥∞=8=2⋅4.-2x=(-6,8),\qquad \lVert -2x\rVert_1=14=2\cdot7,\quad \lVert -2x\rVert_2=10=2\cdot5,\quad \lVert -2x\rVert_\infty=8=2\cdot4.

cc 的绝对值不可省略。负标量会反转向量方向,但不会让长度变成负数。

也可以根据公式检查三角不等式。对于 L1L_1,每个坐标都满足 ∣xi+yi∣≤∣xi∣+∣yi∣|x_i+y_i|\le |x_i|+|y_i|,将这些不等式相加,就得到 ∥x+y∥1≤∥x∥1+∥y∥1\lVert x+y\rVert_1\le\lVert x\rVert_1+\lVert y\rVert_1。对于 L2L_2,这就是熟悉的几何事实:三角形的一边不长于另外两边之和。对于 L∞L_\infty,

∥x+y∥∞=max⁡i∣xi+yi∣≤max⁡i(∣xi∣+∣yi∣)≤max⁡i∣xi∣+max⁡i∣yi∣.\lVert x+y\rVert_\infty =\max_i|x_i+y_i| \le\max_i(|x_i|+|y_i|) \le\max_i|x_i|+\max_i|y_i|.

因此,每种范数都通过了这三项检查。一个数值示例可以检验你是否理解规则,而上面的推理则说明这些规则为何适用于所有向量。

使用 NumPy 计算向量大小

NumPy 通过 numpy.linalg.norm 提供这些计算。对于一维数组,指定 ord 来选择向量范数:

import numpy as np

x = np.array([3.0, -4.0])
print(np.linalg.norm(x, ord=1))
print(np.linalg.norm(x, ord=2))
print(np.linalg.norm(x, ord=np.inf))

输出是 7.0、5.0 和 4.0。对于一维数组,省略 ord 时默认计算 L2L_2 范数。

嵌入表通常是二维数组,每一行是一个嵌入。要为每个嵌入分别计算 L2L_2 范数,请指定行轴:

embeddings = np.array([[3.0, 4.0], [6.0, 8.0]])
row_norms = np.linalg.norm(embeddings, ord=2, axis=1)
print(row_norms)

输出是 [5. 10.]。第二个向量的范数是第一个的两倍,尽管它们指向同一方向。如果输入为二维且没有设置 axis,NumPy 会将其解释为矩阵;矩阵范数并不等同于逐行计算向量范数。文档将 axis 描述为指定沿哪个维度计算向量范数的参数。

向量范数说明一种表示按照选定的坐标规则有多大。它并不意味着较大的嵌入更相关、更准确或语义上更重要。这些结论需要结合模型的具体任务和评估;单凭标量模长无法得出这些结论。

参数惩罚与范数相关,但不总是范数本身

优化目标可以加入一项,用来惩罚较大的参数向量 ww。例如,L1L_1 惩罚会加入 λ∥w∥1\lambda\lVert w\rVert_1,而平方 L2L_2 惩罚会加入 λ∥w∥22\lambda\lVert w\rVert_2^2,其中 λ≥0\lambda\ge0 控制惩罚权重。对于 w=(3,−4)w=(3,-4),∥w∥1=7\lVert w\rVert_1=7,而 ∥w∥22=25\lVert w\rVert_2^2=25。

第二个表达式中的平方很重要:∥w∥22\lVert w\rVert_2^2 本身不是范数。范数齐次性要求按 ∣c∣|c| 缩放,而平方范数按 c2c^2 缩放:∥cw∥22=c2∥w∥22\lVert cw\rVert_2^2=c^2\lVert w\rVert_2^2。这两种惩罚公式的数值尺度也不同,因此使用相同的 λ\lambda 并不会让它们产生可比的效果。向量范数解释惩罚衡量什么;目标函数及其系数决定这种衡量如何影响训练。

有一个软件细节需要注意。NumPy 的 ord 参数支持小于 1 的值以便进行数值计算,但其文档明确指出,这些结果在数学上不是范数。例如,若 f(x)=(∑i∣xi∣1/2)2f(x)=(\sum_i|x_i|^{1/2})^2,则 f((1,0))=1f((1,0))=1 且 f((0,1))=1f((0,1))=1,而 f((1,1))=4f((1,1))=4。由于 4>1+14>1+1,三角不等式不成立。只有在确实需要这个数值表达式时才使用 ord=0.5,不要把它当作具备上述三项保证的向量范数。

明确了这些性质以及实现上的区别后,下一步就是比较不同有效范数所产生的几何形状,以及这些选择如何改变距离和约束的概念。

检查你的理解

Question 1

一个函数要成为向量范数,必须满足哪三项性质?

Show the step-by-step solution

范数满足正定性、绝对齐次性和三角不等式。正定性表示函数值非负,且仅在零向量处为零。绝对齐次性要求 ∥cx∥=∣c∣∥x∥\lVert cx\rVert=|c|\lVert x\rVert。三角不等式要求对任意一对向量都有 ∥x+y∥≤∥x∥+∥y∥\lVert x+y\rVert\le\lVert x\rVert+\lVert y\rVert。

Question 2

对于 x = (2, −1, 2),计算它的 L₁、L₂ 和 L-infinity 范数,并写出计算过程。

Show the step-by-step solution

对于 L1L_1,将坐标绝对值相加:∣2∣+∣−1∣+∣2∣=5|2|+|-1|+|2|=5。对于 L2L_2,对平方和开方:22+(−1)2+22=9=3\sqrt{2^2+(-1)^2+2^2}=\sqrt{9}=3。对于 L∞L_\infty,取最大的坐标绝对值,即 22。因此三个结果分别为 55、33 和 22。

Question 3

设 x = (3, −4)。计算 −2x 的三种范数,并逐一验证绝对齐次性。

Show the step-by-step solution

首先,−2x=(−6,8)-2x=(-6,8)。它的 L1L_1 范数为 6+8=146+8=14,等于 ∣−2∣∥x∥1=2⋅7|-2|\lVert x\rVert_1=2\cdot7。它的 L2L_2 范数为 36+64=10=2⋅5\sqrt{36+64}=10=2\cdot5。它的 L∞L_\infty 范数为 8=2⋅48=2\cdot4。三者都等于原范数乘以 ∣−2∣|-2|,所以负标量改变的是方向,不会让大小变成负数。

Question 4

对于 u = (1, −2) 和 v = (−3, 1),分别计算不等式两边,检查 L₁ 三角不等式。

Show the step-by-step solution

先将向量相加:u+v=(−2,−1)u+v=(-2,-1),所以 ∥u+v∥1=2+1=3\lVert u+v\rVert_1=2+1=3。再分别计算,∥u∥1=1+2=3\lVert u\rVert_1=1+2=3,∥v∥1=3+1=4\lVert v\rVert_1=3+1=4,右边为 3+4=73+4=7。因此 3≤73\le7。此示例成立;逐坐标的绝对值不等式解释了为什么 L1L_1 对任意一对向量都成立。

Question 5

为什么 f(x) = (Σᵢ |xᵢ|^(1/2))² 不是范数?请用 (1, 0) 和 (0, 1) 检验。

Show the step-by-step solution

这两个坐标向量的 ff 值都为 1。它们的和为 (1,1)(1,1),此时 f((1,1))=(1+1)2=4f((1,1))=(1+1)^2=4。三角不等式要求 4≤1+14\le1+1,但这不成立。因此,该函数违反了范数性质之一。NumPy 支持这种 ord < 1 的结果用于数值计算,但文档并未将其称为数学范数。

Question 6

对于 embeddings = [[3, 4], [6, 8]],哪个 NumPy 表达式能返回每一行的一个 L₂ 范数?结果是什么?

Show the step-by-step solution

两行是两个不同的向量,因此应沿坐标所在的行轴计算:np.linalg.norm(embeddings, ord=2, axis=1)。第一个结果为 32+42=5\sqrt{3^2+4^2}=5,第二个为 62+82=10\sqrt{6^2+8^2}=10。输出是 [5. 10.]。设置 axis=1 可以避免把整个二维数组当作一个矩阵范数来计算。

Question 7

对于 w = (3, −4),当 λ = 0.1 时,计算 L₁ 惩罚和平方 L₂ 惩罚。平方 L₂ 量本身是范数吗?

Show the step-by-step solution

L1L_1 惩罚为 0.1⋅(3+4)=0.70.1\cdot(3+4)=0.7。平方 L2L_2 惩罚为 0.1⋅(32+(−4)2)=0.1⋅25=2.50.1\cdot(3^2+(-4)^2)=0.1\cdot25=2.5。平方后的量不是范数:将 ww 乘以 cc 会使它按 c2c^2 缩放,而范数齐次性要求按 ∣c∣|c| 缩放。

Question 8

嵌入 (3, 4) 和 (6, 8) 的 L₂ 范数分别为 5 和 10。这个比较能说明什么?仅凭它不能说明什么?

Show the step-by-step solution

它说明在给定坐标下,第二个向量的欧几里得模长是第一个的两倍。两个向量也指向同一方向,因为 (6,8)=2(3,4)(6,8)=2(3,4)。仅凭范数无法判断哪个嵌入更相关或语义上更重要;这需要模型的训练背景和合适的特定任务评估。

资料来源

  1. Mathematics for Machine Learning book PDF, Section 3.1
  2. NumPy documentation: numpy.linalg.norm