6.1 训练误差和泛化误差
- 训练误差(training error)
- 指模型在训练数据集上表现出的误差
- 泛化误差(generalization error)
- 指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
- 计算训练误差和泛化误差可以使用损失函数
- 例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。
6.2 模型选择
- 模型选择需要评估若干候选模型的表现并从中选择模型。
- 可供选择的候选模型可以是有着不同超参数的同类模型。
- 以多层感知机为例,可以选择隐藏层的个数,以及每个隐藏层中隐藏单元个数和激活函数。
- 验证数据集
- 不可以使用测试数据选择模型,如调参。
- 由于无法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。
- 可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。 ◼
- 这部分数据被称为验证数据集
- 例如,可以从给定的训练集中随机选取一小部分作为验证集,而将剩余部分作为真正的训练集。
- K折交叉验证
- 在K折交叉验证中,把原始训练数据集分割成K个不重合的子数据集,然后做K次模型训练和验证。
- 每一次,使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。
- 在这K次训练和验证中,每次用来验证模型的子数据集都不同。
- 最后,对这K次训练误差和验证误差分别求平均。
6.3 欠拟合和过拟合
- 欠拟合(underfitting):模型无法得到较低的训练误差
- 过拟合(overfitting):模型的训练误差远小于它在测试数据集上的误差
- 重要因素:
- 模型复杂度
- 训练数据集大小
- 模型复杂度
- 为了解释模型复杂度,以多项式函数拟合为例。
-
给定一个由标量数据特征x和对应的标量标签y组成的训练数据集,多项式函数拟合的目标是找一个K阶多项式函数
- 多项式函数拟合使用平方损失函数。
- 模型复杂度
- 高阶多项式函数比低阶多项式函数更容易在相同的训练数据集上得到更低的训练误差。
-
给定训练数据集,模型复杂度和误差之间的关系:
- 应对欠拟合和过拟合的一个办法是针对数据集选择合适复杂度的模型
- 训练数据集大小
- 影响欠拟合和过拟合的另一个重要因素是训练数据集的大小
- 如果训练数据集中样本数过少,特别是比模型参数数量更少时,过拟合更容易发生。
- 泛化误差不会随训练数据集里样本数量增加而增大
6.4 权重衰减
- 权重衰减等价于 L2 范数正则化(regularization)。
-
以线性回归中的线性回归损失函数为例
-
带有L2范数惩罚项的新损失函数为
-
在小批量随机梯度下降中,将线性回归中权重w1和w2的迭代方式更改为
- 权重衰减可以通过优化器中的weight_decay超参数来指定