度量与范数


文档摘要

度量与范数 范数(norm)衡量一个向量的大小;度量(metric)衡量两个向量之间的距离。本节介绍 L1、L2、L∞ 范数,欧几里得距离与余弦距离,以及为什么在 ML 中的 kNN、聚类和检索任务里选择正确的距离函数至关重要。 我们已经知道向量有大小和方向。但我们究竟该如何衡量一个单独的向量「有多大」,或两个向量「相距多远」呢?这正是范数和度量发挥作用的地方。 对于标量,我们知道 10 > 5,因为它们的数值本身就给出了量化;可是一个向量该如何量化呢?答案是它的范数,它衡量单个向量的大小。

度量与范数

范数(norm)衡量一个向量的大小;度量(metric)衡量两个向量之间的距离。本节介绍 L1、L2、L∞ 范数,欧几里得距离与余弦距离,以及为什么在 ML 中的 kNN、聚类和检索任务里选择正确的距离函数至关重要。

  • 我们已经知道向量有大小和方向。但我们究竟该如何衡量一个单独的向量「有多大」,或两个向量「相距多远」呢?这正是范数度量发挥作用的地方。

  • 对于标量,我们知道 10 > 5,因为它们的数值本身就给出了量化;可是一个向量该如何量化呢?答案是它的范数,它衡量单个向量的大小。

  • 最熟悉的范数是欧几里得范数(L2),也就是我们已经熟悉的大小公式:

\|\mathbf{v}\|_2 = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}
  • 但衡量大小还有别的方式。想象你身处一座街道呈网格状的城市,你无法斜穿过建筑物,所以你旅程的「长度」就是沿每条街所走的总街区数。这就是曼哈顿范数(L1):
\|\mathbf{v}\|_1 = |v_1| + |v_2| + \cdots + |v_n|
  • 或者你可能只关心单一的最大分量,忽略其余。这就是最大值范数(L∞):
\|\mathbf{v}\|_\infty = \max(|v_1|, |v_2|, \ldots, |v_n|)
  • 这三种都是广义 Lp 范数的特例:
\|\mathbf{v}\|_p = (|v_1|^p + |v_2|^p + \cdots + |v_n|^p)^{1/p}
  • p = 2 得到欧几里得范数,p = 1 得到曼哈顿范数,当 p \to \infty 时得到最大值范数。随着 p 增大,最大分量的贡献越来越大,直到最终只有它起作用。

  • 每个范数都必须满足三条规则:

    • 非负性\|\mathbf{v}\| \geq 0,且仅当 \mathbf{v} = \mathbf{0}\|\mathbf{v}\| = 0。大小绝不会为负,且只有零向量的大小为零。

    • 齐次性(缩放)\|c\mathbf{v}\| = |c| \cdot \|\mathbf{v}\|。把向量翻倍,它的大小也翻倍。

    • 三角不等式\|\mathbf{u} + \mathbf{v}\| \leq \|\mathbf{u}\| + \|\mathbf{v}\|。走捷径绝不会比绕远路更长。

  • 度量衡量的是两个向量之间的距离。可以把它想成在问:「这两个点相隔多远?」

  • 得到度量最简单的方法是先求差再取范数:d(\mathbf{u}, \mathbf{v}) = \|\mathbf{u} - \mathbf{v}\|。把两个向量相减,然后衡量剩余部分的大小。

  • 用欧几里得范数得到的就是熟悉的欧几里得距离

d(\mathbf{u}, \mathbf{v}) = \sqrt{(u_1 - v_1)^2 + (u_2 - v_2)^2 + \cdots + (u_n - v_n)^2}
  • 用曼哈顿范数得到的是曼哈顿距离,即沿每个轴的差值之和,就像数两个地点之间相隔的街区数。

  • 每个度量都必须满足四条规则:

    • 非负性d(\mathbf{u}, \mathbf{v}) \geq 0。距离绝不会为负。

    • 同一性:当且仅当 \mathbf{u} = \mathbf{v}d(\mathbf{u}, \mathbf{v}) = 0。距离为零意味着同一个点。

    • 对称性d(\mathbf{u}, \mathbf{v}) = d(\mathbf{v}, \mathbf{u})。从 A 到 B 的距离与从 B 到 A 相同。

    • 三角不等式d(\mathbf{u}, \mathbf{w}) \leq d(\mathbf{u}, \mathbf{v}) + d(\mathbf{v}, \mathbf{w})。直走绝不会比绕道更长。

  • 那么两者之间是什么关系?范数衡量单个向量,度量衡量两者之间的差距。每个范数都能自然地产生一个度量(通过衡量差值),但并非每个度量都来自某个范数。

  • 例如,汉明距离(Hamming distance)统计两个向量取值不同的位置个数。它是一个合法的度量,但不来自任何范数。

  • 在 ML 中,选择正确的范数或度量很重要。

  • L2 距离在求和前对每个差值取平方,因此一个很大的差值会主导结果。

  • L1 距离对绝对差值求和,把每一个都同等对待。相比 L2,单个大差值的影响更小。

编程练习(使用 CoLab 或 notebook)

  1. 计算同一个向量的 L1 和 L2 范数。尝试改变数值,观察哪种范数对大分量更敏感、哪种对许多小分量更敏感。然后尝试对不断增大的 p(如 1、2、5、10、50、100)计算 Lp 范数,观察它如何收敛到 L∞ 值。
import jax.numpy as jnp v = jnp.array([3.0, -4.0, 1.0]) l1 = jnp.sum(jnp.abs(v)) l2 = jnp.sqrt(jnp.sum(v ** 2)) print(f"L1: {l1}, L2: {l2:.2f}")
  1. 计算两个向量之间的欧几里得距离和曼哈顿距离。尝试让两个向量靠近或远离,观察两种距离的不同反应。
import jax.numpy as jnp u = jnp.array([1.0, 2.0, 3.0]) v = jnp.array([4.0, 0.0, 1.0]) euclidean = jnp.sqrt(jnp.sum((u - v) ** 2)) manhattan = jnp.sum(jnp.abs(u - v)) print(f"Euclidean: {euclidean:.2f}, Manhattan: {manhattan}")

发布者: 作者: HenryNdubuaku 转发
评论区 (0)
U