想象你正面对一口巨大的行李箱,准备出发去远方。你要带的东西(特征)五花八门:很有用的、完全没用的、几十年没穿的、还有两件几乎一模一样的白 T 恤。如果你试图把每一样都硬塞进去,箱子会鼓到变形,拉链随时崩开——在机器学习里,这就叫过拟合:模型把训练数据里的每个细节(包括噪声)都死死记住了,换个新场景就彻底失灵。 这时你需要两招截然不同的收纳术。第一招叫 L1 断舍离:把不必要的东西直接扔出箱子,干净利落,带走的都是必需品;第二招叫 L2 真空压缩:每件东西都压扁带一点,箱子装下了所有物品,却一点儿不占地方。同样一箱行李,前者清空到只剩 essentials,后者啥都留着但都缩了水。本文就带你拆解这两招的底层逻辑、几何直觉和工程选型,弄明白“到底该用 Lasso 还是岭回归”。
学会 L1 与 L2 的区别,你就能在建模时做出真正的工程决策:高维稀疏数据用 Lasso 做特征筛选,相关特征多就用岭回归稳住系数,必要时上弹性网络。这是机器学习面试与实战调参的基本功。
可视化演示
展示L1(Lasso)稀疏解与L2(Ridge)权重衰减的系数对比、约束区域几何(菱形vs圆形)与训练损失曲线。切换模式查看各维度,拖动滑块调节正则化强度λ。
本节配有交互动效(进入视口后自动加载,约 3KB)。
L1与L2系数对比 L1正则化(Lasso)对参数绝对值之和Σ|θ|施加惩罚,产生稀疏解:大量参数被精确压缩为零,实现自动特征选择,适合高维数据 L2正则化(Ridge)对参数平方和Σθ²施加惩罚,让所有系数平滑变小但不为零,适合处理多重共线性问题 L1: Loss + λΣ|θ|, L2: Loss + λΣθ² L1产生稀疏解,L2产生平滑解
过拟合的根源
出发前你对着行李清单纠结:运动鞋要带吧?万一下雨要备把伞吧?那本 800 页的《背包客指南》说不定路上用得上?结果什么都想带,行李箱被塞得拉链都拉不上,一路拖着走三步就爆开一次。模型疯狂拟合训练数据的每个角落,就像你把训练样本里的每个细节都背了下来——包括那些纯属偶然的噪声。训练时它表现得完美无缺,一到新数据就狼狈不堪,这就是过拟合。
在机器学习里,过拟合的根源是模型太“灵活”:参数量多、特征维数高,模型有足够能力把训练集上的每一个点都精确命中。可这些点里混着测量误差、抽样抖动,它们不是真实规律。模型把这些噪声也“记住”了,于是在没见过的新样本上,它反而不知所措。我们需要的不是一台只会背答案的机器,而是一个能总结规律的旅行者。
用数学语言说,普通的最小二乘回归是在解一个“经验风险最小化”问题:只在训练集上降低预测误差。这就是那个不管箱子物理极限、只管把所有东西都塞进去的目标函数。
正则化要做的,就是在这口箱子上加一个“重量限制”:你可以继续往里面装东西,但每装一件都要付出代价。于是模型被迫思考——哪些东西真正值得带?L1 和 L2 给出了两种完全不同的答案。
- 求和符号把每个训练样本的预测误差加起来,衡量模型在全体训练数据上的总体表现。
- 单个样本误差第 i 个样本的真实值减去模型预测值再平方,平方是为了让正负误差不互相抵消。
- 平均与最小化除以样本数量 n 得到平均误差,然后寻找一组权重 w 让这个平均误差最小。
L1正则原理
有位资深旅行家朋友看了你的箱子直摇头:“你就是舍不得扔!”她拿起一件件衣服往床外丢:“这件花衬衫三年没穿了,扔!那本旅行指南网上都查得到,扔!”被她清理后,箱子只留下最核心的几件必需品,轻得像没装东西。L1 正则化就是这位断舍离大师:它对不重要的特征毫不留情,直接清零。
L1 的做法是在原始损失函数后面加一个“绝对值惩罚项”:所有特征权重的绝对值之和。每保留一个权重,就要给它的绝对值“交税”。当某个特征对预测的贡献微乎其微时,与其交税,不如把它扔掉——权重直接变成 0。这就是“稀疏解”的来源,也是 Lasso 回归(L1)能做自动特征选择的原因。
L1 的稀疏性在工程上非常宝贵:假设你有 10 万维基因特征,真正起作用的可能只有几十个。L1 帮你把没用的特征一并丢弃,模型变得可解释、省内存、推理更快。这就是为什么处理高维数据时,Lasso 总是第一选择。
- 原始损失项和上一节一样,衡量模型在训练集上的拟合质量,这是“想塞进箱子的东西”。
- 绝对值惩罚项把所有特征权重的绝对值加起来,每保留一个特征都要付出与权重大小成正比的代价。
- 正则化系数 λ控制惩罚的力度,λ 越大,断舍离越激进,越多权重被压成零,模型越稀疏。
L2正则原理
另一位朋友是收纳狂人,他的理念截然相反:“东西没有一件该扔,只是你不会装!”他拿出真空压缩袋,把羽绒服压成薄片,把毛衣抽成真空,所有物品整整齐齐码进箱子。L2 正则化就是这位真空压缩大师:不丢弃任何特征,只是把每个特征的权重都均匀地“压小一圈”。
L2 的惩罚项是权重的平方和。平方意味着:权重越大,惩罚越重,于是任何嚣张的大权重都会被按下去。但惩罚函数在 0 附近非常平缓,把一个已经很小的权重再压到 0 的“收益”微乎其微,所以 L2 倾向于让所有系数都变小、变均衡,而不是清零。这就是岭回归(Ridge)的思路。
L2 这种“全都压缩一点”的做法,在处理多重共线性时特别有用。比如房价预测里“房屋面积”和“房间数量”高度相关,如果模型给其中一个很大的权重,很容易被噪声带偏。L2 把权重分摊到相关特征上,让解更稳定。它牺牲了一点点稀疏性,换来了对相关特征的温柔以待。
- 平方惩罚项对每个权重求平方再求和,大权重贡献的惩罚按平方级增长,因此谁突出就削谁。
- 与 L1 的形式对比绝对值在 0 点有个尖角,平方在 0 点是个平滑碗底——这个数学差异决定了 L2 不会把系数清零。
- 惩罚权重与 λλ 同样控制压缩强度,λ 越大,整体系数被压缩得越小,但没有特征被彻底移除。
两者的本质区别
两位朋友争论不休:断舍离说“必须扔掉才能轻装上阵”,压缩派说“保留一切才能应对未知”。你觉得都有道理,但直到看见一张几何图才恍然大悟——L1 和 L2 的惩罚项在参数空间里画出了完全不同的“势力范围”,这正是它们行为迥异的根源。
把模型想象成只有两个权重 w₁ 和 w₂,那么惩罚项实际上给权重加了一个约束区域:L1 的 $\sum|w_j|$ 在平面上是一个菱形,L2 的 $\sum w_j^2$ 是一个圆形。模型的解要在“让误差最小”的等值线与约束区域之间找切点。菱形的四个尖角恰好落在坐标轴上,等值线一旦碰到尖角,解就有一个权重正好为零;圆没有尖角,切点总是在坐标平面内部,两个权重都不为零。
所以 L1 的关键词是筛选:它做“有或无”的是非判断,适合特征很多、只有部分有用的场景;L2 的关键词是压缩:它做“多或少”的程度调节,适合特征都相关、整体都该收敛的场景。一个是剪刀手,一个是压缩袋,工具不同,用法自然不同。
(1-2ηλ) 是一个等比缩放系数,它只会让权重均匀“缩水”,永远不会剪到零。- L1 的梯度项绝对值在零点不可导,常用符号函数 sign(w) 代表它的次梯度。当权重为正时剪掉固定 λ,为负时加上固定 λ,把权重往零点猛拽。
- L1 的更新公式每步更新时,除常规梯度外还要减去一个与方向相关的常数项,导致弱特征被直接推到零点并卡住。
- L2 的乘性衰减更新时权重先乘上
(1-2ηλ),这是一个恒小于 1 的正系数,每一步都在等比缩小权重,但乘法永远不产生零。
数学实现与调参
知道了原理,你还得学会具体怎么操作。在工程实现上,L1 和 L2 的求解算法也有差异:L1 因为目标函数在零点不可导,常用坐标下降或近端梯度法,每一步对单个系数做“软阈值”处理;L2 处处光滑,直接用普通梯度下降就行。
软阈值操作是 L1 求解的核心:把一个系数的当前值 z 向零压缩 λ,如果压缩后跨过零就干脆设成 0。这个操作正好对应了“扔掉还是不扔”的开关决策。
调参上,λ 的选择几乎总是靠交叉验证:把训练数据切成几折,轮流用不同的 λ 去训练和验证,找出验证误差最小的 λ。注意一个工程小坑:在加正则之前,一定要先对特征做标准化,否则某个量纲大的特征会被惩罚得更狠,相当于变相歧视它。行李箱里的物品如果大小不一,压缩袋也很难公平对待每一件。
- 符号函数保留 z 的正负方向,因为我们要把 z 往零的方向压缩,方向不能变。
- 取最大值
|z| - λ如果变成负数说明压缩过头了,直接取 0,对应系数归零 - 相乘合成把方向与压缩后的长度乘起来,得到新的系数值;这就是“要么削短、要么清零”的数学表达。
工程选择策略
现在你已经有两套收纳工具了,但去不同的旅行目的地,策略完全不同。去东南亚两周轻装游(特征成千上万、真正有用的没几个),果断上 L1/Lasso,一键筛掉 90% 的无关特征;去北方过冬一个月(特征少但彼此高度相关、哪个都舍不得删),就上 L2/Ridge,让相关特征公平分摊重要性,防止模型在某个特征上孤注一掷。
如果两难怎么办?那就“双管齐下”——弹性网络同时加 L1 与 L2 惩罚。它先靠 L1 做粗筛丢掉垃圾特征,再用 L2 稳住剩余相关特征,综合了两者优点。实践中弹性网络往往比纯 Lasso 表现更稳健。
说到底,正则化就是在“拟合好训练数据”和“保持模型简单”之间找平衡。下次你再面对一口行李箱,先冷静问三个问题:东西多不多?多就 L1;东西之间像不像?像就 L2;又多想又像?那就握紧弹性网络的手。读懂 L1 与 L2 的区别,你就掌握了控制模型复杂度最基础、也最实用的一把钥匙。
- 混合惩罚结构同时包含绝对值项与平方项,两个惩罚项各司其职,分别贡献稀疏性和稳定性。
- 两个超参数λ₁ 主导特征筛选强度,λ₂ 主导系数压缩强度;通过交叉验证可以分别确定,也可以用网格搜索一并调优。
- 组合优化的解既有 L1 的稀疏,又有 L2 的稳定,在处理高维相关特征时比单独使用任一方法更鲁棒。
AI 应用场景
高维基因数据中的特征筛选(L1)
阶段:特征工程与模型选择
解决的问题:基因芯片数据动辄上万维特征,但真正与疾病相关的只有几十个基因。传统做法用手工统计筛选既慢又容易漏,L1 正则化在做逻辑回归时直接把无关基因的系数压成零,同时完成“筛选 + 建模”两步。
具体案例:某肿瘤研究团队对 500 例样本的 20000 个基因表达量建模,使用 Lasso 逻辑回归后,模型自动保留了 47 个关键基因,准确率达 91%,并且这些基因经生物学验证确实与肿瘤通路相关。换成普通逻辑回归则系数杂乱、无法解读。
房价预测中的多重共线性处理(L2)
阶段:模型训练与稳定性优化
解决的问题:房价模型里“房屋面积”“卧室数量”“客厅面积”高度相关,若用普通回归,系数可能忽正忽负、极不稳定。L2 正则化(岭回归)让相关特征公平分摊预测权重,系数平滑且可解释。
具体案例:某房产平台对 5 万条房源建模,特征包含面积、房龄、周边配套等 30 个变量。加入 Ridge 回归后,测试集 RMSE 从 23.6 万降到 19.2 万,且特征重要性排序与市场经验高度一致,业务侧顺利采纳。
信贷评分卡中的弹性网络(混合)
阶段:模型可解释性与风控审核
解决的问题:信贷数据特征多且相互关联,单一 L1 选出的特征不稳定,单一 L2 又无法剔除噪声。弹性网络结合二者,既筛出稳定变量又保留解释性。
具体案例:某消费金融公司构建申请评分卡,用弹性网络从 200 个原始特征中选出 25 个入模变量,KS 值 0.38,同时满足监管对模型可解释性的要求,上线后坏账率下降 12%。
Python 演示
import numpy as np np.random.seed(42)n, p = 200, 7X = np.random.randn(n, p)true_w = np.array([3.0, -2.0, 0.0, 0.0, 1.5, 0.0, 0.0])y = X @ true_w + 0.1 * np.random.randn(n) def train_with_penalty(X, y, penalty, lamb, lr=0.08, iters=1500): n, p = X.shape w = np.zeros(p) b = 0.0 for _ in range(iters): err = X @ w + b - y grad_w = X.T @ err / n grad_b = err.mean() if penalty == 'L1': w = w - lr * (grad_w + lamb * np.sign(w)) else: w = w - lr * (grad_w + 2 * lamb * w) b = b - lr * grad_b return w, b if __name__ == "__main__": print("真实系数:", true_w) for lam in [0.1, 0.5]: w_l1 = train_with_penalty(X, y, 'L1', lam) w_l2 = train_with_penalty(X, y, 'L2', lam) z_l1 = int(np.sum(np.abs(w_l1) < 0.01)) z_l2 = int(np.sum(np.abs(w_l2) < 0.01)) print("lambda =", lam) print(" L1:", np.round(w_l1, 3), "接近0的系数个数:", z_l1) print(" L2:", np.round(w_l2, 3), "接近0的系数个数:", z_l2)
y = X @ true_w + 0.1 * np.random.randn(n)用已知的真实系数生成带噪声的模拟数据,方便事后对比。err = X @ w + b - y计算当前模型的预测误差,这是所有梯度更新的起点。grad_w = X.T @ err / n对损失函数求权重梯度,平均误差乘以特征矩阵转置。if penalty == 'L1':按惩罚类型选择不同的更新规则,两条分支展示核心区别。w = w - lr * (grad_w + lamb * np.sign(w))L1 更新:加上符号函数项,持续把权重向零拉扯。w = w - lr * (grad_w + 2 * lamb * w)L2 更新:加上 2λw 项,相当于等比缩水。z_l1 = int(np.sum(np.abs(w_l1) < 0.01))统计接近 0 的系数个数,验证 L1 的稀疏效果。
常见误区
误区我一直以为 L1 就是把 L2 的平方换成绝对值,差别无非是惩罚力度大小不同,选哪个都差不多。
正解绝对值与平方在零点附近的行为天差地别。L1 在 w=0 处有一个“尖角”,惩罚函数会给落在零点上的解一个“额外奖励”,所以解更容易被钉在坐标轴上,形成稀疏。L2 在 w=0 处导数为 0,只会把系数按比例缩小,永远不会真正到零。就像断舍离是把东西直接扔出箱子,而真空压缩只是把物品压扁——东西依然占地方。
为何常见:两个公式看起来确实只差一个平方的写法,初学者容易停留在表面形式,忽略了零点附近的凸性差异带来的行为质变。
误区L2 的系数会不断变小,那我只要把 λ 调得足够大、训练足够多轮,系数不就能到 0 了吗?
正解L2 的更新中权重乘上 (1-2ηλ),这是乘法缩放。一个非零的数无论乘以多少次正数,只要乘数不为零,结果依然不为零。它只会无限逼近 0,但在数学上永远到不了 0。真正产生 0 的是 L1 的软阈值操作,它允许“压缩过头直接清零”。浮点数下很小的值会被计算机记成 0,但这只是数值精度问题,不是 L2 的性质。
为何常见:用计算机训练时经常看到张量里出现 0.0000,很多人误以为 L2 也产生了稀疏,其实是显示精度欺骗了眼睛。
误区既然过拟合不好,那我应该把 λ 调得很大,让惩罚越重越好,反正正则化是防止过拟合的。
正解λ 太大相当于行李箱小到只能装下一只袜子:L2 会把所有系数压到接近 0,L1 会把所有特征都扔掉,模型在训练集上就学不到任何东西,测试误差同样爆表。正则化本质是偏差与方差的权衡旋钮:λ 太小过拟合,λ 太大欠拟合,通常用交叉验证在中间地带找那个“恰好的 λ”。
为何常见:刚理解“正则化能防过拟合”后,容易从一个极端跳到另一个极端,把正则化当成万能药而非平衡器。
误区L1 功能更多,既能防止过拟合又能自动特征选择,那我以后一律用 L1 不就行了?
正解当特征高度相关时,L1 会凭随机性从相关特征里挑一个、丢掉另一个,解非常不稳定——今天留 A 扔 B,明天可能留 B 扔 A。L2 则把重要性均匀分摊给相关特征,解更稳。另外 L1 在样本数 n 远小于特征数 p 时,最多只能选出 n 个非零系数,有天然上限。工程上常常先用 L2 或弹性网络兜底,而不是无脑上 L1。
为何常见:稀疏性听起来“更高级更酷”,让人忽略了 L1 在相关特征下的不稳定性这一硬伤。
误区L1/L2 是 Lasso 和岭回归的东西,我只做深度学习,这知识跟我没关系。
正解神经网络的权重衰减(weight decay)本质上就是 L2 正则化,Dropout 也被学界认为是一种隐式正则机制;L1 同样可以加在神经网络权重上,促使部分连接稀疏化。只要是“模型复杂度越大、越容易过拟合”的场景,正则化思想就通用。
为何常见:教材喜欢用线性回归做正则化入门案例,讲多了就让人误以为它是线性模型的专属工具。
面试题
Q1. L1 正则化在损失函数中追加的惩罚项是?
- A.特征权重绝对值的总和← 正确答案
- B.特征权重平方的总和
- C.特征权重对数值的总和
- D.特征权重乘积的总和
答案:A。L1 的惩罚项是所有权重绝对值求和,这是它产生稀疏解的基础。B 是 L2 的惩罚项;C 和 D 都不是标准正则化形式。可以把 L1 想象成“每保留一件行李交一件的税”,绝对值正是“清点件数”的数学表达。
Q2. L2 正则化对特征权重产生的典型效果是?
- A.把一部分权重直接清零
- B.让所有权重平滑地缩小← 正确答案
- C.让所有权重均匀地变大
- D.保证权重完全不受影响
答案:B。L2 的平方惩罚会把大权重按比例压缩,使所有系数平滑变小但都不等于零,像真空压缩让每件物品都“缩水”。A 是 L1 的效果;C 与正则化目的相反;D 忽略惩罚项的存在。
Q3. L1 正则化产生的“稀疏解”指的是?
- A.解向量中数值都很小
- B.解向量中含有大量零元素← 正确答案
- C.解向量只包含一个元素
- D.解向量的长度非常短
答案:B。稀疏解意味着很多权重恰好等于 0,只有少数特征被保留,这是 L1 的特征选择能力。数值小但非零是 L2 的特点(A);稀疏不等于只有一个元素(C)或向量长度短(D)。就像断舍离后箱子里只剩少而精的东西。
Q4. 特征之间存在严重多重共线性时,优先选择哪种正则化?
- A.Lasso 回归
- B.岭回归← 正确答案
- C.决策树剪枝
- D.不进行任何处理
答案:B。相关特征同时存在时,L1 会随机挑选一个而丢弃另一个,解不稳定;L2 会把权重平均分摊到相关特征上,让模型更稳。所以岭回归(L2)是处理多重共线性的首选,相当于给所有相似物品公平分配行李位。
Q5. 正则化系数 λ 取值过大时,模型最可能发生的状况是?
- A.过拟合进一步加剧
- B.出现严重的欠拟合← 正确答案
- C.训练误差降为零
- D.有效特征数量增多
答案:B。λ 过大意味着惩罚过猛,所有系数都被压到极小甚至清零,模型在训练集上都拟合不好,更谈不上泛化,这是欠拟合。正则化是偏差和方差的平衡旋钮:λ 太大欠拟合,λ 太小过拟合。过分断舍离的后果是箱子空得什么都没带。
Q6. Lasso 回归对应的是哪种正则化方式?
- A.L1 正则化← 正确答案
- B.L2 正则化
- C.弹性网络
- D.无正则化
答案:A。Lasso(Least Absolute Shrinkage and Selection Operator)名字中的"Absolute"指的就是绝对值惩罚,即 L1 正则化;Ridge(岭回归)才是 L2;弹性网络是两者混合。记住一句话:Lasso 是断舍离,Ridge 是真空压缩。
Q7. 从几何视角看,L1 的约束区域是菱形而 L2 是圆形,这直接导致?
- A.L1 的解更可能落在坐标轴上← 正确答案
- B.L2 的解更可能落在坐标轴上
- C.L1 的约束区域没有尖角
- D.两者的解位置完全相同
答案:A。菱形的四个顶点恰好在坐标轴上,损失函数等值线扩张时先碰到尖角,使某个权重为 0,产生稀疏解;圆形处处光滑,切点几乎不可能精确落在轴上。这就是 L1 和 L2 区别的几何根源,尖角是断舍离的“开关闸门”。
Q8. 关于弹性网络(Elastic Net)的说法正确的是?
- A.综合了 L1 和 L2 两种惩罚← 正确答案
- B.只能做特征选择无法压缩系数
- C.高维下比纯 L1 更稳定← 正确答案
- D.不含任何正则化参数
答案:AC。弹性网络同时包含 L1 和 L2 惩罚项(A 正确),靠 L1 筛特征、靠 L2 稳定相关特征,因此在高维相关场景下比纯 L1 更稳(C 正确)。它既能选特征也能压缩系数(B 错),且至少有两个正则化参数 λ₁ 和 λ₂(D 错)。就像断舍离和真空压缩配合使用。
Q9. 下列哪些方法可以用来抑制过拟合?
- A.增加训练样本的数量← 正确答案
- B.加入 L1 正则化惩罚← 正确答案
- C.加入 L2 正则化惩罚← 正确答案
- D.增加模型的层数和参数
答案:ABC。增加样本(A)让模型见识更多真实规律,正则化(B、C)直接给模型复杂度加约束,都能抑制过拟合。而增加层数和参数(D)会进一步提升模型复杂度,只会让过拟合更严重。给行李箱加更多隔层并不能解决东西太多的问题。
Q10. 关于 L1 与 L2 的工程实践,正确的说法是?
- A.建模前通常先标准化特征← 正确答案
- B.λ 可通过交叉验证来确定← 正确答案
- C.相关特征多时岭回归更稳← 正确答案
- D.Lasso 在任何场景都优于岭回归
答案:ABC。标准化让不同量纲的特征受到公平的惩罚(A 正确);交叉验证是选择 λ 的标准做法(B 正确);相关特征多时 L2 稳定分摊权重、L1 会随机挑选,因此岭回归更稳(C 正确)。Lasso 在高维稀疏场景有优势,但在强相关场景不稳定,并非万能(D 错)。没有一把工具能打天下,先选场景再选工具。