学习曲线模拟器 返回
机器学习

学习曲线模拟器 — 过度拟合与欠拟合诊断

通过学习曲线(学习数据量对应的训练误差和验证误差图表)诊断机器学习模型是否存在过度拟合或欠拟合。实时调整模型复杂度、数据量、噪声和正则化,观察两条曲线的收敛情况。

参数设置
真实函数
生成数据的基础函数 f(x)
模型复杂度(多项式次数)
拟合多项式的次数,越大越复杂
训练数据数
学习曲线的右端=最大数据量
数据噪声标准差
观测值上的高斯噪声大小 σ
正则化强度 λ
岭正则化,越大越能抑制过度拟合
计算结果
训练误差(最终)
验证误差(最终)
泛化间隙
诊断
推荐对策
模型复杂度
数据与模型拟合

粗青色曲线为真实函数,点为训练数据,橙色曲线为拟合模型。过度拟合时模型会在噪声间摆动,欠拟合时模型无法跟随真实曲线。

学习曲线 — 对训练数据数的误差
验证误差对模型复杂度的U形曲线
理论与主要公式

$$E_{val}\;=\;\underbrace{\text{bias}^2}_{\text{欠拟合时较大}}+\underbrace{\text{variance}}_{\text{过度拟合时较大}}+\sigma^2$$

验证误差分解为偏差平方、方差和不可约误差 σ² 的和。如果训练误差与验证误差间隙小但误差高,则为欠拟合;如果间隙大,则为过度拟合。

$$\hat{w}\;=\;\big(X^{\!\top}X+\lambda I\big)^{-1}X^{\!\top}y$$

带岭正则化的最小二乘法正规方程。X为范德蒙德设计矩阵,λ为正则化强度。增大λ会抑制权重w,缓解过度拟合。

$$\text{MSE}\;=\;\frac{1}{m}\sum_{i=1}^{m}\big(\hat{f}(x_i)-y_i\big)^2$$

训练误差在训练用的m个点上评估,验证误差在固定的验证数据上评估的均方误差。

什么是学习曲线

🙋
经常听到"学习曲线"这个词,但它到底是什么图表?
🎓
简单来说,它描绘的是"数据增加时模型误差如何变化"。横轴是用于训练的数据数量,纵轴是误差。有两条线,一条是训练数据本身的误差,另一条是单独留出的验证数据的误差。数据少时,模型可以死记硬背训练数据,所以训练误差接近0,但验证误差很大。增加数据时,训练误差略微上升,验证误差下降。学习曲线就是观察这两条线的动向。
🙋
看这两条线能看出什么?
🎓
这非常便利。有人说它是应用机器学习中最有用的诊断工具。关键是看"两条线的最终高度"和"两条线的间隙"。如果两条线都在高位置紧贴在一起,说明模型过于简单,无法表达真实关系——这是欠拟合。反之,如果训练误差接近0,但验证误差很大,间隙长期无法闭合——这是过度拟合,模型记住了噪声。
🙋
欠拟合时增加数据似乎能解决问题…?
🎓
这正是看学习曲线的最大好处。高偏差(欠拟合),两条线不是重合在"低位"而是"高位",已经趋向平台。即使加更多数据,两条线还是会贴在那个高天花板上。换句话说,数据收集会浪费。要解决欠拟合,需要提高模型复杂度、添加特征或弱化正则化。比如,用面积进行住房价格线性回归,精度卡住了——这就是典型的高偏差,需要加入位置、房龄等特征。
🙋
那反过来,过度拟合时增加数据有用吗?次数上升到15时验证误差暴涨。
🎓
是的。过度拟合(高方差)通常是由数据不足造成的,增加数据会降低验证误差,缩小间隙。另外还可以增强正则化λ,或降低模型次数。你看这工具,设次数15、数据20点,训练误差接近0,但验证误差爆炸——15次多项式把20个点的噪声完全拟合了。然后加数据,多项式就没有活动空间,会平复下来。
🙋
"验证误差对模型复杂度"的图是U形的。这说明什么?
🎓
那正是偏差-方差权衡的体现。左边复杂度小,偏差大,误差高——欠拟合。提高复杂度,验证误差下降,在某个谷底最好。再往右,方差增加,误差又上升——过度拟合。所以模型选择就是"寻找U形的谷底"。实际工作中用交叉验证数值找到这个谷。谷的位置就是最合适的复杂度,右边就开始记住噪声了。

常见问题

学习曲线是将学习数据量(横轴)与训练误差和验证误差(纵轴)绘制的图表。随着数据增加,训练误差从接近0上升并趋向于平台,验证误差从高值下降并趋向于平台。之所以被称为应用机器学习中最有用的诊断工具,是因为通过查看这两条曲线的最终高度和差距,可以一眼看出模型是欠拟合还是过度拟合,以及增加数据是否能改善性能。
高偏差表现为训练误差和验证误差都处于较高水平,两者之间的差距(泛化间隙)较小。曲线几乎重合且保持在高位。这表明模型过于简单,无法表达真实关系,增加数据也无法改善。高方差表现为训练误差很小,但验证误差较大,泛化间隙无法闭合。模型已记住了训练数据中的噪声。本工具可以自动判断这两种情况。
不能。高偏差模型的学习曲线两条线已经在高位重合并趋向平台。即使增加更多数据,两条曲线仍会停留在那个高平台。欠拟合的对策是:提高模型复杂度(增加多项式次数)、添加特征、弱化正则化。相反,如果是过度拟合(高方差),增加数据是有效的对策之一。
抑制过度拟合(高方差)主要有三种方法:(1) 增加训练数据——验证误差会下降,泛化间隙会缩小。(2) 增强正则化——本工具中增大λ可以抑制权重大小,缓解对噪声的过度适应。(3) 简化模型——降低多项式次数。通过"验证误差对模型复杂度"的U形曲线寻找谷值位置可以找到合适的复杂度。复杂度越往右偏离谷值,过度拟合越严重。

实际应用

决定是否增加数据:机器学习项目中最昂贵的决策之一是"是否收集更多数据或改变模型"。数据收集成本高。学习曲线可以快速判断:如果验证误差仍在下降,增加数据有效;如果验证误差已与训练误差重合趋向平台,增加数据无用。在盲目众包标注前先看学习曲线是标准做法。

模型选择与超参数调整:"验证误差对模型复杂度"的U形曲线适用于所有超参数——决策树深度、神经网络层数单元数、多项式次数、正则化强度等。实务中用交叉验证数值寻找这个谷。谷点处是最佳复杂度,右侧表示开始记忆噪声。

深度学习训练诊断:神经网络训练也要绘制训练损失与验证损失的学习曲线。验证损失停止下降甚至上升是过度拟合开始的标记,用于早期停止决策。学习曲线是TensorBoard、Weights & Biases等实验管理工具中最基础的可视化。

数据质量与泄露检测:学习曲线形状异常时,往往提示数据问题。验证误差低于训练误差,或两者都不合理地小,通常意味着数据泄露(验证数据信息流入训练)。曲线形态是模型和数据管道的镜子。

常见误区与注意事项

最常见的误解是,"训练误差小就是好模型"。训练误差只反映模型记住了多少训练数据,与未知数据性能无关。15次多项式拟合20个点可以使训练误差接近0,但这只是死记硬背,验证误差反而暴炸。评估标准必须是验证误差(泛化误差),训练误差单独看没有保证。必须同时看训练误差与验证误差及其间隙。

其次是,"过度拟合和欠拟合都加数据"的想法。数据只对过度拟合(高方差)有效。欠拟合(高偏差)的模型表达能力不足,即使10倍数据也会停留在高平台。不诊断就盲目收集数据,最后只花钱不涨精度。诊断优先,对策在后。

最后,"多次调整验证误差会导致对验证数据的过度拟合"的陷阱。频繁看验证误差调参,会把验证数据的偶然特征拟合进来,真正的未知数据性能就下降了。防止这个问题的办法是训练、验证、测试三分割,测试数据只在最终评估时用一次。读学习曲线时也要留意不要过度利用验证数据。

使用指南

  1. 在1~10范围内设置多项式次数(degNum)以控制模型复杂度
  2. 在50~500样本间改变训练数据大小(sizeNum),观察数据量对泛化性能的影响
  3. 调整噪声水平(noiseNum)和正则化系数λ(lamNum),实时确认训练误差和验证误差的变化
  4. 如果泛化间隙(验证误差−训练误差)小于0.05则学习状态良好,大于0.1则发生过度拟合

具体计算示例

多项式次数6、训练数据200样本、噪声标准差0.3、λ=0.01的条件下:训练误差MSE=0.018、验证误差MSE=0.067、泛化间隙=0.049(良好)。次数提至10、λ降至0.001时,训练误差MSE=0.006但验证误差恶化至MSE=0.156,泛化间隙=0.15(过度拟合)。增大λ至0.05时,验证误差改善至MSE=0.074。

实务中的注意事项