1. 从训练过程理解模型行为本质
在深度学习模型训练过程中,我们常常会观察到一种看似矛盾的现象:训练集上的表现持续提升,而验证集上的表现却开始恶化。这种现象的根源在于模型优化目标的单一性——模型仅仅以最小化训练误差为目标函数,而完全不考虑未来可能遇到的新数据分布。
1.1 损失函数的本质局限
损失函数(如交叉熵、MSE等)在设计上只针对当前训练数据进行优化。以图像分类任务为例,假设我们使用交叉熵损失:
$$
\mathcal{L}(\theta) = -\frac{1}{N}\sum_{i=1}^N \sum_{c=1}^C y_{i,c}\log(p_{i,c})
$$
其中$\theta$表示模型参数,$N$是样本数量,$C$是类别数,$y$是真实标签,$p$是预测概率。这个函数仅仅衡量模型在当前训练数据上的表现,没有任何机制保证学到的特征能够泛化到新数据。
关键问题在于:模型无法区分数据中的"真实规律"和"随机噪声"。当模型容量足够大时,它会同时学习两者,导致在新数据上表现下降。
1.2 模型认知的局限性
深度学习模型本质上是一个高度复杂的函数逼近器,它不具备人类的理解能力。举例来说,当训练一个猫狗分类器时:
- 理想情况:模型学会识别耳朵形状、鼻子特征等本质区别
- 过拟合情况:模型可能记住了训练集中特定背景(如猫总出现在沙发上)或拍摄角度
这种差异在医学影像分析中尤为危险。曾有研究显示,某些肺炎检测模型实际上是通过识别X光片上的医院标记(不同医院使用不同标记)来做判断,而非真正的病理特征。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 贯穿案例:多项式回归的拟合演变
让我们通过一个具体的多项式回归案例,直观展示欠拟合、正常拟合和过拟合的全过程。假设真实数据生成过程为:
$$
y = 0.5x + \epsilon, \quad \epsilon \sim \mathcal{N}(0, 0.2)
$$
其中$\epsilon$是高斯噪声。我们生成100个样本点作为训练集。
2.1 欠拟合阶段(模型过于简单)
使用线性模型:$y = w_1x + b$
python复制model = Sequential()
model.add(Dense(1, input_dim=1)) # 仅一个线性层
model.compile(
