L0、L1、L2范数详解:从正则化原理到工程实践

发布时间:2026/10/31 8:23:41

L0、L1、L2范数详解:从正则化原理到工程实践 范数这个概念我最早是在做模型正则化调参的时候被它绊了一跤。当时只知道往损失函数里加个 L2 惩罚项能防止过拟合但完全说不清它为什么有效、什么时候该换成 L1、L0 又是个什么角色。后来踩的坑多了才慢慢把这几兄弟的脾气摸清楚。这篇就围绕 L-P、L0、L1、L2 这几个范数展开把它们的定义、几何直觉、在机器学习和工程优化里的实际作用讲透顺带把参数选择、代码实现和常见误区一并交代清楚。不管你是刚接触正则化的新手还是想回头把基础夯实的老手看完应该都能对为什么加这一项有个更踏实的判断。1. 范数到底是什么从距离直觉到数学定义1.1 用生活场景理解范数范数这个词听起来唬人其实干的事情特别朴素衡量一个向量有多长。你手里有一组数比如 (3, 4)范数就是回答这组数整体有多大的一个函数。只不过大的定义方式不止一种不同的定义方式就对应不同的范数。打个比方你要从家走到公司两地在地图上的坐标差是 (3, 4)。如果你只能走横平竖直的街道像曼哈顿的格子路那你实际走的距离是 3 4 7如果你能走直线像鸟飞过去距离就是 √(3² 4²) 5。这两个数字都是距离但度量方式不同。前者对应 L1 范数后者对应 L2 范数。这个类比是我给新人讲范数时最常用的开场基本一遍就能让人建立起直觉。再往深一层范数不只是算距离它在优化问题里扮演的是约束和惩罚的角色。你想让某个向量尽量小就得先定义什么叫小范数就是这个小的标尺。机器学习里正则化项的本质就是拿范数当尺子去约束模型参数让参数别长得太野。1.2 范数的严格定义与三条公理从数学上说一个函数 ‖·‖ 要被称为范数必须满足三条性质。这三条不是随便定的每一条都对应着我们对长度的合理期待。非负性‖x‖ ≥ 0且 ‖x‖ 0 当且仅当 x 是零向量。长度当然不能是负的而且只有零向量的长度才是零。齐次性‖αx‖ |α|‖x‖α 是标量。你把向量放大两倍长度也该放大两倍这个符合直觉。三角不等式‖x y‖ ≤ ‖x‖ ‖y‖。两点之间走直线不会比绕路更远这是几何上最基本的要求。任何满足这三条的映射都能叫范数。L-P 范数家族就是其中最常用的一类它们统一写成一个公式通过调节参数 p 来切换不同的度量方式。理解了这个统一框架后面看 L0、L1、L2 就不会觉得它们是孤立的几个东西而是同一个家族里的不同成员。1.3 L-P 范数的统一表达式L-P 范数的标准定义是这样的$$|x|p \left( \sum{i1}^{n} |x_i|^p \right)^{1/p}$$其中 p ≥ 1x 是一个 n 维向量。这个公式的意思是把每个分量的绝对值取 p 次方求和再开 p 次方根。p 取不同的值就得到不同的范数。p 1 是 L1p 2 是 L2p 趋于无穷是 L∞最大范数取向量里绝对值最大的那个分量。这里有个关键点很多人会忽略p 必须大于等于 1上面那个公式才构成真正的范数。当 0 p 1 时三角不等式不成立严格来说它不满足范数的定义但因为形式上和 L-P 范数一脉相承工程上还是习惯叫它 L0 范数或者 Lp 伪范数。这个细节在后面讲 L0 的时候还会展开因为它直接关系到优化问题的性质。2. L0、L1、L2 逐个拆解几何直觉与核心差异2.1 L0 范数数非零元素的个数L0 范数的定义特别直白向量中非零元素的个数。比如向量 (0, 3, 0, 4) 的 L0 范数是 2因为只有两个位置不是零。$$|x|_0 #{i : x_i \neq 0}$$它衡量的是稀疏程度。一个向量里零越多L0 范数越小。这个性质在特征选择、压缩感知、稀疏编码里非常吃香因为我们往往希望模型只用到少数几个关键特征把大量无关特征的权重压到零。但 L0 范数有个致命的问题它不连续、不可导而且优化起来是 NP 难的。你想最小化非零元素个数本质上是个组合优化问题随着维度增加可能的组合爆炸式增长。梯度下降这类基于导数的优化方法在它面前完全失效因为它的导数几乎处处为零在零点处又没定义。所以实际工程里我们很少直接优化 L0而是用 L1 作为它的凸松弛convex relaxation这是后话。注意严格来说 L0 不满足范数的三角不等式它是个伪范数。但在讨论稀疏性时大家约定俗成用 L0 这个记号理解它的实际含义比纠结命名更重要。2.2 L1 范数绝对值之和稀疏性的最佳代言人L1 范数就是各分量绝对值之和$$|x|1 \sum{i1}^{n} |x_i|$$还是拿 (3, 4) 举例L1 范数是 3 4 7对应前面说的曼哈顿距离或者出租车距离。它的几何形状在二维平面上是个菱形旋转了 45 度的正方形这个形状是理解 L1 为什么能产生稀疏解的关键。为什么 L1 能稀疏想象你在二维平面上最小化 L1 范数约束是一个以原点为中心的圆比如 ‖x‖₂ 1 的圆。你要找圆上 L1 范数最小的点。因为 L1 的等值线是菱形菱形和圆相切的位置大概率落在坐标轴上——也就是某个分量为零的地方。维度越高这个尖角效应越明显解就越容易落在坐标轴上产生大量零分量。这就是 L1 正则化也叫 Lasso能自动做特征选择的几何解释。L1 还有个好处是它是凸函数可导性虽然不完美在零点不可导但可以用次梯度subgradient或者坐标下降法来优化工程上完全可行。scikit-learn 里的 Lasso 就是用坐标下降实现的。2.3 L2 范数欧氏距离平滑约束的经典选择L2 范数是我们最熟悉的欧氏距离$$|x|2 \sqrt{\sum{i1}^{n} x_i^2}$$(3, 4) 的 L2 范数是 5就是勾股定理。它的等值线是圆形高维是超球面光滑、处处可导优化起来最友好。L2 正则化也叫 Ridge 回归的作用是让参数整体变小、分布更均匀但不会把参数压到恰好为零。因为圆形等值线和约束区域相切的位置一般不会落在坐标轴上所以解的分量通常都是非零的小数。它擅长处理特征之间共线性强的情况通过收缩系数来稳定模型。L2 的导数形式特别干净对 x 求导得到 2x线性关系计算高效。这也是为什么深度学习框架里 weight decay 默认用 L2——它和梯度下降配合得天衣无缝。2.4 三者对比一张表看清差异维度L0 范数L1 范数L2 范数定义非零元素个数绝对值之和平方和开根号几何形状2D无规则离散菱形圆形是否凸否是是可导性几乎处处不可导零点不可导处处可导稀疏性最强直接数非零强产生精确零弱只收缩不归零优化难度NP 难中等坐标下降/次梯度低梯度下降典型应用理论分析、稀疏建模目标Lasso、特征选择Ridge、权重衰减这张表我建议存下来调参时对着看能省不少事。核心记忆点就一句L0 想要稀疏但算不动L1 是 L0 的实用替身L2 负责平滑收缩。3. 正则化实战L1 与 L2 在模型里怎么用3.1 从损失函数看正则项的角色机器学习里加了正则的损失函数长这样$$J(\theta) L(\theta) \lambda |\theta|_p$$前半部分 L(θ) 是原始损失比如均方误差、交叉熵后半部分 λ‖θ‖ₚ 是正则项λ 控制惩罚力度。这个结构的意图很明确既要拟合数据让 L 小又要约束参数让 ‖θ‖ₚ 小两者拉扯出一个平衡点。λ 的取值是个技术活。λ 太大正则项主导模型欠拟合参数被压得太狠λ 太小正则形同虚设过拟合照旧。实际操作中一般用交叉验证在候选集里搜比如 [0.001, 0.01, 0.1, 1, 10] 这种对数刻度上扫一遍。我个人的经验是先粗扫数量级锁定范围后再细调。3.2 L1 正则Lasso的实操要点用 scikit-learn 跑一个 Lasso 回归核心代码就几行from sklearn.linear_model import Lasso from sklearn.preprocessing import StandardScaler from sklearn.model_selection import cross_val_score # 特征标准化是必须的否则惩罚力度会被量纲带偏 scaler StandardScaler() X_scaled scaler.fit_transform(X) model Lasso(alpha0.1, max_iter10000) scores cross_val_score(model, X_scaled, y, cv5, scoringneg_mean_squared_error) model.fit(X_scaled, y) # 查看哪些特征被压成了零 import numpy as np print(非零系数个数:, np.sum(model.coef_ ! 0))这里有个必须强调的坑L1 正则对特征尺度极其敏感。如果一个特征的量纲是几千另一个是零点几惩罚项会不成比例地压制小量纲特征导致选择结果完全失真。所以做 Lasso 之前一定要标准化StandardScaler 或 MinMaxScaler这是硬性前提不是可选项。我见过太多人跳过这步然后抱怨Lasso 选出来的特征没道理八成都是没标准化。另一个实操细节是max_iter要设大一点。坐标下降在特征多、相关性强的数据上收敛慢默认的 1000 次经常不够会报 ConvergenceWarning。设到 10000 基本能压住。3.3 L2 正则Ridge的实操要点Ridge 的代码结构类似from sklearn.linear_model import Ridge model Ridge(alpha1.0) model.fit(X_scaled, y) print(系数范数:, np.linalg.norm(model.coef_, 2))Ridge 对标准化的要求没有 Lasso 那么苛刻因为它是均匀收缩但标准化依然是好习惯。Ridge 的 α 和 Lasso 的 α 含义不完全一样不能直接套用同一个值调参时要分别搜。在深度学习里L2 正则通常不写在损失函数里而是通过优化器的weight_decay参数实现。这里有个容易混淆的点标准的 weight decay 和 L2 正则在某些优化器如 Adam里并不等价。Adam 的自适应学习率会干扰 L2 惩罚的效果所以后来有了 AdamW把 weight decay 从梯度更新里解耦出来。如果你用 Adam 加 weight_decay 发现效果不对可以试试换成 AdamW这个细节很多教程不会提。3.4 弹性网络L1 与 L2 的折中方案当特征之间存在强相关性时Lasso 的表现会不稳定——它倾向于随机挑一个相关特征保留把其他的压零选择结果对数据扰动很敏感。这时候可以用弹性网络Elastic Net把 L1 和 L2 混起来$$J(\theta) L(\theta) \lambda_1 |\theta|_1 \lambda_2 |\theta|_2^2$$from sklearn.linear_model import ElasticNet model ElasticNet(alpha0.1, l1_ratio0.5) # l1_ratio 控制 L1 占比 model.fit(X_scaled, y)l1_ratio0.5表示 L1 和 L2 各占一半。这个组合既保留了 L1 的稀疏选择能力又借 L2 的稳定性缓解了相关特征下的抖动。我在处理基因表达数据、文本特征这类高维强相关问题的时候弹性网络几乎是默认首选。4. 优化视角下的范数为什么 L1 比 L0 好优化4.1 凸松弛把难问题变成可解问题前面提过 L0 优化是 NP 难的工程上不可行。L1 之所以成为 L0 的替身核心在于它是 L0 在单位球上的最紧凸松弛。什么意思在所有凸函数里L1 范数是包住L0 范数最紧的那个。优化 L1 相当于在解一个可解的凸问题同时尽量逼近 L0 想要的效果。这个理论保证来自压缩感知领域的经典结果在一定条件下比如传感矩阵满足 RIP 性质L1 最小化的解和 L0 最小化的解是等价的。这就是为什么 L1 能在实际中替代 L0 做稀疏恢复。理解这一层你就明白 L1 不是拍脑袋选的背后有扎实的数学支撑。4.2 次梯度与软阈值L1 的优化机制L1 在零点不可导那梯度下降怎么跑答案是次梯度。在零点处L1 的次梯度是区间 [-1, 1] 里的任意值优化时取一个合适的值即可。更工程化的做法是软阈值算子soft thresholding$$S_\lambda(x) \text{sign}(x) \cdot \max(|x| - \lambda, 0)$$这个操作的意思是绝对值小于 λ 的分量直接压成零大于 λ 的分量往零的方向缩 λ。这正是 L1 产生稀疏解的微观机制——小系数被一刀切掉大系数被削减。相比之下L2 对应的是硬缩放乘以一个小于 1 的因子永远不会归零。我在实现近端梯度算法proximal gradient时L1 的近端算子就是上面这个软阈值函数代码写起来非常简洁def soft_threshold(x, lam): return np.sign(x) * np.maximum(np.abs(x) - lam, 0)这个函数是理解 L1 稀疏性的钥匙建议亲手实现一遍比看十篇理论文章都管用。4.3 不同 p 值下解的行为对比把 p 从 0 到 2 连续变化解的行为有个渐变过程。p 越小稀疏性越强但优化越难p 越大解越平滑优化越容易。p 1 是个甜点既保留了稀疏能力又保持了凸性。p 在 (0, 1) 之间虽然稀疏性更强但非凸优化会陷入局部最优实际很少直接用。p 值稀疏性凸性优化方法实用程度p 0最强非凸组合优化/贪心理论目标少直接优化0 p 1强非凸迭代重加权等特定场景需谨慎p 1强凸坐标下降/近端梯度广泛使用p 2弱凸梯度下降广泛使用p → ∞无凸线性规划特殊约束场景这个表反映的是一条核心权衡线稀疏性和可优化性此消彼长。选 p 的本质是在这两者之间找平衡点而 p 1 和 p 2 之所以成为主流正是因为它们各自在某个方向上做到了极致且可解。5. 常见误区与排查实录5.1 那些年踩过的范数坑坑一以为 L2 能把参数压成零。刚入门时我以为正则化就是让参数变小加了 L2 后发现系数全是零点几的小数一个零都没有还以为是代码写错了。后来才明白 L2 只收缩不归零想要精确稀疏必须用 L1。这个认知偏差如果不纠正特征选择的活就永远做不对。坑二Lasso 不标准化直接跑。前面提过这里再强调一次。有一次处理一组混合了金额万元级和比率0 到 1的特征没标准化就上 Lasso结果比率类特征全被压零金额类特征全保留模型完全跑偏。标准化之后结果立刻合理了。坑三把 weight_decay 当成万能 L2。在 Adam 优化器上直接调 weight_decay发现正则效果时有时无。查了资料才知道 Adam 的自适应机制会让 L2 惩罚失真换成 AdamW 或者显式在损失里加 L2 项才靠谱。坑四λ 搜得太粗。一开始只在 [0.1, 1, 10] 里搜经常错过最优点。后来改成对数刻度细扫比如np.logspace(-4, 2, 20)效果明显稳定。5.2 问题速查表现象可能原因排查方向解决建议Lasso 系数全为零λ 过大检查 alpha 量级减小 alpha对数刻度重搜Lasso 系数几乎不稀疏λ 过小或未标准化看 alpha 和特征尺度增大 alpha先做标准化Ridge 系数异常大特征共线性严重或未标准化检查特征相关性标准化考虑降维或弹性网络优化不收敛报警告max_iter 不足看迭代次数增大 max_iter检查数据尺度正则后模型欠拟合λ 过大对比训练/验证误差减小 λ或换更弱的正则稀疏结果不稳定特征强相关多次采样看系数变化改用弹性网络5.3 几个容易被忽略的实操心得第一正则项加在哪些参数上是有讲究的。在神经网络里通常只对权重矩阵做正则偏置项不加。因为偏置不影响模型的复杂度惩罚它没意义还可能损害拟合能力。这个细节在框架里一般有默认处理但自己写训练循环时要记得区分。第二L1 和 L2 的量纲不同λ 不能跨模型直接比较。L1 惩罚的是绝对值之和L2 惩罚的是平方和同样数值的 λ 在两者身上的力度完全不一样。调参时别拿 Lasso 的最优 α 直接套到 Ridge 上。第三稀疏性不等于可解释性。L1 选出来的特征虽然少但如果特征之间高度相关它可能随机保留一个而丢掉另一个同样重要的导致解释失真。想要真正可解释还得结合领域知识做特征工程别把 Lasso 当万能钥匙。第四评估正则效果要看验证集不是训练集。正则的本质是牺牲一点训练拟合换取泛化能力训练误差上升是正常的只要验证误差下降就说明方向对了。盯着训练误差调正则参数是本末倒置。6. 从范数到稀疏建模的延伸思考范数这套工具的价值远不止正则化。在压缩感知里L1 最小化能从远少于奈奎斯特采样数的观测中恢复稀疏信号在矩阵补全里核范数奇异值之和相当于矩阵版的 L1被用来做低秩约束在鲁棒优化里L∞ 范数用来控制最坏情况。这些应用的共同逻辑都是用一个范数去刻画你想要的某种简单性然后把它作为约束或惩罚塞进优化问题。我个人的体会是学范数不要停留在背公式而要建立范数即偏好的意识。你选 L1就是在告诉优化器我偏好稀疏解你选 L2就是在说我偏好小而均匀的解你选 L∞就是在说我关心最坏的那个分量。把这个映射关系想清楚遇到新问题时就能自己判断该用哪个范数而不是到处搜L1 和 L2 哪个好。最后分享一个我常用的判断流程先问目标是不是要稀疏要稀疏选 L1 或弹性网络再问特征之间有没有强相关有相关就加 L2 成分最后问优化器是什么Adam 系注意 weight decay 的坑。这三问基本能覆盖八成场景。剩下的两成交给交叉验证和实验毕竟范数选择最终还是要用数据说话。
延伸阅读

更多相关文章

2026/10/31 8:23:41

SQL JOIN操作详解:从基础到性能优化

1. JOIN操作的本质与核心价值SQL中的JOIN操作本质上是通过关联条件将多个表中的数据行进行逻辑组合的过程。想象你手上有两张Excel表格:一张记录客户信息,另一张记录订单详情。JOIN就是让你能够同时看到"哪个客户下了什么订单"的神奇操作。在实…

2026/10/31 8:23:41

工厂本体知识库0.4.0更新解析:自助建模、鉴权加固与合规度翻新

1. 工厂本体知识库到底在解决什么实际问题 工厂里最头疼的事情,往往不是设备坏了,而是老师傅脑子里的东西带不走。一台进口加工中心,报警代码E047,老师傅看一眼就知道是液压夹具压力传感器漂移,顺手调一下参数就好&…

2026/10/31 8:18:41

AI模拟约会匹配算法:实验揭示的三大翻车场景

1. 项目背景与核心思路 这个实验源于我对现代约会软件匹配算法的好奇。作为每天处理海量用户数据的平台,它们宣称能通过AI精准预测用户喜好,但实际匹配效果却常常令人啼笑皆非。我决定用AI模拟100次真实用户的匹配过程,看看算法推荐的"理…

2026/10/31 9:28:45

微信小程序在线课堂助手开发实战

1. 项目背景与核心功能设计 在线教育行业近年来呈现爆发式增长,特别是在疫情后,移动端学习需求激增。微信小程序凭借其免安装、即用即走的特性,成为在线教育场景的重要入口。这个"在线课堂助手"项目正是基于微信小程序平台开发的一…

2026/10/31 9:28:45

OpenRig:基于tmux与MCP的持久化多Agent协作系统实战

1. 从单兵作战到团队协同:OpenRig 到底想解决什么问题 如果你最近半年一直在折腾 AI Agent,大概率经历过这样一个阶段:一开始用单个 Agent 跑通一个任务,感觉惊为天人;接着想让它干点复杂的活,比如同时处理…

2026/10/31 9:28:45

三端词云渲染引擎:SVG轮廓/ECharts、D3球面投影、Canvas手势3D

简介:本资源是一套融合多种实现方式的词云图可视化方案,面向前端开发者、数据可视化学习者及Web交互设计人员,解决传统词云图样式单一、缺乏动态交互与自定义形状支持的问题。压缩包共8个文件(78KB),含3个核…

2026/10/31 9:28:45

Web3.0与区块链开发:去中心化技术实践与趋势

1. 项目背景与核心价值 2025年COSCon开源论坛以"解码去中心化生态创新路径"为主题,标志着Web3.0技术发展进入新阶段。这个年度技术盛会聚集了全球区块链开发者、开源社区领袖和分布式应用创新者,共同探讨去中心化技术如何重塑数字世界的基础架…

2026/10/31 9:28:45

Laya决策模型:421M参数背后的确定性决策架构

1. 这不是“又一个开源模型”,而是决策链路的物理层重构 最近在几个技术群和开发者论坛里,反复看到有人贴出那张截图:终端里跑着 laya --benchmark ,输出一行醒目的 latency: 33ms | params: 421M | task: decision-routing 。…

2026/10/31 9:23:45

AI服务响应异常排查实战:分层定位与依赖故障处理

1. 从一次线上告警说起:AI服务响应异常到底难在哪 凌晨两点十七分,监控大盘上那条原本平稳的P99延迟曲线突然抬头,紧接着错误率从0.3%跳到11%,告警群瞬间炸开。值班同学第一反应是"模型服务挂了",重启了一遍…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑