206_深度学习进阶:模型选择、过拟合与欠拟合的生存法则

在机器学习中,我们的目标是发现泛化(Generalization)模式,即在未见过的数据上也能预测准确。然而,模型往往会陷入两个极端:要么学得太浅(欠拟合),要么记住了噪音(过拟合)。

1. 核心概念:训练误差 vs 泛化误差

  • 训练误差(Training Error):模型在训练数据集上的误差。
  • 泛化误差(Generalization Error):模型应用在同样分布的无穷多新数据上的误差期望。
  • 验证集(Validation Set):由于我们无法提前知道泛化误差,通常预留一部分不参与训练的数据来模拟测试环境,进行模型选择。

2. 三种典型的模型状态

① 欠拟合 (Underfitting)

  • 表现:模型无法在训练集上获得足够低的误差。
  • 原因:模型容量(复杂度)太低,无法捕捉数据的基本模式。
  • 对策:增加网络深度、增加神经元数量或减少正则化。

② 过拟合 (Overfitting)

  • 表现:训练误差远低于验证误差。
  • 原因:模型容量太高,它不仅学到了规律,还死记硬背了训练集中的随机噪音。
  • 对策:增加数据量、使用权重衰减(L2 正则化)、Dropout 或简化模型。

③ 最佳状态 (Best Fit)

  • 表现:训练误差和验证误差都很低,且两者差距较小。

3. 代码实战:通过多项式回归观察拟合状态

文件通过多项式函数拟合的例子,生动展示了模型容量如何影响结果。

准备:多项式特征生成

我们将真实标签设为三阶多项式,然后尝试用不同阶数的模型去拟合它。

Python

复制代码
import math
import torch
from torch import nn
from d2l import torch as d2l

# 假设真实函数为 y = 5 + 1.2x - 3.4x^2 / 2! + 5.6x^3 / 3! + noise
max_degree = 20  # 多项式的最大阶数
n_train, n_test = 100, 100  # 训练和测试数据集大小
true_w = torch.zeros(max_degree)  # 分配大量的空间
true_w[0:4] = torch.tensor([5, 1.2, -3.4, 5.6])

# 生成特征和标签
features = torch.randn((n_train + n_test, 1))
poly_features = torch.pow(features, torch.arange(max_degree).reshape(1, -1))
for i in range(max_degree):
    poly_features[:, i] /= math.gamma(i + 1)
labels = torch.matmul(poly_features, true_w)
labels += torch.randn(labels.shape) * 0.1 # 加入噪音

情况一:正常拟合(使用三阶多项式)

模型容量与真实数据匹配,泛化性能最好。

Python

复制代码
# 取前4个特征(0~3阶)进行训练
train(poly_features[:n_train, :4], poly_features[n_train:, :4],
      labels[:n_train], labels[n_test:])

情况二:欠拟合(只用一阶多项式)

模型太简单,无法描述高阶曲线。

Python

复制代码
# 只取前2个特征(0~1阶)
train(poly_features[:n_train, :2], poly_features[n_train:, :2],
      labels[:n_train], labels[n_test:])

情况三:过拟合(用十九阶多项式)

模型尝试穿过每一个噪点,导致验证误差激增。

Python

复制代码
# 使用所有特征(0~19阶)
train(poly_features[:n_train, :], poly_features[n_train:, :],
      labels[:n_train], labels[n_test:])

4. 关键结论:VC 维与数据量

文件探讨了影响拟合程度的两个主要维度:

  1. 模型容量:参数越多、隐藏层越深、非线性越强,容量越大。
  2. 数据量:数据越多,模型越难"背诵"所有样本,泛化能力越强。

5. 总结:如何打磨一个完美的模型?

  1. 先跑通简单模型:观察是否存在欠拟合。
  2. 逐渐增加复杂度:直到模型能够很好地拟合训练集。
  3. 引入正则化技术:如 Dropout 或 L2 惩罚,拉近训练集与测试集的距离,压制过拟合。

💡 学习小结

深度学习不仅是构建模型的艺术,更是控制误差的艺术。掌握了过拟合与欠拟合的原理,你就拥有了"对症下药"调试模型的能力。

相关推荐
slacker-kian26 分钟前
[实践]-用LLM对文本结构化:把多段文本描述变成规范的 JSON 知识库
人工智能·llm·prompt·结构化·pydantic·one-shot 提示
品牌常新35 分钟前
景区巡逻机器人怎么选?派宝S5全地形守护解析
运维·人工智能·机器人
冬奇Lab1 小时前
LLM 驱动的自动化测试系列(13):Flaky Test 不是重跑几次就能解决的分类问题
人工智能·测试
血小溅1 小时前
当交付不再带来增长,医疗产品如何借 AI 持续进化?
人工智能
幻灭行度1 小时前
基于昇腾 910B NPU 部署 SenseVoiceSmall 语音识别服务
人工智能·语音识别
冬奇Lab1 小时前
一天一个开源项目(第237篇):DeepSeek Bot —— 把 DeepSeek Harness 变成一个有记忆、能群聊、会互相派活的 Bot 团队
人工智能·开源·deepseek
larance2 小时前
DecisionTree 二分类
人工智能·分类·数据挖掘
诸神缄默不语2 小时前
小春学习日刊 2026年第3期:2026.10.15
人工智能
美狐美颜SDK开放平台2 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk