深度学习基础19(模型选择,拟合,K折交叉)

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

我们的目标是发现模式(pattern)

但是,我们如何才能确定模型是真正发现了一种泛化的模式, 而不是简单地记住了数据呢?

例如,我们想要在患者的基因数据与痴呆状态之间寻找模式, 其中标签是从集合{痴呆,轻度认知障碍,健康}中提取的。

因为基因可以唯一确定每个个体(不考虑双胞胎), 所以在这个任务中是有可能记住整个数据集的

只有当模型真正发现了一种泛化模式时,才会作出有效的预测。

更正式地说,我们的目标是发现某些模式, 这些模式捕捉到了我们训练集潜在总体的规律。

如果成功做到了这点,即使是对以前从未遇到过的个体, 模型也可以成功地评估风险。

如何发现可以泛化的模式是机器学习的根本问题

困难在于,当我们训练模型时,我们只能访问数据中的小部分样本。 最大的公开图像数据集包含大约一百万张图像。

而在大部分时候,我们只能从数千或数万个数据样本中学习。

在大型医院系统中,我们可能会访问数十万份医疗记录。

当我们使用有限的样本时,可能会遇到这样的问题: 当收集到更多的数据时,会发现之前找到的明显关系并不成立。

将模型在训练数据上拟合的比在潜在分布中更接近的现象称为过拟合(overfitting), 用于对抗过拟合的技术称为正则化(regularization)。

在实验中调整模型架构或超参数时,你会发现: 如果有足够多的神经元、层数和训练迭代周期, 模型最终可以在训练集上达到完美的精度,此时测试集的准确性却下降了。

训练误差和泛化误差

为了进一步讨论这一现象,需要了解训练误差和泛化误差。

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

问题是,不可能准确地计算出泛化误差。 这是因为无限多的数据样本是一个虚构的对象。

在实际中,我们只能通过将模型应用于一个独立的测试集来估计泛化误差, 该测试集由随机选取的、未曾在训练集中出现的数据样本构成。

统计学习理论

我们假设训练数据和测试数据都是从相同的分布中独立提取的。 这通常被称为独立同分布假设(i.i.d. assumption)

这意味着对数据进行采样的过程没有进行“记忆”。 换句话说,抽取的第2个样本和第3个样本的相关性, 并不比抽取的第2个样本和第200万个样本的相关性更强。

如果根据从加州大学旧金山分校医学中心的患者数据训练死亡风险预测模型, 并将其应用于马萨诸塞州综合医院的患者数据,结果会怎么样? 这两个数据的分布可能不完全一样。 此外,抽样过程可能与时间有关。 比如当我们对微博的主题进行分类时, 新闻周期会使得正在讨论的话题产生时间依赖性,从而违反独立性假设。

有时候我们即使轻微违背独立同分布假设,模型仍将继续运行得非常好。

比如,我们有许多有用的工具已经应用于现实,如人脸识别、语音识别和语言翻译。

毕竟,几乎所有现实的应用都至少涉及到一些违背独立同分布假设的情况

有些违背独立同分布假设的行为肯定会带来麻烦。

  • 比如,我们试图只用来自大学生的人脸数据来训练一个人脸识别系统, 然后想要用它来监测疗养院中的老人。 这不太可能有效,因为大学生看起来往往与老年人有很大的不同。

当我们训练模型时,我们试图找到一个能够尽可能拟合训练数据的函数。 但是如果它执行地“太好了”,而不能对看不见的数据做到很好泛化,就会导致过拟合。 这种情况正是我们想要避免或控制的。 深度学习中有许多启发式的技术旨在防止过拟合。

模型复杂性

当我们有简单的模型和大量的数据时,我们期望泛化误差与训练误差相近。

当我们有更复杂的模型和更少的样本时,我们预计训练误差会下降,但泛化误差会增大。

模型复杂性由什么构成是一个复杂的问题。 一个模型是否能很好地泛化取决于很多因素。

  • 例如,具有更多参数的模型可能被认为更复杂, 参数有更大取值范围的模型可能更为复杂。 通常对于神经网络,我们认为需要更多训练迭代的模型比较复杂, 而需要“早停”(early stopping)的模型(即较少训练迭代周期)就不那么复杂。

我们很难比较本质上不同大类的模型之间(例如,决策树与神经网络)的复杂性。

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

模型选择

在机器学习中,通常在评估几个候选模型后选择最终的模型。 这个过程叫做模型选择

有时,需要进行比较的模型在本质上是完全不同的(比如,决策树与线性模型)。 又有时,我们需要比较不同的超参数设置下的同一类模型。

例如,训练多层感知机模型时,我们可能希望比较具有 不同数量的隐藏层、不同数量的隐藏单元以及不同的的激活函数组合的模型。 为了确定候选模型中的最佳模型,我们通常会使用验证集

验证集

原则上,在我们确定所有的超参数之前,我们不希望用到测试集。

如果我们在模型选择过程中使用测试数据,可能会有过拟合测试数据的风险, 如果我们过拟合了训练数据,还可以在测试数据上的评估来判断过拟合。 但是如果我们过拟合了测试数据,我们又该怎么知道呢?

因此,我们决不能依靠测试数据进行模型选择。 然而,我们也不能仅仅依靠训练数据来选择模型,因为我们无法估计训练数据的泛化误差。

在实际应用中,情况变得更加复杂。 虽然理想情况下我们只会使用测试数据一次, 以评估最好的模型或比较一些模型效果,但现实是测试数据很少在使用一次后被丢弃。 我们很少能有充足的数据来对每一轮实验采用全新测试集。

解决此问题的常见做法是将我们的数据分成三份, 除了训练和测试数据集之外,还增加一个验证数据集(validation dataset), 也叫验证集(validation set)

𝐾折交叉验证

当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成一个合适的验证集。

这个问题的一个流行的解决方案是采用𝐾折交叉验证

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

欠拟合还是过拟合?

当比较训练和验证误差时,要注意两种常见的情况:

  • 训练误差和验证误差都很严重, 但它们之间仅有一点差距。 如果模型不能降低训练误差,这可能意味着模型过于简单(即表达能力不足), 无法捕获试图学习的模式。 此外,由于我们的训练和验证误差之间的泛化误差很小, 我们有理由相信可以用一个更复杂的模型降低训练误差。 这种现象被称为欠拟合(underfitting)。
  • 当训练误差明显低于验证误差时要小心, 这表明严重的过拟合(overfitting)。 注意,过拟合并不总是一件坏事。 特别是在深度学习领域,众所周知, 最好的预测模型在训练数据上的表现往往比在保留(验证)数据上好得多。 最终,我们通常更关心验证误差,而不是训练误差和验证误差之间的差距。

模型复杂性

举一个多项式的例子。 给定由单个特征𝑥和对应实数标签𝑦组成的训练数据, 我们试图找到下面的𝑑阶多项式来估计标签𝑦。

OP4L7W5%$2MRM7`L3EDZS}E

这只是一个线性回归问题,我们的特征是𝑥的幂给出的, 模型的权重是𝑤𝑖给出的,偏置是𝑤0给出的 (因为对于所有的𝑥都有𝑥0=1)。

由于这只是一个线性回归问题,可以使用平方误差作为我们的损失函数。

当数据样本包含了𝑥的不同值时, 函数阶数等于数据样本数量的多项式函数可以完美拟合训练集。

下图是模型复杂度对欠拟合和过拟合的影响

x轴是不同的模型

$Z(JZ8`CN`@T31{6V}_~O

数据集大小

训练数据集中的样本越少,我们就越有可能(且更严重地)过拟合。 随着训练数据量的增加,泛化误差通常会减小。

此外,一般来说,更多的数据不会有什么坏处。 对于固定的任务和数据分布,模型复杂性和

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NDNPOMDFLR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值