关键词解释:范数(Norm)
在机器学习与深度学习中,范数(Norm) 是衡量向量或矩阵“大小”的一种重要工具。它不仅用于计算距离、正则化模型参数,还在损失函数、梯度下降等核心算法中扮演关键角色。本文将深入浅出地讲解范数的定义、常见类型及其在实际中的应用。
🔍 一、什么是范数?
范数是一种函数,用来衡量向量或矩阵的“长度”或“规模”。它满足以下三个基本性质:
- 非负性:
,且
当且仅当
- 齐次性:
,其中
是标量
- 三角不等式:
在机器学习中,我们最常用的是 Lp 范数,其通用公式为:
其中:
是一个向量(或矩阵)
是一个正实数,决定了范数的类型
🧮 二、常见的 Lp 范数详解
1. L₀ 范数(Zero Norm)
虽然名字叫“L₀”,但它并不是严格意义上的范数(不满足三角不等式),但常被借用。
![]()
✅ 用途:
- 表示稀疏性,即有多少个元素是非零的;
- 用于特征选择,比如希望模型只使用少数几个重要特征。
⚠️ 注意:由于 L₀ 不是凸函数,优化困难,通常用 L₁ 作为替代。
2. L₁ 范数(Manhattan Norm / Taxicab Norm)
表示向量中所有元素绝对值之和。
✅ 特点:
- 对异常值鲁棒(比 L₂ 更稳定);
- 可诱导稀疏解(很多系数变为 0);
✅ 应用:
- Lasso 回归:正则项为
,可实现特征选择;
- 图像处理中的边缘检测;
- 稀疏编码。
3. L₂ 范数(Euclidean Norm)
也称为欧几里得范数,是最常用的范数之一。
✅ 特点:
- 几何上表示向量的“长度”;
- 导数连续,便于梯度计算;
- 使优化问题更平滑;
✅ 应用:
- Ridge 回归:正则项为
,防止过拟合;
- 计算两个向量之间的距离(如余弦相似度);
- 梯度裁剪(Gradient Clipping)中控制梯度大小;
- 深度学习中权重初始化时常用 L₂ 范数约束。
💡 小知识:L₂ 范数平方写作
,避免开方运算,常用于损失函数。
4. L∞ 范数(Infinity Norm)
表示向量中最大绝对值的元素。
✅ 应用:
- 控制模型的最大激活值;
- 鲁棒性分析(对单个极端值敏感);
- 某些对抗攻击防御策略中限制输入扰动范围。
📊 三、不同范数的几何意义对比
| 范数 | 几何形状(单位球) | 特征 |
|---|---|---|
| L₀ | 离散点集 | 稀疏性最强 |
| L₁ | 菱形(二维) | 边界尖锐,易产生稀疏解 |
| L₂ | 圆形(二维) | 平滑,适用于大多数场景 |
| L∞ | 正方形(二维) | 只关注最大值 |
🎯 举个例子:在二维空间中,若要求
,那么:
- L₁ 单位球是一个菱形;
- L₂ 单位球是一个圆;
- L∞ 单位球是一个正方形。
这说明不同范数对“距离”的定义方式不同,从而影响优化路径。
🔧 四、范数在机器学习中的典型应用
1. 正则化(Regularization)
为了防止模型过拟合,我们在损失函数中加入正则项:
-
L₁ 正则化(Lasso):
→ 促使部分权重变为 0,实现自动特征选择。
-
L₂ 正则化(Ridge):
→ 缩小所有权重,减少模型复杂度。
⚠️ 注意:L₁ 和 L₂ 的组合就是 Elastic Net。
2. 梯度裁剪(Gradient Clipping)
在训练深度神经网络时,梯度可能爆炸(太大)。我们可以限制梯度的 L₂ 范数不超过某个阈值:
if ||grad||_2 > threshold:grad = grad * (threshold / ||grad||_2)
这样可以稳定训练过程。
3. 特征缩放与归一化
在训练前,常用 L₂ 归一化处理数据:
使得每个样本的范数为 1,加快收敛速度。
4. 距离度量
在聚类、推荐系统中,常用 L₂ 范数计算两点间距离:
也可以用 L₁ 或其他范数,视任务而定。
🧩 五、拓展:矩阵范数
除了向量范数,还有矩阵范数,例如:
-
Frobenius 范数(类似 L₂):
-
谱范数(最大奇异值):
这些在矩阵分解、主成分分析(PCA)、神经网络权重分析中有广泛应用。
✅ 总结表:常见范数一览
| 范数 | 公式 | 名称 | 特点 | 应用 |
|---|---|---|---|---|
| L₀ |
| 非零元素个数 | 稀疏性 | 特征选择 |
| L₁ | 曼哈顿范数 | 诱导稀疏解,对异常值鲁棒 | 曼哈顿范数 | |
| L₂ | 欧氏范数 | 平滑、常用 | Ridge、距离计算 | |
| L∞ | 最大范数 | 只关注最大值 |
📚 小贴士:如何记忆?
- L₀ 像“计数”:只关心有没有非零元素。
- L₁ 像“折线”:走横纵方向,总路程是绝对值和;
- L₂ 像“直线”:两点之间最短距离是斜边;
🎯 结语
范数不仅是数学中的抽象概念,更是连接理论与实践的桥梁。掌握它,你就掌握了衡量“大小”、“距离”、“复杂度”的一把尺子。
🌱 无论你是刚入门的机器学习新手,还是正在调试模型的工程师,理解范数都能帮你更好地设计模型、调参、诊断问题。
📌 附录:代码实现(Python + NumPy)
import numpy as npx = np.array([1, -2, 3])# L0 范数
l0 = np.count_nonzero(x)# L1 范数
l1 = np.sum(np.abs(x))# L2 范数
l2 = np.linalg.norm(x, ord=2) # 或 np.sqrt(np.sum(x**2))# L∞ 范数
linf = np.max(np.abs(x))print(f"L0: {l0}, L1: {l1}, L2: {l2:.3f}, L∞: {linf}")
输出:
L0: 3, L1: 6, L2: 3.742, L∞: 3
