机器学习进阶(16.5):如何防止过拟合补充篇

张开发
2026/4/11 3:13:03 15 分钟阅读

分享文章

机器学习进阶(16.5):如何防止过拟合补充篇
第 16.5 篇防止过拟合的公式原理——为什么这些方法真的有效在第十六篇里我们已经从直觉上理解了过拟合本质是模型把训练数据学得太细了细到连噪声都当成规律。然后我们介绍了几类常见方法限制模型复杂度正则化剪枝早停增加数据特征选择随机化方法如果只停在直觉层面其实已经够用了。但如果你想真正理解为什么这些方法能减少过拟合那就需要稍微看一点数学结构。你会发现一件很有意思的事这些看起来不同的方法本质上都在控制同一件事模型复杂度。而“复杂度”在数学上往往通过参数大小参数数量函数形状模型自由度来体现。1. 先回忆一下模型在优化什么几乎所有监督学习模型都在做一件事最小化损失函数Loss1n∑i1nL(yi,y^i) Loss \frac{1}{n}\sum_{i1}^{n} L(y_i, \hat{y}_i)Lossn1​i1∑n​L(yi​,y^​i​)例如回归常用平方误差L1n∑(yi−y^i)2 L \frac{1}{n}\sum (y_i - \hat{y}_i)^2Ln1​∑(yi​−y^​i​)2分类常用交叉熵L−1n∑yilog⁡(y^i) L -\frac{1}{n}\sum y_i \log(\hat{y}_i)L−n1​∑yi​log(y^​i​)问题在于如果你只最小化训练误差模型可能会越来越复杂直到把训练数据“记住”。这时虽然训练误差很低但泛化能力下降。所以我们需要给优化目标加一点“约束”。2. 正则化给模型一个“别太复杂”的惩罚项最经典的方法就是在损失函数中增加一个复杂度惩罚项Loss原始损失λ⋅正则项 Loss 原始损失 \lambda \cdot 正则项Loss原始损失λ⋅正则项这里的 λ 控制惩罚强度。λ 越大对复杂模型的惩罚越强。λ 越小模型越自由。这就是正则化的核心思想。3. L2 正则化RidgeL2 正则化会惩罚参数过大Loss1n∑(yi−y^i)2λ∑wj2 Loss \frac{1}{n}\sum (y_i - \hat{y}_i)^2 \lambda \sum w_j^2Lossn1​∑(yi​−y^​i​)2λ∑wj2​这里∑wj2 \sum w_j^2∑wj2​表示所有参数平方的和。它的作用是如果某些参数变得非常大Loss 会变大。因此优化过程会倾向于让参数保持较小数值。为什么参数大容易过拟合当某些权重特别大时模型会对某些特征极端敏感。例如线性模型y^w1x1w2x2 \hat{y} w_1 x_1 w_2 x_2y^​w1​x1​w2​x2​如果w₁ 1000模型对 x₁ 的微小变化都会产生巨大输出变化。这通常意味着模型在贴训练集细节。而不是学习稳定规律。L2 正则化会让权重分布更平滑每个特征贡献适中。不容易过拟合某个局部特征。4. L1 正则化LassoL1 正则化惩罚参数绝对值Loss原始损失λ∑∣wj∣ Loss 原始损失 \lambda \sum |w_j|Loss原始损失λ∑∣wj​∣与 L2 不同的是L1 更容易让某些参数变成 0。这意味着模型会自动忽略部分特征。因此 L1 不仅防止过拟合还能降低特征维度。这也是为什么 L1 经常用于特征选择。5. 为什么正则化能减少方差从偏差-方差角度看加入正则化以后模型自由度降低。这意味着模型不再随意调整参数去贴训练数据。结果通常是偏差略微增加方差明显下降总体泛化误差下降。这就是正则化的意义。6. 决策树剪枝的数学直觉决策树的目标通常是最小化节点纯度指标。例如 Gini 指数Gini1−∑pk2 Gini 1 - \sum p_k^2Gini1−∑pk2​或信息熵Entropy−∑pklog⁡pk Entropy -\sum p_k \log p_kEntropy−∑pk​logpk​树越深节点越纯。训练误差越低。但问题是深层节点往往样本很少。例如某个叶子节点只有 2 个样本纯度当然是 100%。但这种纯度并不可靠。它只是记住了训练样本。剪枝的本质是不要允许节点划分得太细。即不要让模型用极少样本去定义规则。这可以看成限制模型自由度。7. 早停的数学意义很多模型通过迭代优化例如梯度下降wt1wt−η∇Loss w_{t1} w_t - \eta \nabla Losswt1​wt​−η∇Loss在训练初期模型先学习主要规律。随着迭代继续模型开始拟合训练集噪声。训练误差持续下降。但泛化误差可能开始上升。早停的做法是在验证误差最小时停止训练。这相当于限制模型继续增加复杂度。因此早停也可以看作一种隐式正则化。8. 随机森林为什么能减少过拟合随机森林使用 Bagging对数据进行重复采样D1,D2,D3...DB D_1, D_2, D_3 ... D_BD1​,D2​,D3​...DB​每个数据集训练一棵树f1(x),f2(x),...,fB(x) f_1(x), f_2(x), ..., f_B(x)f1​(x),f2​(x),...,fB​(x)最后预测y^1B∑fb(x) \hat{y} \frac{1}{B}\sum f_b(x)y^​B1​∑fb​(x)如果每棵树的误差方差为σ2 \sigma^2σ2平均后的方差Var(y^)σ2B Var(\hat{y}) \frac{\sigma^2}{B}Var(y^​)Bσ2​即树越多方差越低。这也是为什么随机森林比单棵树更稳定。更不容易过拟合。9. GBDT 为什么需要学习率GBDT 每一步更新Fm(x)Fm−1(x)ηhm(x) F_m(x) F_{m-1}(x) \eta h_m(x)Fm​(x)Fm−1​(x)ηhm​(x)η 是学习率。如果 η 太大每棵树修正太多。容易过拟合。如果 η 较小每棵树只做微调。模型变化更平滑。泛化能力更好。因此学习率控制模型拟合速度。也控制复杂度增长速度。10. SVM 正则化项SVM 的目标函数min⁡12∣∣w∣∣2C∑ξi \min \frac{1}{2}||w||^2 C\sum \xi_imin21​∣∣w∣∣2C∑ξi​第一项∣∣w∣∣2 ||w||^2∣∣w∣∣2控制模型复杂度。使间隔最大。第二项∑ξi \sum \xi_i∑ξi​控制分类误差。参数 C 决定更重视误差还是更重视间隔。C 越大模型越努力拟合训练集。更容易过拟合。C 越小模型更强调间隔。泛化更稳。11. 为什么增加数据可以减少过拟合设模型误差EBias2VarianceNoise E Bias^2 Variance NoiseEBias2VarianceNoise方差项通常与样本数量相关Variance∝1n Variance \propto \frac{1}{n}Variance∝n1​样本越多模型对单个样本的依赖越小。偶然性被平均掉。因此更多数据通常意味着更稳定的模型。12. 特征选择为什么也能防止过拟合如果特征过多模型可能找到一些偶然相关性。例如特征数量 p 远大于样本数量 n模型可能总能找到一组参数使训练误差很低。但这些关系未必真实存在。减少特征数量相当于减少模型自由度。因此降低方差。减少过拟合。13. 所有方法其实在控制同一件事现在你可以把这些方法统一起来看方法控制的东西L1/L2参数大小剪枝树深早停训练步数随机森林模型方差学习率每步复杂度增长特征选择输入维度更多数据降低方差它们形式不同但本质都是限制模型复杂度。14. 从公式角度理解过拟合如果模型过于复杂训练误差↓ \downarrow↓方差↑ \uparrow↑泛化误差↑ \uparrow↑正则化等方法的作用是适度增加训练误差。降低方差。最终降低测试误差。这也是为什么训练误差最低的模型不一定是最好的模型。15. 这一篇真正想补充的是什么前面正文讲的是直觉理解为什么要防过拟合。这一篇补充的是数学结构为什么这些方法真的有效。当你从公式角度看会发现机器学习里很多看起来不同的技巧其实都在解决同一个问题如何限制模型复杂度使模型更稳定。一旦理解这一点你在面对新算法时也能更快抓住核心。因为你会下意识去找这个方法是如何控制模型复杂度的。而不是只记它的名字。

更多文章