大家好,欢迎来到《机器学习模型为什么表现不好?》系列的第 一 篇文章!在这个系列中,我们将探讨影响机器学习模型性能的关键因素,并通过理论和实践相结合的方式,帮助大家更好地理解欠拟合和过拟合现象,以及如何优化模型性能。希望大家能在轻松的学习中掌握这些核心知识!
相关文章链接:
- 第一篇:机器学习模型为什么表现不好?理解欠拟合和过拟合(正在阅读)
- 第二篇:机器学习模型为什么表现不好?用空气质量预测案例理解欠拟合和过拟合
- 第三篇:如何通过正则化解决模型过拟合问题
- 第四篇:通过交叉验证优化模型性能
机器学习课程的期末考试临近,峻茂、令仪和自佑三位同学各自选择了不同的复习策略。她们的选择不仅反映了对课程内容的不同理解,也深刻影响了她们的考试表现。让我们看看她们是如何备考的。
峻茂认为机器学习课程并不复杂,平时听课时他觉得自己已经掌握了大部分内容。因此,在复习时,他只是随意翻了几页课本,划了几处自己认为重要的内容,便觉得大功告成了。他并没有花时间去深入理解算法的核心原理,也没有动手做过任何练习。在他看来,考试只不过是对课本知识的简单考察,记住书上的要点就足够应对。然而,考试当天,峻茂一拿到试卷便愣住了。试卷上的题目不仅需要进行复杂的计算,还要求结合实际场景灵活运用所学知识,而他那点浅薄的复习显然不足以应对这些挑战。最终,峻茂的成绩平平,分析其原因不难发现,主要是因为他的复习方式过于表面化,未能有效掌握知识的深层次规律和应用方法。
令仪的复习策略则完全不同。她对考试充满了焦虑,害怕遗漏任何细节,因此她投入了大量时间逐字逐句地背诵课件和教材内容,甚至将所有作业题的答案一一记熟。她还特别关注课上提到的各种细枝末节,例如某些算法在极端情况下的表现,并反复研究这些细节。尽管她的复习看起来非常充分,但考试题目却并未完全按照课本或作业的“剧本”出题。面对稍有变化或嵌入新场景的题目,令仪明显感到力不从心。过于执着于细节使她忽视了知识的整体性和核心规律,最终导致她在考试中没能取得理想的成绩。尽管复习时她付出了巨大努力,但这并未转化为应对考试实际需求的能力。
自佑则选择了一种更加高效且平衡的复习方式。她认真研读教材和课件,确保每个核心概念和算法背后的原理都理解透彻。在掌握基础知识后,她通过完成课后习题和模拟试卷来巩固自己的学习成果,不仅提高了知识的熟练度,还通过实践积累了应对复杂题目的经验。同时,自佑非常注重归纳和总结,将算法的适用场景和局限性条理清晰地整理出来,而不是机械地死记硬背所有内容。考试当天,无论题目如何变化,她都能冷静分析,用学到的规律解决问题。自佑的复习方法不仅让她在考试中表现得游刃有余,也帮助她获得了优异的成绩。她的备考策略证明了有针对性地复习和灵活应用知识的重要性。
这三位同学的备考策略,展示了机器学习模型中的三种典型问题:峻茂的简单复习对应欠拟合(Underfitting),令仪的细节化复习导致过拟合(Overfitting),而自佑的平衡策略展现了理想的泛化能力(Generalization Capacity of the Model)。那么,在实际的机器学习中,我们该如何判断模型是欠拟合还是过拟合?又如何改进模型,找到性能的最佳平衡点?接下来,我们将深入探讨这些问题的核心原理与解决方法。
欠拟合、过拟合与泛化能力的本质
在机器学习中,模型的表现受多种因素影响,而欠拟合、过拟合与泛化能力是评估模型性能的关键问题。通过峻茂、令仪和自佑三位同学的复习策略,我们可以更加形象地理解这些现象的本质。
欠拟合:过于简单的模型:峻茂的复习策略就像一个欠拟合的模型。他仅仅依赖粗浅的学习方法,没有深入理解课程的核心概念,也没有通过实践巩固所学知识。这就像一个过于简单的模型,无法有效捕捉数据中的关键模式和规律。当面对考试这样的“新数据”时,模型的表现自然不尽如人意。欠拟合通常发生在模型复杂度不足、训练不足或输入特征表达能力不充分的情况下,其结果是模型的训练误差和验证误差都很高,表现明显欠佳。
过拟合:过度记忆的模型:令仪的复习策略则对应于过拟合现象。她投入了大量时间记忆细节,甚至试图掌握每一道题的答案。然而,她的复习忽略了对知识的本质理解,过于依赖训练“数据”中的每一个细枝末节,最终在考试中难以灵活应对稍作变化的题目。过拟合的模型正是如此:它在训练数据上表现优异,却无法在验证或测试数据上取得好成绩,因为它过度拟合了训练数据中的细节和噪声,而没有抓住数据的核心规律。
泛化能力:理想的平衡点:自佑的复习策略展示了理想的泛化能力。她通过扎实的理论学习和实践训练,既掌握了课程的核心规律,又通过模拟题灵活运用知识。自佑的复习方式不仅帮助她应对考试中的常规题目,还能从容解决未见过的新题。这种平衡策略与泛化能力良好的模型相似:它在训练数据中学到了关键规律,同时具备应对新数据的适应能力。模型的泛化能力是成功的关键,能够有效避免欠拟合和过拟合,找到理论与实际应用之间的最佳平衡点。
欠拟合、过拟合与泛化能力的衡量
after Hastie et al. (2009)1
那么,我们如何在训练机器学习模型时,运用科学的量化方法衡量模型的欠拟合、过拟合以及泛化能力呢?
这里我们需要引入一个重要的衡量标准:均方误差(Mean Squared Error, MSE)。均方误差通过衡量预测值与真实值之间的平均平方差,以此反映模型的整体预测误差。
假设我们有一个训练数据集,由一组点 $x_1, x_2, \ldots, x_n$ 及其对应的 $y_i$ 组成,其中 $y_i$ 是与每个点 $x_i$ 相关联的真实值,他们之间有如下关系:
$$ y = f(x) + \epsilon $$其中, $\epsilon$ 为噪声项,且满足 $\mathbb{E}[\epsilon | x] = 0$,即噪声项在统计意义上对预测值没有偏向性,从而使得 $f(x)$ 成为 $y$ 的条件期望 $\mathbb{E}[y | x] = f(x)$。此外,噪声项的方差 $Var(\epsilon) = \sigma^2$ 是固定的。
我们期望借助于某种算法,在训练集 $D$ 上找到一个函数 $\widehat{f}(x; D)$, 使其尽可能的接近真实函数 $f(x)$。为了实现这一点,我们通常最小化预测值 $\widehat{f}(x; D)$ 与真实值 $y$ 之间的 均方误差 。也即,我们希望优化以下目标函数:
$$ \min_{\widehat{f}} \text{MSE} = \mathbb{E}_{D, \varepsilon} \left[ \left( y - \widehat{f}(x; D) \right)^2 \right] $$其中 $\mathbb{E}_{D, \varepsilon}$ 表示对数据分布和噪声分布的联合期望;$y$ 是真实值;$\widehat{f}(x; D)$ 是训练集 $D$ 上学到的预测函数。
为了评估模型对未见样本的泛化能力,可以借助于偏差-方差分解(Bias-Variance Decomposition)理论,将测试样本 $x$ 上的期望均方误差分解为三部分:偏差(Bias)、方差(Variance)和不可约误差(Irreducible Error)。具体公式为:
$$ \mathbb{E}_{D, \varepsilon} \left[ \left( y - \widehat{f}(x; D) \right)^2 \right] = \left( \text{Bias}_{D} \left[ \widehat{f}(x; D) \right] \right)^2 + \text{Var}_{D} \left[ \widehat{f}(x; D) \right] + \sigma^2 $$其中,偏差 $\text{Bias}_{D} \left[ \widehat{f}(x; D) \right]$ 是模型的平均预测值与真实值之间的系统性偏离。其数学表达式为
$$ \text{Bias}_{D} \left[ \widehat{f}(x; D) \right] = \mathbb{E}_{D}[\widehat{f}(x; D)] - f(x) $$偏差反映了模型对问题本质的理解程度。如果模型过于简单,例如用线性模型拟合高度非线性的问题,模型可能无法准确捕捉数据的复杂模式,从而导致较高的偏差。这种情况通常表现为欠拟合,即模型无法充分学习数据中的规律。
方差 $\text{Var}_{D} \left[ \widehat{f}(x; D) \right]$ 衡量的是模型预测值在不同训练数据采样下的变化幅度。其数学表达式为
$$ \text{Var}_{D} \left[ \widehat{f}(x; D) \right] = \mathbb{E}_{D}\left[\left(\widehat{f}(x; D) - \mathbb{E}_{D}[\widehat{f}(x; D)]\right)^2 \right] $$方差反映了模型对训练数据中随机噪声的敏感程度。如果模型过于复杂,例如高阶多项式模型,它可能记住了训练数据中的细节和噪声,从而导致在不同训练数据采样下预测值的波动较大。这种情况通常表现为过拟合,即模型对训练数据表现良好,但在测试数据上泛化能力较差。
当然,我们还有一不可约误差项,$\sigma^2 = \mathbb{E}_{y|x}\left[(y-f(x))^2\right]$,这部分误差由数据本身的噪声 $\epsilon$ 引起,通常是无法基于改进模型来降低的固有误差,也就是说,即使我们能够完全知道 $f(x)$,也无法消除这部分误差。
从以上分析可以看出,偏差和方差是影响模型泛化能力的两个关键因素。高偏差表明模型的表达能力不足,难以捕捉数据的复杂模式,通常导致欠拟合;高方差则表明模型过于复杂,过度依赖训练数据中的细节与噪声,从而导致过拟合。因此,理论上,我们希望训练出的模型使偏差尽可能小的同时方差也较小,从而实现最优的泛化能力。那么,在实际情况中,我们能不能同时实现这两目标呢?
值得说明的是,在实际训练中是基于有限样本 ${(x_i, y_i)}_{i = 1}^n$,因此,我们通常使用经验均方误差作为近似:
$$ \text{Empirical MSE} = \frac{1}{n} \sum_{i = 1}^n \left(y_i - \widehat{f}(x; D)\right)^2 $$由此,我们的优化目标可以在实际训练中表述为:
$$ \min_{\widehat{f}} \frac{1}{n} \sum_{i = 1}^n \left(y_i - \widehat{f}(x; D)\right)^2 $$偏差-方差权衡(Bias-Variance Tradeoff)
这个问题的答案是否定的。在实际情况中,偏差和方差往往存在内在的权衡关系,通常难以同时将两者都降低到理想水平。随着模型复杂度的增加,偏差会逐渐减小,因为模型可以更好地拟合训练数据中的模式;但与此同时,方差可能会增加,因为模型对训练数据中的噪声变得更加敏感。反之,降低模型复杂度可以减少方差,但可能会导致偏差升高,因为模型无法捕捉数据的全部结构。这表明,在实际情况中,偏差和方差很难同时降低。
高偏差示意图
高方差示意图
以上两图分别直观地展示了高偏差和高方差的情况:
从高偏差的示意图可以看到,模型的平均预测曲线(绿色)与数据的真实模式存在较大的系统性偏离,表现为明显的偏差(橙色虚线)。这种情况通常发生在模型复杂度较低时,由于模型过于简单,无法捕捉数据的全部结构,导致欠拟合。然而,在这种情况下,模型对不同训练数据采样的敏感性较低,因此方差(蓝色范围)较小。
从高方差的示意图可以看到,模型的平均预测曲线(绿色)能够较好地拟合数据的真实模式,偏差(橙色虚线)显著降低。然而,随着模型复杂度的增加,模型不仅拟合了数据的模式,也过度拟合了训练数据中的随机噪声,导致在不同训练数据采样下预测值波动很大,表现为较高的方差(蓝色范围)。这说明模型虽然具有强大的表达能力,但泛化能力较差。
我们也可以进一步从“理论”上分析,偏差和方差的权衡本质上是模型复杂度的选择问题。假设模型的复杂度为 $C$,我们可以通过对偏差平方求偏导来理解这一关系:
$$ \frac{\partial \text{Bias}^2(C)}{\partial C} = 2 \cdot \left( \mathbb{E}_D[\widehat{f}(x; D)] - f(x) \right) \cdot \frac{\partial \left( \mathbb{E}_D[\widehat{f}(x; D)] \right)}{\partial C} $$这一公式揭示了偏差平方随着复杂度变化的两个关键影响因素:一个是当前偏差本身的大小($\left( \mathbb{E}_D[\widehat{f}(x; D)] - f(x) \right)$),一个是模型的平均预测对复杂度的敏感度($ \frac{\partial \left( \mathbb{E}\_D[\widehat{f}(x; D)] \right)}{\partial C}$)。
为了弄明白偏差函数的平方随复杂度变化趋势,我们可能得首先明白 $\mathbb{E}_D[\widehat{f}(x; D)]$ 表示的是什么?毕竟,我们通常仅有一个模型。在此情景下,计算期望或者平均值似乎没有什么意义。但在偏差-方差分析框架下,我们可以将 $\mathbb{E}_D[\widehat{f}(x; D)]$ 理解为“当我们反复采样不同的训练集 $D$ 并分别训练模型时,模型在输入 $x$ 处的平均预测值”。也就是说,把训练集 $D$ 视为随机变量后,对可能出现的不同训练集重复进行训练并在输入 $x$ 处计算预测,再把这些预测结果取平均。这个想法有助于我们在理论上区分“模型本身与真实函数之间的系统性误差”(即偏差)和“模型对训练集随机扰动所带来的输出波动”(即方差)。如果不把训练过程重复多次,我们就无法明确地看出:究竟是因为模型结构本身有系统性偏差,还是它在不同训练集上表现出了过大波动。
由此,我们可以认为,随着模型复杂度的增加,“平均预测”将越贴近真实函数 $f(x)$,也即 $\lim_{C \to \infty} \left( \mathbb{E}_D[\widehat{f}(x; D)] - f(x) \right) = 0$。因此,我们可以合理地假设 $\mathbb{E}_D[\widehat{f}(x; D)]$ 随着模型复杂度的增长是一个单调递增的函数,也即,$\frac{\partial \left( \mathbb{E}_D[\widehat{f}(x; D)] \right)}{\partial C} > 0$。同时,“贴近”二字也蕴含着 $\mathbb{E}_D[\widehat{f}(x; D)] < f(x)$。因此,$\frac{\partial \text{Bias}^2(C)}{\partial C} < 0$,也就是说 $\text{Bias}^2(C)$ 是一个关于 $C$ 的单调递减的函数。
同理,我们也可以分析方差随模型复杂度增长的变化趋势。对方差求偏导,有
$$ \frac{\partial \text{Var}_D(C)}{\partial C} = 2 \cdot \mathbb{E}_D\left[(\widehat{f}(x; D) - \mathbb{E}_D[\widehat{f}(x; D)])\right] \cdot \frac{\partial \left( \mathbb{E}_D[\widehat{f}(x; D)] \right)}{\partial C} $$方差的变化同样受两个因素影响:一个是当前训练集 $D$ 下的输出 $\widehat{f}(x; D)$ 偏离“平均预测” $\mathbb{E}_D[\widehat{f}(x; D)]$ 的大小,另一个是模型的平均预测对复杂度的敏感度($ \frac{\partial \left( \mathbb{E}\_D[\widehat{f}(x; D)] \right)}{\partial C}$)。如果复杂度增大使得模型输出对训练数据扰动更加敏感,那么这个导数在分布上就会“更大”,导致方差可能随之上升。整体上,可以得出如果模型在不同训练集之间差异很大($\widehat{f}(x; D) - \mathbb{E}\_D[\widehat{f}(x; D)]$值波动大),并且它们还对 $C$ 的微小变化很敏感,那么随着升高方差就会显著增加。直观上,当“平均预测”变得更加灵活时,不同训练集上学到的函数就可能在高维特征空间中有更大振荡,导致方差在整体趋势上升。这与偏差–方差分解中常说的“模型越复杂,越可能对数据噪声敏感,从而方差更大”的直觉是一致的。也就是可以理解为$\text{Var}_D (C)$ 是一个关于 $C$ 的单调递增的函数。
综上,偏差和方差在理论上表现出此消彼长的关系。随着模型复杂度增加,偏差减小,但方差可能增大。因此,在实践中需要仔细权衡偏差与方差,以找到一个最佳的模型复杂度,从而在整体上达到最优的泛化性能。这就有了下面这张著名的偏差-方差权衡的示意图:
Reference
-
Hastie, T., Tibshirani, R., Friedman, J., 2009. The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition, 2nd edition. ed. Springer Nature, New York, NY. ↩︎