目录

模型选择、欠拟合和过拟合

训练误差和泛化误差

深度学习模型到底是在学习什么,这是一个很重要的问题。简单来说,它是从喂给它的数据当中学习到当中模式pattern,利用这个模式来认识新的数据。

也就是说它在尝试,用现实世界中无数个数据中抽样出来的一部分数据来代表所有数据,毕竟没人能知道所有情况,如果知道了也不需要使用深度学习了,直接用一个检索系统就能完成“预测”

训练误差(training error)是指,
模型在训练数据集上计算得到的误差。
泛化误差(generalization error)是指,
模型应用在同样从原始样本的分布中抽取的无限多数据样本时,模型误差的期望。

我们的目标当然是减小泛化误差

问题是,我们永远不能准确地计算出泛化误差。
这是因为无限多的数据样本是一个虚构的对象。
在实际中,我们只能通过将模型应用于一个独立的测试集来估计泛化误差,
该测试集由随机选取的、未曾在训练集中出现的数据样本构成。

影响泛化误差的几个因素:

  1. 可调整参数的数量。当可调整参数的数量(有时称为自由度)很大时,模型往往更容易过拟合。
  2. 参数采用的值。当权重的取值范围较大时,模型可能更容易过拟合。
  3. 训练样本的数量。即使模型很简单,也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。

模型选择

为了更好的效果,通常需要选择合适的模型,而常常使用验证集来评估模型的效果

验证集

除了训练和测试数据集之外,还增加一个验证数据集(validation dataset),也叫验证集(validation set)。它是模型从来没见过的数据,来评估模型的泛化性能。

$K$折交叉验证

当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成一个合适的验证集。 这个问题的一个流行的解决方案是采用$K$折交叉验证

这里,原始训练数据被分成$K$个不重叠的子集。
然后执行$K$次模型训练和验证,每次在$K-1$个子集上进行训练,
并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。
最后,通过对$K$次实验的结果取平均来估计训练和验证误差。

/posts/learning/cs/under_over_fit/10_fold_cv.png
K-fold

过拟合和欠拟合

欠拟合

欠拟合的特征是,训练误差和验证误差都比较大。可能由以下原因导致

  1. 模型太简单,学习不到模式
    /posts/learning/cs/under_over_fit/underfit.png
    underfit

过拟合

过拟合的特征是,训练误差明显低于验证误差。可能的原因是

  1. 模型过于复杂,过于关注细节而丧失了通用性
  2. 数据集太小,缺乏通用性
    /posts/learning/cs/under_over_fit/overfit.png
    overfit