####习题答案
这一节深入探讨了机器学习中最核心的挑战之一:模型泛化(Generalization)。它解释了为什么一个在训练集上表现完美的模型,在实际应用(测试集)中可能会表现得很差。
- 核心内容总结
该页面主要围绕如何平衡模型的复杂性与数据集大小展开:
- 训练误差 vs. 泛化误差:
- 训练误差:模型在训练数据集上的误差。
- 泛化误差:模型应用在同样分布的无限多新样本上的误差期望值。我们的目标是降低泛化误差。
- 模型选择:
- 为了评估模型,我们需要将数据分成训练集和测试集。
- 验证集 (Validation Set):由于不能根据测试集来调整超参数,通常会从训练数据中预留一部分作为验证集,用于模型选择。
- K折交叉验证 (K-Fold Cross-Validation):当数据稀缺时,将数据分成 K 份,轮流用 K-1 份训练,1 份验证,最后取平均结果。
- 欠拟合 (Underfitting):
- 模型过于简单,甚至无法降低训练误差。
- 表现:训练误差和验证误差都很高。
- 过拟合 (Overfitting):
- 模型过于复杂,把训练集里的"噪声"也学进去了。
- 表现:训练误差极低,但验证误差很高。
- 习题答案解析
以下是基于本节理论对练习题的解答建议:
Q1: 这个多项式回归问题可以准确解出吗?
- 答案:可以。多项式回归本质上仍然是关于参数的线性回归(只要将 x^2, x^3 等视为新的特征变量)。因此,它具有解析解,可以通过正规方程(Normal Equation)直接计算出最优权重。
Q2: 绘制训练损失 vs. 模型复杂度(多项式的阶数)的曲线,你观察到了什么? - 解析:
- 随着阶数增加,训练损失会单调下降,因为模型变得越来越能"死记硬背"训练数据。
- 然而,验证损失会呈现 U形曲线:先下降(改善),到达最优点后开始剧烈上升(过拟合)。
Q3: 如果你减少训练样本的数量,会发生什么?
- 答案:
- 模型会更容易发生过拟合。
- 直觉上,数据越少,模型越容易找到某种"巧合"规律来解释这些样本,而这种规律并不适用于新数据。
- 泛化误差会显著增大。
Q4: 如果你增加训练数据的噪声,会发生什么?
- 答案:
- 模型更难收敛,训练误差会上升。
- 模型可能会试图拟合这些噪声,导致严重的过拟合。
- 为了应对噪声,我们需要更强的正则化(如本章后续提到的权重衰减或 Dropout)。
Q5: 为什么通常我们要增加训练数据量?
- 答案:
- 更多的数据能覆盖更真实的数据分布。
- 大样本量可以抑制噪声的影响,减少模型"误入歧途"的概率,从而降低泛化误差。
- 根据统计学习理论,对于给定的模型复杂性,随着样本量 n \to \infty,泛化误差会趋近于训练误差。
下一步建议:
既然了解了过拟合,那么如何"对抗"它呢?下一节 4.5 节"权重衰减 (Weight Decay)" 将介绍第一种武器:通过惩罚过大的参数值来限制模型复杂度。
你想看看如何通过代码给模型添加 L2 范数惩罚 吗?

针对《动手学深度学习》4.4 节关于"模型选择、欠拟合和过拟合"的练习题,以下是基于线性代数和机器学习理论的详细解答:
- 这个多项式回归问题可以准确地解出吗?
可以。
- 线性代数解释:虽然多项式函数在变量 x 上是非线性的,但它关于参数 \mathbf{w} 是线性的。
- 我们可以将多项式特征 x, x^2, \dots, x^d 视为独立的特征变量,构建一个范德蒙德矩阵(Vandermonde matrix) \mathbf{X}。
- 只要矩阵 \mathbf{X}^\top \mathbf{X} 是满秩且可逆的,我们就可以通过正规方程 \mathbf{w} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y} 直接求得解析解。
- 绘制训练损失与模型复杂度的关系图
- 观察结果:随着模型复杂度(多项式阶数)的增加,训练损失会单调下降。
- 减小到 0 的条件:根据线性代数原理,当多项式的阶数 d 等于样本数量 n 减去 1 时(即 d = n - 1),模型拥有足够的自由度可以经过每一个数据点(插值),此时训练损失可以减少到 0。
- 在这种情况下绘制测试损失图
- 观察结果:测试损失图通常呈 U 形。
- 当阶数较低时,由于模型无法拟合数据的真实规律,测试损失较高(欠拟合)。
- 当阶数适中(接近生成数据的真实阶数)时,测试损失达到最低点。
- 当阶数继续增加时,虽然训练损失在下降,但由于模型开始拟合随机噪声,测试损失会剧烈上升(过拟合)。
- 生成同样的图,作为数据量的函数
- 训练损失:通常随数据量增加而上升。因为数据越多,模型"死记硬背"所有点变得越困难。
- 测试损失(泛化误差):随数据量增加而下降。更多的数据提供了关于真实分布的更清晰信号,减少了过拟合的风险。
- 结论:当数据量趋于无穷大时,训练损失和测试损失会收敛到同一个值(即数据的固有噪声)。
- 如果不对多项式特征进行标准化会发生什么?
- 数值不稳定性:高阶多项式的项(如 x^{20})会产生极大或极小的值,导致输入特征在量级上相差悬殊。
- 优化困难:这会导致损失函数的等高线变得极其扁平,梯度下降算法会变得非常缓慢,甚至出现数值溢出(NaN)导致训练失败。
- 解决方法:除了显式的标准化(如除以 n!),还可以使用 QR 分解 或 正交多项式(如切比雪夫多项式)来构建特征,从而在数学上避免数值不稳定性。
- 泛化误差可能为零吗?
理论上几乎不可能。
- 不可约误差:现实数据中通常包含"噪声"或"贝叶斯误差",这是由于观察不全或系统本身的随机性造成的。即使模型完美捕捉了真实规律,这部分误差依然存在。
- 样本限制:除非模型完全掌握了生成数据的底层物理规律,并且测试集与训练集没有任何噪声干扰,否则泛化误差总会大于零。
下一步建议:
既然了解了如何识别过拟合,下一节 4.5 权重衰减 (Weight Decay) 将教你如何通过数学手段(L2 正则化)在不改变模型深度的情况下,强制模型变得"简单"以抑制过拟合。你想看看如何通过代码实现这一惩罚项吗?