跳到主要内容

范数

一句话版

范数 = “量大小的尺子”。 它把一个向量或矩阵,变成一个非负数,表示“有多大/多长”。有了这把尺子,才能谈“谁更近、谁更远、会不会爆炸、要不要缩小一点”。


范数到底在量什么?

想象你有一根箭头(向量)。你想回答:

  • 这根箭头有多长?(大小)
  • 两个箭头差多远?(距离)
  • 一个“变换”(矩阵)会把箭头拉长几倍?(放大/稳定性)

范数就是专门给这些问题用的“统一尺子”。不同范数 = 不同量法,但都要满足几条基本常识: 不为负、只有零的长度是 0、放大几倍长度也跟着几倍、两段合在一起不会比各自长度之和还短(这就是三角不等式的直白版)。


最常用的三把“尺子”(向量)

  • L2 范数(最像直线距离):把每一维的数“平方后累加再开方”。 直觉:平均地看整体大小,大数会被更重地惩罚。
  • L1 范数(绝对值相加):把每一维的“绝对值”都加起来。 直觉:温和地看整体大小,对“少数很大的值”没那么敏感。
  • L∞ 范数(最大值):只看“最大的那一维”。 直觉:最坏分量有多大

形状直觉(在二维): L2 的“单位圈”是圆;L1 是菱形;L∞ 是正方形。就是不同的量法。

矩阵怎么量?

  • Frobenius 范数:把矩阵当“大号多维数组”,所有元素平方相加再开方。直觉:整体有多大
  • 谱范数(最大奇异值):表示这个矩阵把向量最多能拉长几倍。直觉:最狠的放大量 → 跟稳定性、数值爆炸相关。

直白的小例子

向量 x = [3, -4]

  • L2:大约 5(你会把它当“长度”)
  • L1:7(更“数值相加”的感觉)
  • L∞:4(只在意最大的那一维)

**你要哪把尺子?**看你在意什么: 整体平滑 → L2; 对离群点稳一点/想要稀疏 → L1; 只关心最坏的一维 → L∞。


范数正则是啥?为啥要用?

范数正则 = 在训练里给参数大小“上枷锁”。 做法:在损失函数后面 + 一个“范数罚分”。 目的:不让参数(权重)无限做大,防过拟合、更稳、更好泛化

最常见两种:

1) L2 正则(权重衰减/weight decay)

  • 惩罚 “整体都大” 的参数。
  • 效果:让权重整体变小、变平滑;通常不把权重推到 0,但会“缩小一圈”。
  • 直觉:像给每个参数拴了橡皮筋,拉远了会被拽回来一点。

2) L1 正则(稀疏)

  • 惩罚 “有很多非零” 的参数。
  • 效果:会把很多小权重直接压到 0稀疏(等于自动做特征选择)。
  • 直觉:像扫地,把小的灰尘(小参数)直接清掉。

什么时候用哪种?

  • 默认想稳、想平滑:L2
  • 想让模型更简单、特征更少、可解释:L1
  • 有时两者混用(Elastic Net):既稳又稀疏。

放到训练里怎么理解(超直观)

  • 没正则:模型只关心“训练误差最小”,容易记住训练集细节 → 过拟合。
  • 加 L2:模型在“误差小”和“参数别太大”之间折中 → 更平滑、不易炸
  • 加 L1:模型在“误差小”和“参数大多为 0”之间折中 → 更简单、很多权重消失

一句话收尾

  • 范数:量大小的不同“尺子”(L2 看整体、L1 看总量且促稀疏、L∞ 看最坏)。
  • 范数正则:在训练里给“大小”设约束,防止模型长得又大又复杂,提升稳健和泛化。

如果你愿意,我可以用你的一小段 PyTorch 代码,现场加一行 L2 或 L1 正则,并打印训练前后参数大小(范数)对比,直觉就更强了。