Skip to content

Metrics and Norms(度量与范数)

Norm 衡量单个 vector 的大小;metric 衡量两个 vector 之间的距离。本节涵盖 L1、L2 和 L-infinity norm,Euclidean 距离和 cosine 距离,以及为什么在 ML 的 kNN、聚类和检索任务中选择合适的距离函数至关重要。

  • 我们知道 vector 具有 magnitude 和 direction。但如何量化单个 vector 的"大小",或两个 vector 之间的"距离"?这就是 normmetric 的用武之地。

  • 对于 scalar,我们知道 10 > 5,因为它们的数值可以直接比较。但如何量化一个 vector 呢?用它的 norm——它度量单个 vector 的大小。

  • 最常见的 norm 是 Euclidean norm(L2),也就是我们已经熟悉的 magnitude 公式:

\[\|\mathbf{v}\|_2 = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}\]
  • 但还有其他衡量大小的方式。想象你在一座格状街道的城市里:你无法穿过建筑物斜着走,所以"路程的长度"是沿每条街道行走的总格数。这就是 Manhattan norm(L1):
\[\|\mathbf{v}\|_1 = |v_1| + |v_2| + \cdots + |v_n|\]
  • 或者,你可能只关心最大的那个分量,忽略其余的。这就是 Max norm(L-infinity):
\[\|\mathbf{v}\|_\infty = \max(|v_1|, |v_2|, \ldots, |v_n|)\]
  • 这三种都是一般 Lp norm 的特例:
\[\|\mathbf{v}\|_p = (|v_1|^p + |v_2|^p + \cdots + |v_n|^p)^{1/p}\]
  • \(p = 2\) 得 Euclidean norm,\(p = 1\) 得 Manhattan norm,当 \(p \to \infty\) 时得 Max norm。随着 \(p\) 的增大,最大的分量贡献越来越多,直到最终只有它起作用。

  • 每种 norm 都必须满足三条规则:

    • 非负性\(\|\mathbf{v}\| \geq 0\),且 \(\|\mathbf{v}\| = 0\) 当且仅当 \(\mathbf{v} = \mathbf{0}\)。大小永远非负,只有零 vector 的大小为零。

    • 缩放性\(\|c\mathbf{v}\| = |c| \cdot \|\mathbf{v}\|\)。将 vector 放大两倍,其大小也放大两倍。

    • 三角不等式\(\|\mathbf{u} + \mathbf{v}\| \leq \|\mathbf{u}\| + \|\mathbf{v}\|\)。走捷径永远不比绕弯路长。

  • metric 度量的是两个 vector 之间的距离。可以把它理解为:"这两个点相距多远?"

  • 获得 metric 最简单的方式是对差向量使用 norm:\(d(\mathbf{u}, \mathbf{v}) = \|\mathbf{u} - \mathbf{v}\|\)。将两个 vector 相减,然后度量剩余部分的大小。

  • 使用 Euclidean norm 就得到我们熟悉的 Euclidean 距离

\[d(\mathbf{u}, \mathbf{v}) = \sqrt{(u_1 - v_1)^2 + (u_2 - v_2)^2 + \cdots + (u_n - v_n)^2}\]
  • 使用 Manhattan norm 则得到 Manhattan 距离——沿每个轴的总差值之和,就像数城市街区的距离一样。

  • 每种 metric 都必须满足四条规则:

    • 非负性\(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})\)。从 A 到 B 的距离与从 B 到 A 的距离相同。

    • 三角不等式\(d(\mathbf{u}, \mathbf{w}) \leq d(\mathbf{u}, \mathbf{v}) + d(\mathbf{v}, \mathbf{w})\)。直接到达永远不比绕道长。

  • 那么两者有什么关系?Norm 度量一个 vector,metric 度量两个 vector 之间的间隙。每种 norm 都自然地产生一种 metric(通过测量差向量),但并非每种 metric 都来自于某种 norm。

  • 例如,Hamming 距离统计两个 vector 在多少个位置上不同。它是一种有效的 metric,但不来自任何 norm。

  • 在 ML 中,选择合适的 norm 或 metric 至关重要。

  • L2 距离在求和之前对每个差值进行平方,因此单个较大的差值会主导结果。

  • L1 距离对绝对差值求和,对每个差值一视同仁。与 L2 相比,单个较大的差值影响较小。

编程练习(使用 CoLab 或 notebook)

  1. 计算同一 vector 的 L1 和 L2 norm。尝试修改数值,观察哪种 norm 对大分量更敏感,以及哪种对多个小分量更敏感。然后尝试对递增的 p 值(如 1、2、5、10、50、100)计算 Lp norm,观察其逼近 L-infinity 值的过程。

    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}")
    

  2. 计算两个 vector 之间的 Euclidean 距离和 Manhattan 距离。尝试让 vector 靠近或远离,观察两种距离的不同响应方式。

    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}")