从L1/L2范数到机器学习实践:距离、损失与正则化的本质与应用
1. 从距离到规则:理解范数与距离的数学本质
在机器学习和数据科学的日常工作中,我们经常听到“L1正则化防止过拟合”、“用欧式距离计算相似度”或者“这个损失函数是L2范数的形式”。这些术语——L1、L2、欧式距离、曼哈顿距离——听起来既熟悉又带着一丝抽象。很多朋友在初次接触时,可能会把它们当作一组需要记忆的公式,但一旦深入到模型调优、特征工程或者算法选型时,就会发现,如果只知其然(公式),而不知其所以然(几何意义、统计特性、应用场景),很容易陷入“拍脑袋”决策的困境。
实际上,这些概念都源于一个更基础的数学思想: 范数 。你可以把范数理解为一个“度量尺”,它用来衡量一个向量(可以看作一组数字,比如一个数据点的所有特征值)的“长度”或“大小”。不同的范数,就是不同的测量规则。而“距离”,则是用这把尺子去测量两个向量之间的“间隔”。当我们谈论曼哈顿距离、欧式距离时,本质上是在指定用哪一把“范数尺”去测量两个点之间的间隔。
那么,为什么我们需要这么多把“尺子”呢?这就好比在生活中,测量房间面积用平方米,测量电线长度用米,测量芯片精度用纳米。不同的场景,需要不同的度量标准。在数据的世界里,L1范数(曼哈顿距离)这把尺子更关注各维度变化的绝对值总和,它对异常值不那么敏感,具有“稀疏性”;而L2范数(欧式距离)这把尺子计算的是直线距离,它对大的误差惩罚更重,求导平滑,便于优化。理解这些差异,是你在设计损失函数(模型预测值与真实值差距的度量)和选择正则项(防止模型过于复杂的惩罚项)时,做出明智选择的关键。
本文将从最直观的几何图像出发,拆解L1、L2、Lp、L∞这些范数,以及由它们衍生出的曼哈顿、欧式、切比雪夫等距离的定义与内涵。然后,我们会深入探讨它们如何具体地应用于损失函数和正则化中,并通过一些实际的考量与经验分享,帮助你不仅记住公式,更能理解其背后的逻辑,从而在你的下一个项目中游刃有余地使用它们。
2. 范数:衡量向量大小的多元标尺
在进入具体的距离公式之前,我们必须先夯实“范数”这个概念。对于一个n维向量 x = [x₁, x₂, ..., xₙ]ᵀ,范数是一个函数 || x ||,它将向量映射到一个非负实数,代表该向量的“大小”或“长度”,并且必须满足以下三条性质:
- 非负性 :|| x || ≥ 0,且 || x || = 0 当且仅当 x 是零向量。
- 齐次性 :对于任意标量 α,有 ||α x || = |α| · || x ||。
- 三角不等式 :对于任意向量 x , y ,有 || x + y || ≤ || x || + || y ||。
不同的范数定义,就给出了不同的“测量法则”。我们最常见的是Lp范数族。
2.1 Lp范数:一个通用的家族
Lp范数(其中p ≥ 1)的定义如下:
|| x ||_p = (|x₁|^p + |x₂|^p + ... + |xₙ|^p)^(1/p)
这个公式是理解一切的基础。p是一个参数,取不同的值,就得到了不同的范数。绝对值运算保证了非负性,p次幂加和再开p次根,构成了一个满足上述三条性质的度量。
为什么要有p次幂和开根? 这是为了满足齐次性。如果我们只做p次幂的和,那么对向量乘以一个系数α后,结果会变成α^p倍,不满足齐次性(我们期望是|α|倍)。因此,必须再开p次根,使得缩放系数回归到|α|。
2.2 特例一:L1范数(曼哈顿范数)
当p=1时,L1范数就是所有维度绝对值之和:
|| x ||_1 = |x₁| + |x₂| + ... + |xₙ|
几何图像 :在二维平面上,所有满足|| x ||_1 = 1的点构成一个“菱形”(更准确地说,是一个旋转了45度的正方形)。它的边界在坐标轴上是(±1, 0)和(0, ±1)。你可以想象从原点出发,只能沿着平行于坐标轴的方向行走,走过的总路程就是L1范数。这也是它被称为“曼哈顿范数”的原因,因为曼哈顿的街道大多是棋盘式布局。
核心特性 :
- 稀疏诱导性 :这是L1范数最重要的特性。在优化问题中,L1范数作为惩罚项,倾向于让解向量的部分分量直接变为0。这是因为它的等值线(在二维下是菱形)的“角”是尖的,更容易与目标函数的等高线在坐标轴上相交。在特征选择中,这意味着一部分特征的系数会被压缩至零,从而实现自动特征选择。
- 对异常值相对鲁棒 :由于是绝对值之和,单个维度上的巨大误差(异常值)会被线性地计入总误差,不会像平方项那样被异常放大。这使得基于L1的损失函数(如平均绝对误差MAE)在某些噪声较大的场景下更稳定。
2.3 特例二:L2范数(欧几里得范数)
当p=2时,就是我们最熟悉的L2范数:
|| x ||_2 = √(x₁² + x₂² + ... + xₙ²)
几何图像 :在二维平面上,所有满足|| x ||_2 = 1的点构成一个“圆”。在更高维度是球体或超球面。它测量的是从原点到该点的直线距离。
核心特性 :
- 处处可导,便于优化 :L2范数的平方(即x₁²+x₂²+...)是一个光滑的凸函数,其导数处处存在且连续(除原点外,原点处次梯度也可处理)。这使得基于梯度的优化算法(如梯度下降)可以高效、稳定地工作。
- 对大误差惩罚更重 :因为误差被平方了,所以一个大的误差项(如10)会对总损失产生巨大贡献(100),而多个小误差项(如5个2,平方和为20)的总贡献可能更小。这使得模型会极力避免产生大的预测偏差。
- 解具有唯一性和稠密性 :在优化中,L2正则化通常会让所有参数的系数都向零收缩,但很少会精确等于零,得到的解是稠密的。
2.4 极限情况:L∞范数(切比雪夫范数)
当p → ∞时,Lp范数会收敛于L∞范数,其定义为所有维度绝对值中的最大值:
|| x ||_∞ = max(|x₁|, |x₂|, ..., |xₙ|)
几何图像 :在二维平面上,所有满足|| x ||_∞ = 1的点构成一个“正方形”,其边界是x=±1和y=±1这两对平行线。
直观理解 :它只关心向量在所有维度上“最突出的那一个偏差”。例如,在评估一个系统的多个性能指标时,如果我们采用L∞范数来衡量其与理想指标的差距,那么我们实际上是在关注其“最短板”或“最差的一项指标”有多差。在棋盘上,国王可以横、直、斜走,但一步只能走一格,两个格子间的“国王距离”就是切比雪夫距离,其对应的就是L∞范数。
2.5 更一般的情况:Lp范数(当p为其他值时)
当p取1和2之外的值时,Lp范数也有其应用场景,尽管不如L1和L2常见。
- 0 < p < 1 :此时公式虽然类似,但严格来说不满足范数的三角不等式,通常称为“准范数”。L0“范数”(非零元素个数)可以看作是p->0时的一种极限概念。这些在压缩感知、极度稀疏建模中有理论意义,但因为其非凸性,优化非常困难。
- p > 2 :随着p增大,范数对最大值分量的敏感性急剧增加。当p很大时,Lp范数已经非常接近L∞范数。在实践中,p=1和p=2因其良好的数学性质(凸性、可导性)和明确的统计解释(分别对应拉普拉斯先验和高斯先验)而成为绝对的主流。
注意 :在计算Lp范数时,尤其是自己实现时,需要注意数值稳定性。当p很大或向量维度很高时,直接计算|x_i|^p可能导致数值上溢(超出计算机浮点数表示范围)。一个常见的技巧是在计算时先提取出最大绝对值分量进行缩放。
3. 从范数到距离:度量空间中的“远近”
有了范数这把“尺子”,我们就可以定义两个向量 a 和 b 之间的距离了。最自然的方式就是用它们差值的范数:
d_p( a , b ) = || a - b ||_p
这被称为 闵可夫斯基距离 。它同样是p的一个函数。通过给p赋予不同的值,我们就得到了一系列具体的距离度量。
3.1 曼哈顿距离 (p=1)
d₁( a , b ) = |a₁ - b₁| + |a₂ - b₂| + ... + |aₙ - bₙ|
应用场景与实操考量 :
- 城市街区距离 :最经典的比喻。计算地图上两点的驾驶距离,假设只能沿垂直的街道行驶。
- 计算机视觉 :在图像处理中,两个像素点颜色值的差异可以用曼哈顿距离计算(例如,在RGB空间)。有时它比欧式距离计算更快(省去了平方和开方)。
- 离散空间与网格路径规划 :当移动被限制在网格线上时(如棋盘、集成电路布线),曼哈顿距离是自然的度量。
- 经验之谈 :在特征维度物理意义不同、且量纲差异大的情况下,使用曼哈顿距离前, 必须进行特征标准化 (如Z-score标准化或Min-Max缩放),否则量纲大的特征会完全主导距离计算。例如,“年薪(万元)”和“年龄(岁)”直接相加是毫无意义的。
3.2 欧式距离 (p=2)
d₂( a , b ) = √[(a₁ - b₁)² + (a₂ - b₂)² + ... + (aₙ - bₙ)²]
应用场景与实操考量 :
- 最直观的空间距离 :在我们生活的三维物理世界中,这就是直线距离。
- 机器学习基石 :KNN(K近邻)、K-Means聚类、SVM(支持向量机)中的高斯核等大量算法默认或广泛使用欧式距离。
- 主成分分析(PCA) :PCA试图保留数据在投影后的最大方差,其优化目标本质上是在欧式距离意义下的。
- 一个关键陷阱——“维度灾难” :在高维空间中(比如成百上千个特征),欧式距离会开始变得“反直觉”。所有点对之间的距离会趋于一个相同的值,导致距离度量失去区分能力。这是因为在高维空间中,体积几乎都集中在“壳”上,点与点之间变得“等距”。解决方法是 特征选择 或 降维 (如PCA),而不是盲目使用所有特征计算距离。
3.3 切比雪夫距离 (p=∞)
d_∞( a , b ) = max(|a₁ - b₁|, |a₂ - b₂|, ..., |aₙ - bₙ|)
应用场景与实操考量 :
- 棋盘上的国王步数 :这是最生动的例子。
- 工业与质量控制 :当我们需要保证一组参数 同时 满足某个容差范围时,切比雪夫距离非常有用。例如,一个零件的长度、直径、硬度等多个指标都必须合格,那么用切比雪夫距离衡量其与标准件的差距,可以确保最差的那个指标也不超出限度。
- 并行计算与最坏情况分析 :在算法分析中,如果一项任务完成时间取决于其所有子任务中最慢的那个,那么总时间可以用切比雪夫距离的概念来类比。
- 实操注意 :由于它只关注最大值,因此对数据中的异常值极度敏感。在用于聚类或相似度计算前,仔细的数据清洗和异常值处理至关重要。
3.4 如何选择距离度量?
没有放之四海而皆准的“最佳”距离。选择取决于:
- 数据的本质 :你的特征代表什么?是物理空间坐标、统计指标、还是类别编码?不同量纲的特征必须先标准化。
- 算法的目标 :你是要寻找最相似的样本(KNN),还是要将样本分组使得组内“差异”最小(聚类)?这个“差异”如何定义符合业务逻辑?
- 对异常值的敏感性要求 :L1/曼哈顿距离更鲁棒,L2/欧式距离对大误差更敏感,L∞/切比雪夫距离只关注最差项。
- 计算效率 :曼哈顿距离计算略快于欧式距离(省去开方),但在现代计算中差异通常不显著。更重要的是距离矩阵能否拟合进内存。
一个实用的建议是: 在项目初期,可以尝试多种距离度量(配合适当的预处理),并通过领域知识或下游任务(如聚类轮廓系数、分类准确率)来评估哪种距离更有效。 不要假设欧式距离总是最好的。
4. 损失函数:用距离衡量“预测的代价”
损失函数是模型预测值 ŷ 与真实值 y 之间“差距”的量化。许多经典的损失函数,其核心就是一个距离度量。
4.1 均方误差 (MSE) —— L2距离的平方
MSE = (1/n) * Σ (y_i - ŷ_i)²
这其实就是所有样本上欧式距离平方的均值(忽略了开方,因为开方不影响单调性,且平方形式求导更简单)。
- 为什么用平方? 如前所述,平方项会严重惩罚大的误差。从统计视角看,MSE等价于在噪声服从高斯分布的假设下,进行最大似然估计。高斯分布很常见(中心极限定理),所以MSE应用极广。
- 优点 :凸函数,处处可导,优化方便。
- 缺点 :对异常值非常敏感。一个离谱的错误预测会贡献巨大的损失,导致模型为了拟合少数异常点而扭曲整体。
- 实操心得 :在回归任务中,MSE是默认的起点。但如果你的数据中有明显的异常值(如金融数据中的极端事件),使用MSE前务必进行 异常值检测与处理 ,或者考虑更鲁棒的损失函数。
4.2 平均绝对误差 (MAE) —— L1距离
MAE = (1/n) * Σ |y_i - ŷ_i|
这就是所有样本上曼哈顿距离的均值。
- 为什么用绝对值? 它对所有误差一视同仁,线性惩罚。从统计视角看,MAE等价于噪声服从拉普拉斯分布假设下的最大似然估计。
- 优点 :对异常值鲁棒性强。
- 缺点 :在零点处不可导,优化起来比MSE稍显复杂(需要使用次梯度方法)。收敛速度可能比MSE慢。
-
实操心得
:当你怀疑数据中存在显著噪声或异常值,且不希望模型被它们过度影响时,MAE是很好的选择。在深度学习框架中(如PyTorch, TensorFlow),
L1Loss的实现已经妥善处理了零点处的梯度问题,可以放心使用。
4.3 Huber损失 —— L1与L2的平滑折中
Huber损失试图结合MSE和MAE的优点:在误差较小时使用二次项(像MSE,保证可导和精度),在误差较大时使用一次项(像MAE,降低异常值影响)。
L_δ(e) = { (1/2)e², for |e| ≤ δ, { δ(|e| - 1/2δ), for |e| > δ. 其中 e = y - ŷ,δ是一个超参数。
- 如何选择δ? δ决定了“小误差”和“大误差”的分界线。通常需要通过交叉验证来选择。一个经验法则是,δ可以设为数据中绝对误差的中位数或某个分位数。
- 实操心得 :Huber损失在稳健回归中非常有用,例如在自动驾驶的车辆位置预测中,既要对小的跟踪误差保持敏感,又要能容忍偶尔的传感器跳变。它的实现需要条件判断,但主流框架都提供了支持。
4.4 自定义距离作为损失函数
在一些特定领域,你可以直接使用之前讨论的距离。例如,在图像风格迁移中,为了度量生成图像与内容图像在特征空间上的差异,可能会用到 余弦距离 (1 - 余弦相似度),它关注的是方向而非绝对大小。在自然语言处理中, 编辑距离 (Levenshtein距离)可以直接用作序列生成任务的损失函数的一部分,以衡量预测文本与目标文本的差异。
注意 :损失函数的选择直接影响模型的优化目标。它不仅仅是“哪个效果好就用哪个”的技术问题,更是一个 建模假设问题 。你需要思考:在我的业务场景中,一个大的预测偏差到底有多“糟糕”?这种糟糕程度是线性增长(MAE)还是指数增长(MSE)?想清楚这个问题,才能选出最合适的损失函数。
5. 正则项:用范数施加“约束的智慧”
正则化是防止机器学习模型过拟合的核心技术之一。其思想是在原始的损失函数(如MSE)上,增加一个对模型参数 θ 的惩罚项 R( θ ),形成新的优化目标:
总损失 = 经验损失(数据) + λ * R( θ )
其中λ是正则化强度系数。而这个惩罚项R( θ ),常常就是模型参数的范数。
5.1 L2正则化(岭回归,权重衰减)
R( θ ) = (1/2)|| θ ||₂² = (1/2) Σ θ_i²
这里通常用平方L2范数,系数1/2是为了求导后形式整洁(导数为θ_i)。
- 工作原理 :L2正则化倾向于让所有参数θ_i都尽可能小,且趋向于一个比较均衡的值。从几何上看,它相当于在参数优化时,不仅要求损失函数小,还要求参数向量不能太长(被限制在一个圆/球内)。
- 为什么能防止过拟合? 过拟合往往意味着模型为了拟合训练数据中的噪声和细节,使用了过于复杂的函数,这通常对应着某些参数具有异常大的正值或负值。L2正则化通过惩罚大的参数值,迫使模型使用所有特征,但每个特征的贡献都“温和”一些,从而提高了模型的泛化能力。
- 统计解释 :在贝叶斯视角下,L2正则化等价于给参数赋予了均值为0的高斯先验(也叫正态先验)。
-
实操要点
:
- λ是关键超参数:λ太小,正则化作用微弱;λ太大,模型会被过度约束,导致欠拟合。必须通过验证集或交叉验证来调优。
-
通常
不对偏置项(bias)进行正则化
。因为偏置项只影响输出曲线的上下平移,而不影响模型的弯曲复杂度,正则化它没有意义,反而可能损害模型性能。在代码实现中(如sklearn的
Ridge或深度学习框架的权重衰减),需要注意区分。
5.2 L1正则化(LASSO回归)
R( θ ) = || θ ||₁ = Σ |θ_i|
- 工作原理 :L1正则化不仅倾向于让参数变小,更倾向于让一部分参数 精确地变为0 。这是因为L1范数在坐标轴上有“尖角”,优化过程中,最优解更容易落在这些尖角上,即某些维度为0。
- 核心价值——特征选择 :这是L1正则化最强大的地方。当模型训练完成后,系数为0的特征可以被认为是不重要的,可以直接从模型中剔除。这实现了 嵌入式特征选择 ,即在训练模型的同时完成特征选择。
- 统计解释 :等价于给参数赋予了拉普拉斯先验。
-
实操要点与常见陷阱
:
- 特征共线性问题 :如果特征之间存在高度相关性,LASSO可能会随机地选择其中一个,而将其他相关的特征系数压缩至0。这并不总是符合业务逻辑。相比之下,岭回归(L2)会让相关特征的系数彼此接近。
- 解的唯一性 :当特征数量p大于样本数量n时,岭回归仍有唯一解,但LASSO的解可能不唯一。
- 超参数λ与特征数量 :λ控制着稀疏度。λ越大,被置零的特征越多。可以通过观察“正则化路径图”来理解不同λ下系数值的变化,从而选择合适的λ。
-
算法选择
:由于L1范数在零点不可导,优化需要使用坐标下降、前向后向分裂(FISTA)等特殊算法。幸运的是,
sklearn.linear_model.Lasso等库已经提供了高效实现。
5.3 Elastic Net:L1与L2的结合
为了结合L1和L2的优点(特征选择 + 处理共线性),Zou和Hastie提出了Elastic Net正则化:
R( θ ) = α * || θ ||₁ + (1-α) * || θ ||₂²
这里有两个超参数:λ(总体强度)和 α(混合比例,α=1是LASSO,α=0是Ridge)。
- 应用场景 :当特征数量非常多,且你怀疑特征之间存在分组或相关性时,Elastic Net通常是比单纯L1或L2更好的选择。它既能进行特征选择,又能对相关特征的系数进行相似程度的收缩。
- 实操经验 :调参网格可以设定为λ从大到小变化,α在[0,1]之间取几个值(如0.2, 0.5, 0.8)。由于有两个超参数,搜索成本更高,但模型性能往往更稳健。
6. 实战中的综合应用与经验谈
理解了这些基础概念后,我们来看看在真实的机器学习项目中,如何将它们串联起来决策。
6.1 一个完整的建模流程示例
假设我们在做一个房价预测项目,有100个特征(有些可能是相关的,如“卧室数”和“面积”)。
-
数据预处理与探索 :
- 首先, 必须进行特征标准化 (StandardScaler)。因为无论是计算距离(KNN),还是使用带正则化的模型(Ridge, Lasso),不同尺度的特征都会导致距离失真或正则化不公平(大尺度的特征天生系数小,更容易被惩罚)。
- 通过散点图、箱线图查看异常值。如果发现明显的异常房价(可能是数据录入错误),考虑使用更鲁棒的损失函数(如Huber损失)或在预处理阶段处理它们。
-
基线模型与损失函数选择 :
- 从简单的线性回归开始,使用 MSE损失 作为基线。快速评估其性能。
- 如果验证集表现远差于训练集,说明可能过拟合,或者数据中有异常值影响了MSE。此时可以尝试 MAE损失 ,看验证集性能是否更稳定。
-
引入正则化防止过拟合 :
- 如果特征数量多(100个),样本量相对少,过拟合风险高。首先尝试 岭回归(L2) 。通过交叉验证选择最佳的λ。观察模型系数,它们应该都较小但非零。
- 如果我们还想知道哪些特征是最关键的,可以换用 LASSO回归(L1) 。同样交叉验证选择λ。训练后,检查有多少特征的系数被压缩为0。这些特征可以考虑剔除。 注意 :由于特征可能存在共线性,LASSO的结果需要谨慎解读,可能要和业务知识结合。
- 如果特征间相关性高,且我们既想要稀疏性又想要稳定性,可以尝试 Elastic Net ,并网格搜索λ和α。
-
距离度量的选择(如果在后续步骤用到) :
- 如果我们用KNN来填充缺失值,或者用聚类来划分小区房源类型,就需要选择距离。对于标准化后的连续特征, 欧式距离 是默认选择。如果担心异常值影响聚类中心,可以尝试 曼哈顿距离 。可以先在小样本上测试不同距离度量的聚类轮廓系数。
6.2 深度学习中的具体体现
在深度学习中,范数和距离的概念无处不在:
- 权重衰减 :这本质上就是 L2正则化 。在优化器(如AdamW)中,权重衰减参数就是λ。它被证明对于缓解过拟合、提高泛化能力至关重要。
- 稀疏自编码器 :通过在损失函数中加入编码层激活值的 L1惩罚项 ,可以迫使自编码器学习到稀疏的、类似特征基的表示。
- 损失函数 :除了MSE(L2)和MAE(L1),在分类任务中,交叉熵损失是主流。但值得注意的是,在目标检测(如YOLO系列)中,对于边界框坐标的回归,早期版本使用MSE,但后来普遍采用了如IoU Loss、GIoU Loss等基于重叠面积的损失,因为它们与评估指标(mAP)对齐得更好。这说明了 损失函数的设计需要与最终任务目标一致 。
- 模型剪枝 :一种常见的剪枝方法是,训练一个带有 L1正则化 的网络,那些权重接近0的神经元或连接可以被安全地剪除,从而实现模型压缩。
6.3 避坑指南与常见误区
- 误区:正则化万能 。正则化是解决过拟合的重要工具,但不是唯一工具。获取更多高质量数据、使用更简单的模型、进行特征工程、使用Dropout(神经网络中)等方法同样重要,甚至更根本。
- 陷阱:忘记标准化 。这是最常犯的错误之一。如果特征未标准化,量级大的特征对应的参数即使很小,其贡献也可能很大,导致正则化惩罚“欺软怕硬”,失去公平性。 只要使用基于距离的算法或带L1/L2正则化的模型,标准化(或归一化)几乎是强制步骤。
- 混淆:L1/L2用于损失函数 vs. 用于正则项 。它们数学形式相同,但目的不同。在损失函数中,L1/L2衡量的是 预测误差 ;在正则项中,它们衡量的是 模型参数的大小 。一个针对数据拟合程度,一个针对模型复杂度。
- 超参数调优的优先级 :通常,应先确定模型大致结构(如多项式次数、网络层数),然后再精细调节正则化强度λ。如果λ调得很大模型还是过拟合,可能说明模型本身太复杂,需要简化结构。
- 可视化的重要性 :在调参时,绘制“学习曲线”(训练/验证误差随样本数变化)和“正则化路径图”(系数值随λ变化)能给你带来巨大帮助。它们能直观地告诉你模型是过拟合还是欠拟合,以及每个特征的重要性如何随正则化强度变化。
从L1/L2范数到各种距离度量,再到损失函数和正则项,这条线索贯穿了机器学习的模型评估、优化和泛化。理解它们的几何意义和统计本质,能帮助你在面对具体问题时,不再机械地套用“默认设置”,而是能够有理有据地做出选择,并根据模型反馈进行有效调试。记住,没有最好的,只有最合适的。这些数学工具是你的瑞士军刀,熟练了解每把刀的特性,才能在解决实际问题时游刃有余。
更多推荐


所有评论(0)