L1、L2 与 L-无穷范数对大小的不同理解
比较向量的 L1、L2 与 L-无穷范数,观察它们的单位球如何变化,并区分参数惩罚与输入鲁棒性预算。
模型可能会对输入中每个坐标看起来都很小的变化十分敏感。要描述这种变化,我们首先得选择一种衡量其大小的方法。L1、L2 和 L-无穷范数会给出不同答案,而它们的单位球恰好揭示了原因。
读完本文后,你将能够比较这些范数、读懂它们在二维空间中的形状,并区分对模型参数的惩罚与对输入变化的预算。
学习目标: 解释不同范数如何改变几何形状与敏感性。
第 39 课(英文)介绍了把范数作为测量向量的规则。官方机器学习数学基础一书的第 3.1 节讨论了常见范数及其几何形状。下文中的示例、比较、交互图和 AI 应用均为原创内容。
一个向量,三种测量
对于实向量 ,L1 范数将坐标绝对值相加,L2 范数对坐标平方和开平方,L-无穷范数则取绝对值最大的坐标:
取 。它的 L1 范数是 。L2 范数是 。L-无穷范数是 。向量本身没有变化;每条规则强调的是坐标的不同方面。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-无穷单位球是与坐标轴对齐的正方形。例如, 恰好位于 L2 边界,因为 。它在 L1 球外,因为 ;在 L-无穷球内,因为其最大坐标绝对值为 。
在下方移动任一坐标。系统会用这三个边界检验同一个点,表格则会显示每种范数的值,以及该点是否位于对应的单位球内。
对于 x = (0.6, 0.8):L1 为 1.4(外部);L2 为 1(边界上);L-无穷为 0.8(内部)。
单位球边界
- L1:菱形边界
- L2:圆形边界
- L-无穷:正方形边界
| 范数 | 数值 | 位置 |
|---|---|---|
| L1 | 1.4 | 外部 |
| L2 | 1 | 边界上 |
| L-无穷 | 0.8 | 内部 |
即使不解读图中颜色或形状,也可以查看状态表。
形状决定了在固定预算下哪些方向可行。例如,在 处,L-无穷范数为 ,L2 范数约为 ,所以该点在这两个单位球内;L1 范数为 ,因此该点落在菱形外。正方形预算分别限制每个坐标,而圆形预算限制它们合起来的欧几里得长度。
这些范数之间仍有约束。对任意 ,
最大坐标不可能大于所有坐标平方和的平方根,而后者不可能大于绝对坐标值之和。柯西–施瓦茨不等式给出下一个界,;将每个坐标平方都限制在最大坐标平方以内,则可得到 。因此,这些测量值之间的倍数差异会随维数增长,也可能对两个向量给出不同大小排序。对于 和 ,L1 认为 更大(),而 L2 认为 更大()。
参数惩罚与输入预算回答的是不同问题
在模型拟合过程中,正则化会在目标函数中加入一项,以抑制某些参数取值。训练目标可能包含 或 ,其中 是学习得到的参数向量,每个 用来设定惩罚强度。L1 惩罚可能使系数变得稀疏;平方 L2 惩罚通常会缩小许多系数,但一般不会让它们变成零。特征尺度和惩罚强度都会影响结果。平方 L2 表达式是范数的平方,本身并不是范数。
输入扰动预算则对另一个向量应用范数。如果将 加到输入 上,约束 表示每个坐标的变化都不超过 。如果图像值已缩放到 ,那么 就以该尺度计量;将修改后的图像裁剪回有效输入范围是另一项独立约束。
Goodfellow、Shlens 和 Szegedy 的快速梯度符号法使用了 L-无穷几何。对于非定向攻击,令 表示模型在参数 、输入 和标签 下的损失。单步更新为
梯度估计的是输入发生微小变化时损失会如何变化。沿着该方向为每个坐标选择符号,可以在每个坐标都不超过 的同时,让一阶损失增幅最大。这是局部的一步构造:它不保证一定会导致误分类,效果取决于模型和输入。较小的 L-无穷值也不保证变化难以察觉或符合现实。这个界限说明的是逐坐标预算;人们仍需判断该预算是否符合自己关心的威胁。
评估模型敏感性时,要记录允许变化的向量、约束它的范数,以及预算的单位。这样,“在 范围内具有鲁棒性”就有了明确的几何含义,不会把假设藏在小这个词里。
检查理解情况
Question 1
对于 x = (3, −4),计算它的 L1、L2 和 L-无穷范数,并写出每一步运算。
Show the step-by-step solution
L1 将绝对值相加:。L2 先平方、求和,再开平方:
sqrt(3² + (−4)²) = sqrt(9 + 16) = 5
。L-无穷范数保留最大的绝对坐标:。
Question 2
对于 x = (−2, 1, −3),哪个范数最大?三个范数的值分别是多少?
Show the step-by-step solution
L1 为 。L2 为
sqrt((−2)² + 1² + (−3)²) = sqrt(4 + 1 + 9) = sqrt(14) ≈ 3.74
。L-无穷范数为 。这里 L1
最大,因为非负数值相加后,至少不会小于欧几里得组合值或最大的单个坐标。
Question 3
点 (0.7, 0.7) 是否位于每个二维单位球内?先计算范数,再作判断。
Show the step-by-step solution
L1 为 ,所以该点在 L1 球外。L2 为
sqrt(0.7² + 0.7²) = sqrt(0.98) ≈ 0.99,所以该点在 L2
球内。L-无穷范数为 ,所以该点在正方形形状的 L-无穷球内。
Question 4
解释为什么 L-无穷范数不可能超过 L2 范数,以及为什么 L2 范数不可能超过 L1 范数。
Show the step-by-step solution
令 。有一个坐标的平方等于 ,其他坐标平方均非负,因此 。开平方可得 。接下来,非负数之和的平方等于各自平方之和再加上非负的交叉项,因此 。开平方便得到 。
Question 5
一个含 1,000 个坐标的扰动满足 ||δ||∞ ≤ 0.01。它对每个坐标施加什么限制?由此可以得到 ||δ||₁ 的什么上界?
Show the step-by-step solution
L-无穷条件表示每个坐标 都满足 。将 1,000 个绝对值相加,可得 。因此,在高维输入中,每个坐标的最大变化很小,总绝对变化仍可能较大。
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
不能。拟合模型时,惩罚作用于参数向量 。L-无穷鲁棒性预算则约束输入扰动向量 。它们在模型的不同部分约束不同的量,因此仅有权重惩罚并不能证明所述的输入鲁棒性保证成立。
Question 8
若相对于输入的损失梯度为 g = (2, −1),且 ε = 0.01,非定向快速梯度符号步骤会选择什么扰动?g 预测的一阶损失变化是多少?
Show the step-by-step solution
坐标符号为 ,因此这一步是 。预测的一阶变化为 。这是根据梯度得到的线性近似,并不保证精确损失一定增加 0.03,也不保证预测结果会改变。