PyTorch教程-3.6. 概括

电子说

1.2w人已加入

描述

考虑两个正在努力准备期末考试的大学生。通常,这种准备将包括通过参加前几年的考试来练习和测试他们的能力。尽管如此,在过去的考试中取得好成绩并不能保证他们在重要的时候会出类拔萃。例如,想象一个学生 Elephantine Ellie,她的准备工作完全包括记住前几年考试问题的答案。即使艾莉被赋予了象象般的记忆力,因此可以完美地回忆起任何以前见过的问题的答案,但当她面对一个新的(以前没见过的)问题时,她可能还是会僵住) 问题。相比之下,想象另一个学生,Inductive Irene,记忆能力相对较差,但有能力挑选模式。请注意,如果考试真的由前一年的重复问题组成,那么 Ellie 将轻松胜过 Irene。即使 Irene 的推断模式产生了 90% 的准确预测,它们也永远无法与 Ellie 的 100% 召回率相提并论。然而,即使考试完全由新题组成,艾琳也可能保持 90% 的平均分。

作为机器学习科学家,我们的目标是发现模式。但是我们如何确定我们真的发现了一个普遍的模式而不是简单地记住了我们的数据呢?大多数时候,我们的预测只有在我们的模型发现这种模式时才有用。我们不想预测昨天的股价,而是明天的。我们不需要为以前见过的病人识别已经诊断出的疾病,而是需要识别以前没见过的病人的以前未确诊的疾病。这个问题——如何发现泛化的模式——是机器学习的根本问题,可以说是所有统计学的根本问题。我们可以把这个问题看作是一个涵盖所有科学的更宏大问题的一部分:我们什么时候有理由从特定的观察到更一般的陈述(波普尔,2005 年)?

在现实生活中,我们必须使用有限的数据集合来拟合模型。该数据的典型规模在不同领域差异很大。对于许多重要的医学问题,我们只能访问几千个数据点。在研究罕见病时,我们可能幸运地接触到数百种疾病。相比之下,由标记照片组成的最大公共数据集(例如,ImageNet (Deng等人,2009 年))包含数百万张图像。而一些未标记的图像集合,例如 Flickr YFC100M 数据集可能更大,包含超过 1 亿张图像(Thomee等人,2016 年). 然而,即使在这种极端规模下,与 1 百万像素分辨率下所有可能图像的空间相比,可用数据点的数量仍然是无限小的。每当我们处理有限样本时,我们必须牢记这样的风险,即我们可能会拟合我们的训练数据,却发现我们未能发现可概括的模式。

拟合更接近我们的训练数据而不是底层分布的现象称为过度拟合,而对抗过度拟合的技术通常称为正则化方法。虽然没有什么可以替代对统计学习理论的适当介绍(参见Boucheron等人(2005 年)、Vapnik(1998 年)),但我们将为您提供足够的直觉来开始学习。我们将在全书的许多章节中重新审视泛化,探索各种模型中泛化的基本原理的已知内容,以及已经发现的启发式技术(根据经验)可以对实际感兴趣的任务产生改进的泛化。

3.6.1. 训练误差和泛化误差

在标准的监督学习设置中,我们假设训练数据和测试数据是独立于相同 分布绘制的。这通常称为IID 假设。虽然这个假设很强,但值得注意的是,如果没有任何这样的假设,我们就会死在水里。为什么我们应该相信从分布中采样的训练数据P(X,Y)应该告诉我们如何对不同分布生成的测试数据进行预测 Q(X,Y)?事实证明,实现这样的飞跃需要强有力的假设P和Q有关系。稍后我们将讨论一些允许分布变化的假设,但首先我们需要了解 IID 情况,其中 P(⋅)=Q(⋅).

首先,我们需要区分训练误差 Remp,这是在训练数据集上计算的统计量,泛化误差 R,这是 对基础分布的期望。您可以将泛化错误视为将您的模型应用于从相同的基础数据分布中提取的无限的附加数据示例流时您会看到的情况。形式上,训练误差表示为总和(在3.1 节中使用相同的符号 ):

(3.6.1)Remp[X,y,f]=1n∑i=1nl(x(i),y(i),f(x(i))),

而泛化误差表示为一个积分:

(3.6.2)R[p,f]=E(x,y)∼P[l(x,y,f(x))]=∫∫l(x,y,f(x))p(x,y)dxdy.

问题是,我们永远无法计算泛化误差 R确切地。没有人告诉我们密度函数的精确形式p(x,y). 此外,我们无法对无限的数据点流进行采样。因此,在实践中,我们必须通过将我们的模型应用于由随机选择的示例组成的独立测试集来估计 泛化误差X′ 和标签y′从我们的训练集中保留下来的。这包括将与计算经验训练误差相同的公式应用于测试集 X′,y′.

至关重要的是,当我们在测试集上评估我们的分类器时,我们使用的是固定分类器(它不依赖于测试集的样本),因此估计其误差只是均值估计的问题。然而,对于训练集来说,情况并非如此。请注意,我们最终得到的模型明确取决于训练集的选择,因此训练误差通常是对基础总体真实误差的有偏估计。泛化的核心问题是我们何时应该期望我们的训练误差接近总体误差(以及泛化误差)。

3.6.1.1. 模型复杂度

在经典理论中,当我们拥有简单的模型和丰富的数据时,训练误差和泛化误差往往很接近。然而,当我们使用更复杂的模型和/或更少的示例时,我们预计训练误差会下降但泛化差距会扩大。这不足为奇。想象一个模型类如此富有表现力,以至于对于任何数据集n例如,我们可以找到一组可以完美匹配任意标签的参数,即使是随机分配的。在这种情况下,即使我们完美地拟合了我们的训练数据,我们怎么能得出关于泛化误差的任何结论呢?就我们所知,我们的泛化误差可能并不比随机猜测好多少。

一般来说,在我们的模型类别没有任何限制的情况下,我们不能仅基于拟合训练数据就得出我们的模型已经发现任何可概括模式的结论(Vapnik等人,1994 年)。另一方面,如果我们的模型类不能适应任意标签,那么它一定发现了一种模式。关于模型复杂性的学习理论思想从卡尔波普尔的思想中获得了一些灵感,卡尔波普尔是一位有影响力的科学哲学家,他形式化了可证伪性标准。根据波普尔的说法,可以解释任何和所有观察结果的理论根本不是科学理论!毕竟,如果它不排除任何可能性,它能告诉我们关于这个世界的什么呢?简而言之,我们想要的是一个无法实现的假设 解释我们可能做出的任何观察,但恰好与我们实际上做出的观察相一致。

现在,究竟是什么构成了模型复杂性的适当概念是一个复杂的问题。通常,具有更多参数的模型能够适应更多数量的任意分配标签。然而,这不一定是真的。例如,内核方法在具有无限数量参数的空间中运行,但它们的复杂性由其他方式控制(Scholkopf 和 Smola,2002 年)。一个经常被证明有用的复杂性概念是参数可以采用的值的范围。在这里,允许参数取任意值的模型会更复杂。我们将在下一节介绍权重衰减时重新讨论这个想法,您的第一个实用正则化技术。值得注意的是,比较本质上不同的模型类(例如,决策树与神经网络)的成员之间的复杂性可能很困难。

在这一点上,我们必须强调另一个重点,我们将在介绍深度神经网络时重新讨论这一点。当模型能够拟合任意标签时,低训练误差并不一定意味着低泛化误差。但是,它也不一定意味着高泛化错误!我们只能自信地说,仅凭低训练误差不足以证明低泛化误差。深度神经网络就是这样的模型:虽然它们在实践中泛化得很好,但它们太强大了,无法让我们仅根据训练误差得出很多结论。在这些情况下,我们必须更多地依赖我们的坚持数据来证明事后的概括。holdout 数据(即验证集)上的错误称为验证错误。

3.6.2. 欠拟合还是过拟合?

当我们比较训练和验证错误时,我们要注意两种常见情况。首先,我们要注意训练误差和验证误差都很大但它们之间有一点差距的情况。如果模型无法减少训练误差,则可能意味着我们的模型太简单(即表达能力不足)而无法捕捉我们尝试建模的模式。此外,由于泛化差距 (Remp−R) 在我们的训练和泛化误差之间很小,我们有理由相信我们可以摆脱更复杂的模型。这种现象称为欠拟合。

另一方面,正如我们上面所讨论的,我们要注意训练误差明显低于验证误差的情况,这表明存在严重的过度拟合。请注意,过度拟合并不总是坏事。特别是在深度学习中,最好的预测模型在训练数据上的表现通常比在保留数据上的表现要好得多。最终,我们通常关心降低泛化误差,只关心差距,因为它会成为实现这一目标的障碍。请注意,如果训练误差为零,则泛化差距恰好等于泛化误差,我们只能通过缩小差距来取得进步。

3.6.2.1. 多项式曲线拟合

为了说明关于过度拟合和模型复杂性的一些经典直觉,请考虑以下内容:给定由单个特征组成的训练数据x和相应的实值标签 y,我们尝试找到次数的多项式d

(3.6.3)y^=∑i=0dxiwi

估计标签y. 这只是一个线性回归问题,我们的特征由x,模型的权重由下式给出wi, 偏差由下式给出 w0自从x0=1对全部x. 由于这只是一个线性回归问题,我们可以使用平方误差作为我们的损失函数。

高阶多项式函数比低阶多项式函数更复杂,因为高阶多项式的参数更多,模型函数的选择范围更广。固定训练数据集,相对于低阶多项式,高阶多项式函数应始终实现较低(最坏情况下,相等)的训练误差。事实上,只要每个数据示例都有不同的值 x,一个次数等于数据样本个数的多项式函数可以完美地拟合训练集。我们在图 3.6.1中可视化多项式次数(模型复杂性)与欠拟合与过拟合之间的关系。

机器学习

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

3.6.2.2. 数据集大小

正如上面的界限已​​经表明的那样,要牢记的另一个重要考虑因素是数据集大小。修复我们的模型,训练数据集中的样本越少,我们就越有可能(也更严重)遇到过拟合。随着我们增加训练数据量,泛化误差通常会降低。此外,一般来说,更多的数据永远不会有坏处。对于固定的任务和数据分布,模型复杂度的增加不应超过数据量的增加速度。给定更多数据,我们可能会尝试拟合更复杂的模型。没有足够的数据,更简单的模型可能更难被击败。对于许多任务,只有在有数千个训练示例可用时,深度学习才会优于线性模型。部分地,

3.6.3. 选型

通常,我们选择最终模型,只是在评估了以各种方式(不同架构、训练目标、所选特征、数据预处理、学习率等)不同的多个模型之后。在众多模型中进行选择被恰当地称为模型选择。

原则上,在我们选择了所有超参数之前,我们不应该接触我们的测试集。如果我们在模型选择过程中使用测试数据,则存在我们可能过度拟合测试数据的风险。那我们就麻烦大了。如果我们过度拟合我们的训练数据,总会有对测试数据的评估来保持我们的诚实。但是如果我们过度拟合测试数据,我们怎么知道呢?参见 Ong等人。( 2005 )例如,即使对于可以严格控制复杂性的模型,这也会导致荒谬的结果。

因此,我们永远不应该依赖测试数据来选择模型。然而,我们也不能仅仅依靠训练数据来选择模型,因为我们无法估计我们用来训练模型的数据的泛化误差。

在实际应用中,情况变得更加模糊。虽然理想情况下我们只会接触测试数据一次,以评估最好的模型或将少数模型相互比较,但真实世界的测试数据很少在使用一次后就被丢弃。我们很少能为每一轮实验提供新的测试集。事实上,几十年来回收基准数据会对算法的发展产生重大影响,例如图像分类 和光学字符识别。

解决测试集训练问题的常见做法 是将我们的数据分成三种方式,除了训练和测试数据集之外还包含一个验证集。结果是一种模糊的做法,验证和测试数据之间的界限令人担忧地模棱两可。除非另有明确说明,否则在本书的实验中,我们实际上使用的是正确称为训练数据和验证数据的数据,没有真正的测试集。因此,本书每个实验中报告的准确度实际上是验证准确度,而不是真正的测试集准确度。

3.6.3.1. 交叉验证

当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成适当的验证集。这个问题的一个流行的解决方案是使用K折叠交叉验证。在这里,原始训练数据被拆分为 K非重叠子集。然后执行模型训练和验证K次,每次训练K−1子集并在不同的子集(该轮未用于训练的子集)上进行验证。最后,通过对来自K实验。

3.6.4. 概括

本节探讨了机器学习中泛化的一些基础。当我们进入更深的模型时,其中一些想法变得复杂且违反直觉,在那里,模型能够严重过度拟合数据,并且复杂性的相关概念可能既隐含又违反直觉(例如,具有更多参数的更大架构泛化更好)。我们留给您一些经验法则:

使用验证集(或K-折叠交叉验证)用于模型选择;

更复杂的模型通常需要更多的数据;

复杂性的相关概念包括参数的数量和允许取值的范围;

在其他条件相同的情况下,更多的数据几乎总能带来更好的泛化能力;

整个关于泛化的讨论都是基于 IID 假设。如果我们放松这个假设,允许分布在训练和测试阶段之间移动,那么我们就不能说没有进一步(也许更温和)假设的泛化。

3.6.5. 练习

你什么时候能准确地解决多项式回归问题?

至少给出五个例子,其中依赖随机变量使得将问题作为 IID 数据处理是不可取的。

你能期望看到零训练错误吗?在什么情况下你会看到零泛化错误?

为什么是K-折叠交叉验证的计算成本非常高?

为什么是K-折叠交叉验证错误估计有偏差?

VC维定义为可以用任意标签分类的最大点数{±1}通过一类函数的函数。为什么这不是衡量函数类复杂程度的好主意?提示:函数的大小如何?

您的经理给您提供了一个困难的数据集,您当前的算法在该数据集上表现不佳。您如何向他证明您需要更多数据?提示:您不能增加数据,但可以减少它。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分