正则化是机器学习中解决过拟合、提升模型泛化能力的核心技术,本质是通过 "给模型加约束" 避免其过度拟合训练数据中的噪声,让模型学到数据的通用规律而非局部波动。
一、为什么需要正则化
过拟合的根源: 模型复杂度 > 数据复杂度
| 问题 | 本质 | 正则化对策 |
|---|---|---|
| 模型太"聪明" | 参数过多,拟合噪声 | 约束参数规模 |
| 数据有"杂质" | 样本少/含噪声 | 强制模型简化 |
| 特征有"冗余" | 高维稀疏特征 | 自动特征筛选 |
核心思想(奥卡姆剃刀)
"如无必要,勿增实体"
在拟合能力与模型简洁性间寻找最优平衡点
二、为什么能解决过拟合?
在损失函数中添加 "惩罚项",限制模型参数的 "大小 / 数量",强制模型 "简化"
-
惩罚项会让模型在 "拟合训练数据" 和 "保持参数简单" 之间做权衡;
最终训练出的模型既不会完全拟合噪声(过拟合),也不会过于简单(欠拟合)
通用公式
J ( θ ) = L ( θ ) ⏟ 拟合能力 + α ⋅ Ω ( θ ) ⏟ 复杂度惩罚 \mathcal{J}(\boldsymbol{\theta}) = \underbrace{\mathcal{L}(\boldsymbol{\theta})}{\text{拟合能力}} + \underbrace{\alpha \cdot \Omega(\boldsymbol{\theta})}{\text{复杂度惩罚}} J(θ)=拟合能力 L(θ)+复杂度惩罚 α⋅Ω(θ)
- L ( θ ) \mathcal{L}(\boldsymbol{\theta}) L(θ):原始损失(MSE/交叉熵)
- Ω ( θ ) \Omega(\boldsymbol{\theta}) Ω(θ):正则化项(L1/L2范数)
- α \alpha α:正则强度 (超参数,需交叉验证调优)
- α = 0 \alpha=0 α=0 → 无正则化(易过拟合)
- α ↑ \alpha \uparrow α↑ → 惩罚增强(防过拟合,但过大导致欠拟合)
关键 : α \alpha α 是"记忆"与"理解"的调节旋钮!
三、三大经典方法对比
1、L2正则化
Ridge回归
惩罚项为参数的 L2 范数平方和
J ( θ ) = L ( θ ) + α ∑ j = 1 n θ j 2 \mathcal{J}(\boldsymbol{\theta}) = \mathcal{L}(\boldsymbol{\theta}) + \alpha \sum_{j=1}^{n} \theta_j^2 J(θ)=L(θ)+αj=1∑nθj2
- 效果 :所有参数趋近0但不为0(参数衰减)
- 特征间的权重会更均衡,降低模型对个别特征的依赖
- 数值大的参数会被大幅惩罚,避免单个参数主导模型
2、L1正则化
Lasso回归
惩罚项为参数的 L1 范数(绝对值和)
J ( θ ) = L ( θ ) + α ∑ j = 1 n ∣ θ j ∣ \mathcal{J}(\boldsymbol{\theta}) = \mathcal{L}(\boldsymbol{\theta}) + \alpha \sum_{j=1}^{n} |\theta_j| J(θ)=L(θ)+αj=1∑n∣θj∣
- 效果 :L1 惩罚会让部分不重要的参数直接变为 0,等价于自动剔除无用特征
- 最终得到 "稀疏参数向量",简化模型的同时实现特征选择
- 生成稀疏模型,提升可解释性
- 高度相关特征选择不稳定
- 使用高维特征筛选(文本/基因数据)
3、Elastic Net
结合 L1 和 L2 的惩罚项,兼顾特征选择和参数稳定
J ( θ ) = L ( θ ) + α ρ ∑ ∣ θ j ∣ + α ( 1 − ρ ) 2 ∑ θ j 2 \mathcal{J}(\boldsymbol{\theta}) = \mathcal{L}(\boldsymbol{\theta}) + \alpha \rho \sum |\theta_j| + \frac{\alpha (1-\rho)}{2} \sum \theta_j^2 J(θ)=L(θ)+αρ∑∣θj∣+2α(1−ρ)∑θj2
- 核心 : ρ \rho ρ 控制L1/L2权重( ρ = 1 \rho=1 ρ=1→Lasso, ρ = 0 \rho=0 ρ=0→Ridge)
- 优势 :兼顾L1稀疏性 + L2稳定性,高维数据首选
- 适用:特征高度相关 + 高维稀疏场景
四、QA
1.为什么 L2 正则化让参数趋近于 0 但不会完全为 0
- 定义带L2正则的损失函数
J ( θ ) = 1 2 m ∑ i = 1 m ( y i − θ x i ) 2 + λ 2 θ 2 J(\theta) = \frac{1}{2m}\sum_{i=1}^m (y_i - \theta x_i)^2 + \frac{\lambda}{2}\theta^2 J(θ)=2m1i=1∑m(yi−θxi)2+2λθ2
- 求导找最优解(令导数=0)
d J ( θ ) d θ = − 1 m ∑ i = 1 m x i ( y i − θ x i ) + λ θ \frac{dJ(\theta)}{d\theta} = -\frac{1}{m}\sum_{i=1}^m x_i(y_i - \theta x_i) + \lambda \theta dθdJ(θ)=−m1i=1∑mxi(yi−θxi)+λθ
- 令导数=0(最优解的必要条件),解这个方程:
− 1 m ∑ i = 1 m x i y i + θ ⋅ 1 m ∑ i = 1 m x i 2 + λ θ = 0 -\frac{1}{m}\sum_{i=1}^m x_i y_i + \theta \cdot \frac{1}{m}\sum_{i=1}^m x_i^2 + \lambda \theta = 0 −m1i=1∑mxiyi+θ⋅m1i=1∑mxi2+λθ=0
- 最终解为
θ = 1 m ∑ i = 1 m x i y i 1 m ∑ i = 1 m x i 2 + λ \theta = \frac{\frac{1}{m}\sum_{i=1}^m x_i y_i}{\frac{1}{m}\sum_{i=1}^m x_i^2 + \lambda} θ=m1∑i=1mxi2+λm1∑i=1mxiyi
分子:是特征x和标签y的协方差(乘以常数),只要x和y有线性相关性,分子≠0
分母, λ > 0 \lambda>0 λ>0,因此分母必然>0;
综上 θ = 非零数 正数 ≠ 0 \theta = \frac{非零数}{正数} ≠ 0 θ=正数非零数=0,且 λ \lambda λ越大,分母越大, θ \theta θ越小(趋近于0)
2.L1 惩罚会让部分不重要的参数直接变为 0
当我们对参数 θ i θ_i θi 求梯度进行优化时,L1 惩罚项的导数是一个常数(±α)
这意味着,无论参数 θ i θ_i θi当前是多大,优化器都会持续不断地施加一个固定大小的 "拉力",试图把它往 0 的方向推
- 如果一个特征很重要 :对应的 θ i θ_i θi 较大。此时,原损失的下降梯度 (为了拟合数据)大于 L1 的惩罚拉力。因此,模型会保留这个参数,让它保持较大的值以保证预测准确度
- 如果一个特征不重要 :对应的 θ i θ_i θi很小或接近 0。此时,L1 的惩罚拉力 大于 原损失的下降梯度。模型会发现:"把这个参数归零,虽然预测损失会增加一点点,但因为去掉了惩罚项,总损失 J(θ) 反而会更低。" 于是,为了整体最优,这个参数就被直接设为了 0