【机器学习04】过拟合与欠拟合、正则化
文章目录
一、过拟合问题 (The Problem of Overfitting)
在构建机器学习模型的过程中,我们不仅要让模型在已有的训练数据上表现良好,更希望它能对全新的、未见过的数据做出准确的预测。这种对新数据的预测能力被称为模型的泛化(Generalization能力。然而,模型在训练过程中可能会出现一些问题,其中最常见的之一就是“过拟合”。
1.1 欠拟合、适度拟合与过拟合
为了理解过拟合,我们通常将它与“欠拟合”和“适度拟合”进行对比。
1.1.1 回归中的例子

上图展示了用不同复杂度的模型去拟合房价数据:
- 欠拟合 (Underfit):左图使用了一个简单的线性模型
f(x) = w₁x + b。可以看出,这条直线没能很好地捕捉数据的整体趋势,对训练集的拟合程度很差。这种情况也被称为模型存在高偏差 (high bias)。 - 适度拟合 (Just Right):中间的二次函数模型较好地拟合了数据,反映了数据的一般规律。这是一个泛化能力可能较好的模型。
- 过拟合 (Overfit):右图使用了一个非常复杂的高次多项式模型。它为了迁就每一个训练数据点,导致曲线变得异常扭曲。虽然它在训练集上表现得“极其完美”,但它学习到的可能不是数据的普遍规律,而是训练集特有的噪声。这种模型对新数据的预测能力可能会很差,也被称为模型存在高方差 (high variance)。
1.1.2 分类中的例子
同样的概念也适用于分类问题。

- 欠拟合 (Underfit):左图用一条直线作为决策边界,无法有效地区分两类数据。
- 适度拟合 (Just Right):中间的决策边界比较平滑,合理地将两类数据分开。
- 过拟合 (Overfit):右图的决策边界为了将每一个训练样本都正确分类,变得极其复杂和扭曲,泛化能力堪忧。
总的来说,过拟合指的是模型对训练数据学习得“太好了”,以至于把训练数据中的一些噪声和 случайные波动都当作了通用模式,从而损害了模型的泛化能力。
1.2 如何解决过拟合
既然过拟合会损害模型的泛化能力,我们应该如何应对呢?主要有以下几种方法:
-
收集更多的训练样本

如上图所示,一个过拟合的模型在少量数据上可能非常扭曲,但如果训练数据足够多,模型为了拟合所有数据,就不得不学习到一个更平滑、更具泛化性的规律。 -
进行特征选择

当特征数量非常多时,我们可以手动筛选,或者使用一些算法来自动选择一部分特征,剔除那些可能引入噪声或不相关的特征。缺点是,这个过程可能会舍弃掉一些有用的信息。 -
正则化 (Regularization)

正则化是一种非常强大且常用的技术。它的核心思想是保留所有的特征,但是减小模型参数wⱼ的大小。
二、正则化 (Regularization)
2.1 正则化的直觉
我们来看一个例子。一个过拟合的高次多项式模型,其参数 w 的值往往非常大。

正则化的目标就是通过某种方式,在训练过程中“惩罚”过大的参数值,使得最终学习到的参数 w 都比较小。一个参数值较小的模型,通常意味着一个更“简单”、更“平滑”的函数曲线,从而更不容易过拟合。

直观上,如果我们有一个复杂的模型 f(x) = w₁x + w₂x² + w₃x³ + w₄x⁴ + b,正则化可以使得 w₃ 和 w₄ 的值变得非常接近于0。这样,模型的效果就近似于一个更简单的二次模型 f(x) ≈ w₁x + w₂x² + b,从而有效抑制了过拟合。
2.2 正则化的实现:修改代价函数
那么,如何实现对大参数的“惩罚”呢?我们通过在代价函数 J(w⃗, b) 后面添加一个正则化项来实现。
![[图片]](https://i-blog.csdnimg.cn/direct/30ba1fc28da34899be465641cc14ea6d.png)
以线性回归为例,其正则化后的代价函数变为:J(w⃗, b) = [ (1/2m) * Σ(f(x⁽ⁱ⁾) - y⁽ⁱ⁾)² ] + [ (λ/2m) * Σ(wⱼ²) ]
这个公式由两部分组成:
- 原始代价项:即均方误差,目标是让模型更好地拟合数据。
- 正则化项:目标是保持参数
wⱼ的值尽可能小。
2.2.1 正则化参数 λ
λ (lambda) 是正则化参数。它是一个超参数,用于平衡上述两个目标之间的关系。
![[图片]](https://i-blog.csdnimg.cn/direct/1a89c385606c4acea2fdf518b142d9c6.jpeg)
λ的值越大,对大参数的惩罚就越重,模型就会越努力地让wⱼ的值变小,从而使模型变得更简单(更容易欠拟合)。- 如果
λ=0,则正则化项完全不起作用,模型和原来一样(更容易过拟合)。
如何选择合适的 λ 是机器学习中的一个重要课题。
注意:按照惯例,我们通常不对参数 b 进行正则化。
2.3 正则化在线性回归中的应用
2.3.1 梯度下降更新规则
对新的代价函数求导后,我们得到正则化线性回归的梯度下降更新规则:
wⱼ := wⱼ - α * [ (1/m)Σ(f(x⁽ⁱ⁾)-y⁽ⁱ⁾)xⱼ⁽ⁱ⁾ + (λ/m)wⱼ ]b := b - α * [ (1/m)Σ(f(x⁽ⁱ⁾)-y⁽ⁱ⁾) ]

我们可以对 wⱼ 的更新规则进行变形:wⱼ := wⱼ(1 - α(λ/m)) - α * (1/m)Σ(...)

这个形式揭示了正则化的一个效果:在每次迭代中,它会先将 wⱼ 乘以一个略小于1的数 (1 - α(λ/m)),起到一个“缩减(shrink)”wⱼ 的作用,然后再进行常规的梯度更新。
2.4 正则化在逻辑回归中的应用
同样的技术也完全适用于逻辑回归,以防止其在复杂分类问题中过拟合。
2.4.1 代价函数
我们只需在原始的逻辑回归代价函数后加上同样的正则化项即可。

J(w⃗, b) = [ -(1/m)Σ(...) ] + [ (λ/2m) * Σ(wⱼ²) ]
2.4.2 梯度下降更新规则

令人惊喜的是,正则化逻辑回归的梯度下降更新规则,在形式上与正则化线性回归完全一样!
wⱼ := wⱼ - α * [ ... ]b := b - α * [ ... ]
唯一的区别,依然在于 f(x) 的定义不同(一个是线性函数,一个是Sigmoid函数)。这意味着,在代码实现层面,它们的更新逻辑是可以复用的。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)