向量范数衡量大小,而非含义
计算 L1、L2 和 L-infinity 向量范数,验证它们的定义规则,并了解嵌入向量的模长能说明什么、不能说明什么。
两个嵌入向量可以指向同一方向,但模长不同。例如, 和 是按比例缩放的一对向量:第二个向量是第一个的两倍长。范数按照指定规则把向量映射为一个非负数,用来概括它的大小。这个数有助于比较尺度或描述参数惩罚,但不能据此判断某个嵌入的含义有多重要。
学完本课,你将能够计算 、 和 向量范数,检查使函数成为范数的性质,并使用 NumPy 计算向量大小,同时避免把一批向量误当作一个矩阵。
**学习成果:**计算常见向量范数并检查范数性质。
本课建立在第 014 课:作为 AI 数据的向量之上;那一课中,坐标按固定顺序对应特征。Mathematics for Machine Learning 第 3.1 节将范数介绍为衡量向量长度的方法。本课的示例、代码、图示和评估题均为原创。
范数是包含三项承诺的大小规则
设 和 是 中的向量, 是任意实数。函数 满足以下三条规则时,称为向量范数:
第一条表示向量的大小不会是负数,而且只有零向量的大小为零。第二条表示即使把向量乘以负数,它的大小也会乘以该标量的绝对值。第三条表示两个向量相加后的大小不会超过它们各自大小之和。
对同一个向量应用三种常见规则
对于 ,常见范数为
下标表示采用哪条规则。 把各坐标的绝对值相加, 使用熟悉的欧几里得长度, 则取绝对值最大的坐标。这三种规则是对同一个向量的三种不同概括,坐标本身并没有改变。
取向量 。第二个坐标为负会影响某些运算,但这些大小规则都使用绝对值或平方:
欧几里得单位球是所有 范数不超过 1 的二维向量所组成的集合。点 位于它的边界上,因为 。
L₂ 单位球:‖x‖₂ ≤ 1
阴影区域表达的是一条规则,而不只是一个形状:它包含原点以及所有 长度不大于 1 的向量。边界上的长度恰好为 1。在更高维空间中,同一集合也称为球,尽管它已不再是可以画出来的圆盘。
检查三项承诺
从公式可以直接看出正定性。绝对值之和或平方和只有在每个坐标都为零时才会为零。绝对值的最大值也只有在每个坐标都为零时才会为零。每个公式都非负,并且对零向量都返回零。
为了验证绝对齐次性,取 并令 :
的绝对值不可省略。负标量会反转向量方向,但不会让长度变成负数。
也可以根据公式检查三角不等式。对于 ,每个坐标都满足 ,将这些不等式相加,就得到 。对于 ,这就是熟悉的几何事实:三角形的一边不长于另外两边之和。对于 ,
因此,每种范数都通过了这三项检查。一个数值示例可以检验你是否理解规则,而上面的推理则说明这些规则为何适用于所有向量。
使用 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 时默认计算 范数。
嵌入表通常是二维数组,每一行是一个嵌入。要为每个嵌入分别计算 范数,请指定行轴:
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 描述为指定沿哪个维度计算向量范数的参数。
向量范数说明一种表示按照选定的坐标规则有多大。它并不意味着较大的嵌入更相关、更准确或语义上更重要。这些结论需要结合模型的具体任务和评估;单凭标量模长无法得出这些结论。
参数惩罚与范数相关,但不总是范数本身
优化目标可以加入一项,用来惩罚较大的参数向量 。例如, 惩罚会加入 ,而平方 惩罚会加入 ,其中 控制惩罚权重。对于 ,,而 。
第二个表达式中的平方很重要: 本身不是范数。范数齐次性要求按 缩放,而平方范数按 缩放:。这两种惩罚公式的数值尺度也不同,因此使用相同的 并不会让它们产生可比的效果。向量范数解释惩罚衡量什么;目标函数及其系数决定这种衡量如何影响训练。
有一个软件细节需要注意。NumPy 的 ord 参数支持小于 1 的值以便进行数值计算,但其文档明确指出,这些结果在数学上不是范数。例如,若 ,则 且 ,而 。由于 ,三角不等式不成立。只有在确实需要这个数值表达式时才使用 ord=0.5,不要把它当作具备上述三项保证的向量范数。
明确了这些性质以及实现上的区别后,下一步就是比较不同有效范数所产生的几何形状,以及这些选择如何改变距离和约束的概念。
检查你的理解
Question 1
一个函数要成为向量范数,必须满足哪三项性质?
Show the step-by-step solution
范数满足正定性、绝对齐次性和三角不等式。正定性表示函数值非负,且仅在零向量处为零。绝对齐次性要求 。三角不等式要求对任意一对向量都有 。
Question 2
对于 x = (2, −1, 2),计算它的 L₁、L₂ 和 L-infinity 范数,并写出计算过程。
Show the step-by-step solution
对于 ,将坐标绝对值相加:。对于 ,对平方和开方:。对于 ,取最大的坐标绝对值,即 。因此三个结果分别为 、 和 。
Question 3
设 x = (3, −4)。计算 −2x 的三种范数,并逐一验证绝对齐次性。
Show the step-by-step solution
首先,。它的 范数为 ,等于 。它的 范数为 。它的 范数为 。三者都等于原范数乘以 ,所以负标量改变的是方向,不会让大小变成负数。
Question 4
对于 u = (1, −2) 和 v = (−3, 1),分别计算不等式两边,检查 L₁ 三角不等式。
Show the step-by-step solution
先将向量相加:,所以 。再分别计算,,,右边为 。因此 。此示例成立;逐坐标的绝对值不等式解释了为什么 对任意一对向量都成立。
Question 5
为什么 f(x) = (Σᵢ |xᵢ|^(1/2))² 不是范数?请用 (1, 0) 和 (0, 1) 检验。
Show the step-by-step solution
这两个坐标向量的 值都为 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)。第一个结果为 ,第二个为 。输出是 [5. 10.]。设置 axis=1 可以避免把整个二维数组当作一个矩阵范数来计算。
Question 7
对于 w = (3, −4),当 λ = 0.1 时,计算 L₁ 惩罚和平方 L₂ 惩罚。平方 L₂ 量本身是范数吗?
Show the step-by-step solution
惩罚为 。平方 惩罚为 。平方后的量不是范数:将 乘以 会使它按 缩放,而范数齐次性要求按 缩放。
Question 8
嵌入 (3, 4) 和 (6, 8) 的 L₂ 范数分别为 5 和 10。这个比较能说明什么?仅凭它不能说明什么?
Show the step-by-step solution
它说明在给定坐标下,第二个向量的欧几里得模长是第一个的两倍。两个向量也指向同一方向,因为 。仅凭范数无法判断哪个嵌入更相关或语义上更重要;这需要模型的训练背景和合适的特定任务评估。