Math-03.线性代数-06.范数与距离

本页梳理 ML 中最常用的范数(norm)与距离——正则化、梯度裁剪、最近邻、对抗扰动都依赖它们。

段末注释范数(norm)$|\mathbf{x}|$ 将向量映射为非负标量,满足正定性、齐次性与三角不等式;L2 范数即欧氏长度。

系列入口00.系列规划 | 前置:02 向量与矩阵运算


1. 向量范数(D2–D3)

图 1 L1 与 L2 单位球

对 $\mathbf{x} \in \mathbb{R}^d$:

范数 公式 几何
L2 $|\mathbf{x}|_2 = \sqrt{\sum_i x_i^2}$ 欧氏距离到原点
L1 $|\mathbf{x}|_1 = \sum_i x_i
L∞ $|\mathbf{x}|_\infty = \max_i x_i
Lp $|\mathbf{x}|_p = (\sum_i x_i

L2 与点积:$|\mathbf{x}|_2^2 = \mathbf{x}^\top \mathbf{x}$。Cosine 相似度:

$$
\cos(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a}^\top \mathbf{b}}{|\mathbf{a}|_2 |\mathbf{b}|_2}
$$

只关心方向、不受长度影响——词嵌入、检索常用。


2. 矩阵范数(D3)

图 2 矩阵范数对照

Frobenius 范数(最常用):

$$
|A|F = \sqrt{\sum{i,j} A_{ij}^2} = \sqrt{\mathrm{tr}(A^\top A)}
$$

与 SVD 关系:$|A|_F^2 = \sum_i \sigma_i^2$(见 05 SVD)。

谱范数(算子 2-范数):

$$
|A|2 = \max{|\mathbf{x}|_2=1} |A\mathbf{x}|2 = \sigma{\max}
$$

控制矩阵放大向量的最大倍数——Lipschitz 分析、对抗鲁棒性。


3. ML 中的典型用法(D7)

图 3 范数在训练中的应用

场景 范数 作用
L2 正则 / weight decay $\lambda |\boldsymbol{\theta}|_2^2$ 抑制权重大小(Math-08/03
L1 正则(Lasso) $\lambda |\boldsymbol{\theta}|_1$ 稀疏特征选择
梯度裁剪 $|\mathbf{g}|_2 > c$ 时缩放 防 RNN/Transformer 梯度爆炸
Early stopping 验证 loss(标量范数化目标) 监控泛化
k-NN / 聚类 $|\mathbf{x}_i - \mathbf{x}_j|_2$ 距离度量
对抗样本 $|\boldsymbol{\delta}|_\infty \le \epsilon$ 有界扰动
LayerNorm 对特征维归一化 $|\cdot|_2$ 稳定激活尺度

PyTorch:torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) 即 L2 范数裁剪。


4. 距离与相似度(D6)

度量 公式 特点
欧氏 $|\mathbf{a}-\mathbf{b}|_2$ 尺度敏感
曼哈顿 $|\mathbf{a}-\mathbf{b}|_1$ 高维稀疏友好
Mahalanobis $\sqrt{(\mathbf{a}-\mathbf{b})^\top \Sigma^{-1}(\mathbf{a}-\mathbf{b})}$ 考虑协方差(Math-00/30
Cosine 距离 $1 - \cos(\mathbf{a},\mathbf{b})$ 嵌入检索

5. 局限与误用(D8)

图 4 局限

误用 说明
未标准化就用 L2 距离 量纲大的特征 dominate
混淆 weight decay 与 L2 正则 AdamW 中二者解耦方式不同
clip 过小 训练过慢、欠拟合
高维 L2「最近邻」失效 维度灾难,需降维或 cosine

6. NumPy / PyTorch 示例(D12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
import torch

x = np.array([3.0, -4.0])
print("L2:", np.linalg.norm(x, 2))
print("L1:", np.linalg.norm(x, 1))

W = np.random.randn(100, 50)
print("Fro:", np.linalg.norm(W, "fro"))

# 梯度裁剪
g = torch.randn(1000)
gn = g.norm(2)
max_norm = 1.0
if gn > max_norm:
g = g * (max_norm / gn)

# cosine 相似度
a = torch.randn(128)
b = torch.randn(128)
cos = torch.nn.functional.cosine_similarity(a.unsqueeze(0), b.unsqueeze(0))

7. 小结

L2 管长度与正则、L1 管稀疏、Frobenius 管矩阵整体大小、clip 管训练稳定。下一篇:07 正定矩阵与条件数

系列导航05 SVD | Math-04 优化

-------------本文结束感谢您的阅读-------------