AI 数学课程 · 第 40 课,共 180

L1、L2 与 L-无穷范数对大小的不同理解

比较向量的 L1、L2 与 L-无穷范数,观察它们的单位球如何变化,并区分参数惩罚与输入鲁棒性预算。

分享这篇文章

模型可能会对输入中每个坐标看起来都很小的变化十分敏感。要描述这种变化,我们首先得选择一种衡量其大小的方法。L1、L2 和 L-无穷范数会给出不同答案,而它们的单位球恰好揭示了原因。

读完本文后,你将能够比较这些范数、读懂它们在二维空间中的形状,并区分对模型参数的惩罚与对输入变化的预算。

学习目标: 解释不同范数如何改变几何形状与敏感性。

第 39 课(英文)介绍了把范数作为测量向量的规则。官方机器学习数学基础一书的第 3.1 节讨论了常见范数及其几何形状。下文中的示例、比较、交互图和 AI 应用均为原创内容。

一个向量,三种测量

对于实向量 x=(x1,…,xn)x=(x_1,\ldots,x_n),L1 范数将坐标绝对值相加,L2 范数对坐标平方和开平方,L-无穷范数则取绝对值最大的坐标:

取 x=(3,−4)x=(3,-4)。它的 L1 范数是 ∣3∣+∣−4∣=3+4=7|3|+|-4|=3+4=7。L2 范数是 32+(−4)2=9+16=5\sqrt{3^2+(-4)^2}=\sqrt{9+16}=5。L-无穷范数是 max⁡(3,4)=4\max(3,4)=4。向量本身没有变化;每条规则强调的是坐标的不同方面。L1 累加所有坐标的大小,L2 衡量欧几里得长度,L-无穷范数报告最大的单个变化。

在 NumPy 中,显式设置 ord 即可计算各向量范数:

import numpy as np

x = np.array([3.0, -4.0])
np.linalg.norm(x, ord=1)      # 7.0
np.linalg.norm(x, ord=2)      # 5.0
np.linalg.norm(x, ord=np.inf) # 4.0

这里的 x 是一维数组,因此 ord=2 请求的是欧几里得范数。对于二维数组,numpy.linalg.norm 也可以计算矩阵范数;处理一批向量时,要同时指定范数阶数和向量所在的轴。NumPy 分别说明了这些向量和矩阵情形。

单位球让选择一目了然

范数的单位球是指范数不超过 1 的所有向量组成的集合。在二维空间中,L1 单位球是菱形,L2 单位球是圆形,L-无穷单位球是与坐标轴对齐的正方形。例如,(0.6,0.8)(0.6,0.8) 恰好位于 L2 边界,因为 0.62+0.82=1\sqrt{0.6^2+0.8^2}=1。它在 L1 球外,因为 0.6+0.8=1.40.6+0.8=1.4;在 L-无穷球内,因为其最大坐标绝对值为 0.80.8。

在下方移动任一坐标。系统会用这三个边界检验同一个点,表格则会显示每种范数的值,以及该点是否位于对应的单位球内。

同一个向量位于三个形状不同的单位球中
选择向量坐标

使用方向键以 0.1 为步长调整坐标。三种范数都针对同一个向量测量。

对于 x = (0.6, 0.8):L1 为 1.4(外部);L2 为 1(边界上);L-无穷为 0.8(内部)。

同一坐标平面上的 L1、L2 与 L-无穷单位球向量为 (0.6, 0.8)。菱形是 L1 单位球,圆形是 L2 单位球,正方形是 L-无穷单位球。对于 x = (0.6, 0.8):L1 为 1.4(外部);L2 为 1(边界上);L-无穷为 0.8(内部)。-1-1011x₁x₂

单位球边界

  • L1:菱形边界
  • L2:圆形边界
  • L-无穷:正方形边界
所选向量的范数值及其在单位球中的位置
范数数值位置
L11.4外部
L21边界上
L-无穷0.8内部

即使不解读图中颜色或形状,也可以查看状态表。

形状决定了在固定预算下哪些方向可行。例如,在 (0.7,0.7)(0.7,0.7) 处,L-无穷范数为 0.70.7,L2 范数约为 0.990.99,所以该点在这两个单位球内;L1 范数为 1.41.4,因此该点落在菱形外。正方形预算分别限制每个坐标,而圆形预算限制它们合起来的欧几里得长度。

这些范数之间仍有约束。对任意 x∈Rnx\in\mathbb{R}^n,

∥x∥∞≤∥x∥2≤∥x∥1≤n ∥x∥2≤n ∥x∥∞.\lVert x\rVert_{\infty}\leq\lVert x\rVert_2\leq\lVert x\rVert_1 \leq\sqrt{n}\,\lVert x\rVert_2\leq n\,\lVert x\rVert_{\infty}.

最大坐标不可能大于所有坐标平方和的平方根,而后者不可能大于绝对坐标值之和。柯西–施瓦茨不等式给出下一个界,∥x∥1≤n∥x∥2\lVert x\rVert_1\leq\sqrt{n}\lVert x\rVert_2;将每个坐标平方都限制在最大坐标平方以内,则可得到 ∥x∥2≤n∥x∥∞\lVert x\rVert_2\leq\sqrt{n}\lVert x\rVert_{\infty}。因此,这些测量值之间的倍数差异会随维数增长,也可能对两个向量给出不同大小排序。对于 u=(3,0)u=(3,0) 和 v=(2,2)v=(2,2),L1 认为 vv 更大(4>34>3),而 L2 认为 uu 更大(3>83>\sqrt{8})。

参数惩罚与输入预算回答的是不同问题

在模型拟合过程中,正则化会在目标函数中加入一项,以抑制某些参数取值。训练目标可能包含 λ1∥w∥1\lambda_1\lVert w\rVert_1 或 λ2∥w∥22\lambda_2\lVert w\rVert_2^2,其中 ww 是学习得到的参数向量,每个 λ\lambda 用来设定惩罚强度。L1 惩罚可能使系数变得稀疏;平方 L2 惩罚通常会缩小许多系数,但一般不会让它们变成零。特征尺度和惩罚强度都会影响结果。平方 L2 表达式是范数的平方,本身并不是范数。

输入扰动预算则对另一个向量应用范数。如果将 δ\delta 加到输入 xx 上,约束 ∥δ∥∞≤ε\lVert\delta\rVert_{\infty}\leq\varepsilon 表示每个坐标的变化都不超过 ε\varepsilon。如果图像值已缩放到 [0,1][0,1],那么 ε\varepsilon 就以该尺度计量;将修改后的图像裁剪回有效输入范围是另一项独立约束。

Goodfellow、Shlens 和 Szegedy 的快速梯度符号法使用了 L-无穷几何。对于非定向攻击,令 J(θ,x,y)J(\theta,x,y) 表示模型在参数 θ\theta、输入 xx 和标签 yy 下的损失。单步更新为

δ=ε sign⁡ ⁣(∇xJ(θ,x,y)).\delta=\varepsilon\,\operatorname{sign}\!\left(\nabla_xJ(\theta,x,y)\right).

梯度估计的是输入发生微小变化时损失会如何变化。沿着该方向为每个坐标选择符号,可以在每个坐标都不超过 ε\varepsilon 的同时,让一阶损失增幅最大。这是局部的一步构造:它不保证一定会导致误分类,效果取决于模型和输入。较小的 L-无穷值也不保证变化难以察觉或符合现实。这个界限说明的是逐坐标预算;人们仍需判断该预算是否符合自己关心的威胁。

评估模型敏感性时,要记录允许变化的向量、约束它的范数,以及预算的单位。这样,“在 ε\varepsilon 范围内具有鲁棒性”就有了明确的几何含义,不会把假设藏在小这个词里。

检查理解情况

Question 1

对于 x = (3, −4),计算它的 L1、L2 和 L-无穷范数,并写出每一步运算。

Show the step-by-step solution

L1 将绝对值相加:∣3∣+∣−4∣=7|3|+|-4|=7。L2 先平方、求和,再开平方: sqrt(3² + (−4)²) = sqrt(9 + 16) = 5 。L-无穷范数保留最大的绝对坐标:max⁡(3,4)=4\max(3,4)=4。

Question 2

对于 x = (−2, 1, −3),哪个范数最大?三个范数的值分别是多少?

Show the step-by-step solution

L1 为 2+1+3=62+1+3=6。L2 为 sqrt((−2)² + 1² + (−3)²) = sqrt(4 + 1 + 9) = sqrt(14) ≈ 3.74 。L-无穷范数为 max⁡(2,1,3)=3\max(2,1,3)=3。这里 L1 最大,因为非负数值相加后,至少不会小于欧几里得组合值或最大的单个坐标。

Question 3

点 (0.7, 0.7) 是否位于每个二维单位球内?先计算范数,再作判断。

Show the step-by-step solution

L1 为 0.7+0.7=1.40.7+0.7=1.4,所以该点在 L1 球外。L2 为 sqrt(0.7² + 0.7²) = sqrt(0.98) ≈ 0.99,所以该点在 L2 球内。L-无穷范数为 max⁡(0.7,0.7)=0.7\max(0.7,0.7)=0.7,所以该点在正方形形状的 L-无穷球内。

Question 4

解释为什么 L-无穷范数不可能超过 L2 范数,以及为什么 L2 范数不可能超过 L1 范数。

Show the step-by-step solution

令 m=max⁡i∣xi∣m=\max_i|x_i|。有一个坐标的平方等于 m2m^2,其他坐标平方均非负,因此 ∑ixi2≥m2\sum_i x_i^2\geq m^2。开平方可得 ∥x∥2≥m=∥x∥∞\lVert x\rVert_2\geq m=\lVert x\rVert_{\infty}。接下来,非负数之和的平方等于各自平方之和再加上非负的交叉项,因此 (∑i∣xi∣)2≥∑i∣xi∣2(\sum_i|x_i|)^2\geq\sum_i|x_i|^2。开平方便得到 ∥x∥1≥∥x∥2\lVert x\rVert_1\geq\lVert x\rVert_2。

Question 5

一个含 1,000 个坐标的扰动满足 ||δ||∞ ≤ 0.01。它对每个坐标施加什么限制?由此可以得到 ||δ||₁ 的什么上界?

Show the step-by-step solution

L-无穷条件表示每个坐标 ii 都满足 ∣δi∣≤0.01|\delta_i|\leq0.01。将 1,000 个绝对值相加,可得 ∥δ∥1=∑i∣δi∣≤1,000(0.01)=10\lVert\delta\rVert_1=\sum_i|\delta_i|\leq1{,}000(0.01)=10。因此,在高维输入中,每个坐标的最大变化很小,总绝对变化仍可能较大。

Question 6

为什么计算一批向量中每个向量的范数时,NumPy 代码必须指定 axis?为什么不能想当然地认为矩阵的默认值表示 L2 算子范数?

Show the step-by-step solution

对于包含多个向量的数组,axis 参数会指出哪个坐标维度属于每个向量;如果不指定它,NumPy 可能会将二维数组视为矩阵并计算矩阵范数。矩阵 2-范数是最大奇异值,而向量 2-范数是欧几里得长度。说明数组结构并明确指定 ord 和 axis,可以让目标量清楚无误。

Question 7

对模型权重使用 L2 惩罚,能否保证模型对受 L-无穷范数约束的输入变化具有鲁棒性?请说明涉及的两个向量。

Show the step-by-step solution

不能。拟合模型时,惩罚作用于参数向量 ww。L-无穷鲁棒性预算则约束输入扰动向量 δ\delta。它们在模型的不同部分约束不同的量,因此仅有权重惩罚并不能证明所述的输入鲁棒性保证成立。

Question 8

若相对于输入的损失梯度为 g = (2, −1),且 ε = 0.01,非定向快速梯度符号步骤会选择什么扰动?g 预测的一阶损失变化是多少?

Show the step-by-step solution

坐标符号为 (+1,−1)(+1,-1),因此这一步是 δ=0.01(1,−1)=(0.01,−0.01)\delta=0.01(1,-1)=(0.01,-0.01)。预测的一阶变化为 g⋅δ=2(0.01)+(−1)(−0.01)=0.03g\cdot\delta=2(0.01)+(-1)(-0.01)=0.03。这是根据梯度得到的线性近似,并不保证精确损失一定增加 0.03,也不保证预测结果会改变。

资料来源

  1. Mathematics for Machine Learning book PDF, Section 3.1
  2. NumPy documentation: numpy.linalg.norm
  3. Goodfellow, Shlens, and Szegedy: Explaining and Harnessing Adversarial Examples