0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyTorch教程-5.5. 深度学习中的泛化

jf_pJlTbmA9 来源:PyTorch 作者:PyTorchPyTorch 2023-06-05 15:43 次阅读

在第 3 节和第 4 节中,我们通过将线性模型拟合到训练数据来解决回归和分类问题。在这两种情况下,我们都提供了实用的算法来寻找使观察到的训练标签的可能性最大化的参数。然后,在每一章的末尾,我们回忆起拟合训练数据只是一个中间目标。我们一直以来真正的追求是发现一般模式,在此基础上我们甚至可以对来自相同潜在人群的新样本做出准确的预测。机器学习研究人员是消费者 的优化算法。有时,我们甚至必须开发新的优化算法。但归根结底,优化只是达到目的的一种手段。机器学习的核心是一门统计学科,我们希望仅在某些统计原理(已知或未知)导致生成的模型泛化到训练集之外的范围内优化训练损失。

从好的方面来看,事实证明,通过随机梯度下降训练的深度神经网络在跨越计算机视觉的无数预测问题上表现得非常好;自然语言处理;时间序列数据;推荐系统;电子健康记录;蛋白质折叠;视频游戏和棋盘游戏中的价值函数逼近;和无数其他领域。不利的一面是,如果您正在寻找优化故事(为什么我们可以将它们拟合到训练数据)或泛化故事(为什么生成的模型泛化到看不见的例子)的直接说明,那么您可能想给自己倒一个喝。虽然我们优化线性模型的程序和解决方案的统计特性都通过综合理论体系进行了很好的描述,

深度学习的理论和实践在这两个方面都在迅速发展,理论家们采用新的策略来解释正在发生的事情,而实践者则继续以惊人的速度进行创新,建立用于训练深度网络的启发式武器库和大量的直觉和为决定在何种情况下应用何种技术提供指导的民间知识。

目前的 TL;DR 是深度学习理论已经产生了有前途的攻击线和分散的迷人结果,但仍然远未全面说明(i)为什么我们能够优化神经网络和(ii) ) 通过梯度下降学习的模型如何能够很好地泛化,即使是在高维任务上。然而,在实践中,(i) 很少成为问题(我们总能找到适合我们所有训练数据的参数),因此理解泛化是一个更大的问题。另一方面,即使缺乏连贯的科学理论,从业者也已经开发出大量技术,可以帮助您生成在实践中具有良好泛化能力的模型。虽然没有精辟的总结可以公正地描述深度学习中泛化的广泛主题,

5.5.1. 重新审视过度拟合和正则化

根据Wolpert等人的“没有免费的午餐”定理。( 1995 ),任何学习算法都可以更好地概括具有某些分布的数据,而对其他分布则更差。 因此,给定一个有限的训练集,模型依赖于某些假设:为了达到人类水平的表现,识别反映人类如何看待世界的归纳偏差可能是有用的。这种归纳偏差显示出对具有某些属性的解决方案的偏好。例如,深度 MLP 倾向于通过将更简单的函数组合在一起来构建复杂的函数。

通过编码归纳偏差的机器学习模型,我们训练它们的方法通常包括两个阶段:(i)拟合训练数据;(ii)通过评估 holdout 数据模型来估计泛化误差(基础群体的真实误差)。我们对训练数据的拟合与对测试数据的拟合之间的差异称为泛化差距,当泛化差距很大时,我们说我们的模型过度拟合到训练数据。在过度拟合的极端情况下,我们可能会准确地拟合训练数据,即使测试误差仍然很大。在经典观点中,解释是我们的模型太复杂,要求我们要么缩小特征数量、学习的非零参数数量,要么缩小量化参数的大小。回忆一下3.6 节中模型复杂度与损失的关系图(图 3.6.1) 。

然而,深度学习以违反直觉的方式使这幅图复杂化。首先,对于分类问题,我们的模型通常具有足够的表现力以完美地适合每个训练示例,即使在由数百万组成的数据集中也是如此(Zhang等人,2021 年)。在经典图片中,我们可能认为此设置位于模型复杂性轴的最右端,泛化误差的任何改进都必须通过正则化来实现,要么通过降低模型类的复杂性,要​​么通过应用惩罚,严格限制我们的参数可能采用的值集。但这就是事情开始变得奇怪的地方。

奇怪的是,对于许多深度学习任务(例如,图像识别和文本分类),我们通常在模型架构中进行选择,所有这些架构都可以实现任意低的训练损失(和零训练错误)。因为考虑中的所有模型都实现了零训练误差,所以进一步提高的唯一途径是减少过度拟合。更奇怪的是,通常情况下,尽管完美地拟合了训练数据,但我们实际上可以通过使模型更具表现力来进一步减少泛化误差,例如,添加层、节点或训练更多的 epoch。更奇怪的是,将泛化差距与复杂性联系起来的模式模型的一部分(如捕获的那样,例如,在网络的深度或宽度中)可以是非单调的,复杂性越高,起初会受到伤害,但随后有助于形成所谓的“双下降”模式(Nakkiran等人, 2021 年)。因此,深度学习从业者拥有一大堆技巧,其中一些似乎以某种方式限制了模型,而另一些似乎使模型更具表现力,并且在某种意义上,所有这些都用于减轻过度拟合。

更复杂的是,虽然经典学习理论提供的保证即使对于经典模型也可能是保守的,但它们似乎无力解释为什么深度神经网络首先要进行泛化。因为深度神经网络即使对于大型数据集也能够拟合任意标签,尽管使用了熟悉的方法,如ℓ2正则化,传统的基于复杂性的泛化边界,例如,那些基于假设类的 VC 维度或 Rademacher 复杂性的泛化边界无法解释为什么神经网络会泛化。

5.5.2. 来自非参数的灵感

第一次接触深度学习,很容易将它们视为参数模型。毕竟,模型确实有数百万个参数。当我们更新模型时,我们更新它们的参数。当我们保存模型时,我们将它们的参数写入磁盘。然而,数学和计算机科学充斥着违反直觉的视角变化,以及看似不同的问题的惊人同构。虽然神经网络显然有参数,在某些方面,将它们视为表现得像非参数模型会更有成效。那么究竟是什么使模型成为非参数的呢?虽然这个名称涵盖了多种方法,但一个共同的主题是非参数方法往往具有一定程度的复杂性,随着可用数据量的增加而增加。

也许非参数模型最简单的例子是 k-最近邻算法(我们将在后面介绍更多非参数模型,例如在第 11.2 节中)。在这里,在训练时,学习者只需记住数据集。然后,在预测时,当遇到一个新点时x,学习者查找k最近邻(k 积分xi′最小化一些距离 d(x,xi′)). 什么时候k=1,这种算法称为 1-最近邻算法,该算法将始终实现零训练误差。然而,这并不意味着该算法不会泛化。事实上,事实证明,在一些温和的条件下,1-最近邻算法是一致的(最终收敛到最优预测器)。

请注意,1 最近邻要求我们指定一些距离函数d,或者等价地,我们指定一些向量值基函数ϕ(x)用于特征化我们的数据。对于距离度量的任何选择,我们将实现 0 训练错误并最终达到最佳预测器,但不同的距离度量 d对不同的归纳偏差进行编码,并且使用有限数量的可用数据将产生不同的预测变量。距离度量的不同选择d代表关于基本模式的不同假设,不同预测变量的性能将取决于假设与观察到的数据的兼容性。

从某种意义上说,由于神经网络过度参数化,拥有比拟合训练数据所需的参数多得多的参数,它们倾向于对训练数据进行插值(完美拟合),因此在某些方面表现得更像非参数模型。最近的理论研究已经在大型神经网络和非参数方法(尤其是核方法)之间建立了深刻的联系。特别是,Jacot等人。( 2018 )证明了在极限情况下,随着具有随机初始化权重的多层感知器无限宽地增长,它们变得等效于(非参数)核方法,用于特定选择核函数(本质上是距离函数),他们称之为神经正切核。虽然当前的神经正切核模型可能无法完全解释现代深度网络的行为,但它们作为分析工具的成功强调了非参数建模对于理解过度参数化深度网络行为的有用性。

5.5.3. 提前停止

尽管深度神经网络能够拟合任意标签,即使标签分配不正确或随机 (Zhang等人,2021 年),这种能力也只会在多次迭代训练中出现。一项新的工作 (Rolnick等人,2017 年)表明,在标签噪声的设置中,神经网络倾向于首先拟合干净标记的数据,然后才对错误标记的数据进行插值。此外,已经确定这种现象直接转化为泛化的保证:只要模型拟合了干净标记的数据而不是训练集中包含的随机标记的示例,它实际上已经泛化了 (加格等。, 2021 年)。

这些发现共同有助于激发早期停止,这是一种使深度神经网络正则化的经典技术。在这里,不是直接限制权重的值,而是限制训练时期的数量。确定停止标准的最常见方法是在整个训练过程中监控验证错误(通常通过在每个时期后检查一次)并在验证错误没有减少超过一些小量时停止训练ϵ对于一些时代。这有时称为耐心标准。除了可能导致更好的泛化,在嘈杂标签的设置中,提前停止的另一个好处是节省时间。一旦满足耐心标准,就可以终止训练。对于可能需要在 8 个或更多 GPU 上同时训练数天的大型模型,调整良好的提前停止可以为研究人员节省数天的时间,并可以为他们的雇主节省数千美元。

值得注意的是,当没有标签噪声并且数据集是可实现的(类是真正可分离的,例如,区分猫和狗)时,早期停止往往不会导致泛化的显着改进。另一方面,当标签中存在标签噪声或内在可变性时(例如,预测患者的死亡率),早期停止至关重要。在对噪声数据进行插值之前训练模型通常不是一个好主意。

5.5.4. 深度网络的经典正则化方法

在第 3 节中,我们描述了几种用于限制模型复杂性的经典正则化技术。特别是,第 3.7 节介绍了一种称为权重衰减的方法,该方法包括向损失函数添加正则化项以惩罚较大的权重值。根据惩罚哪个权重范数,这种技术被称为岭正则化(对于ℓ2惩罚)或套索正则化(对于ℓ1惩罚)。在对这些正则化器的经典分析中,它们被认为限制了权重可以充分取值的值,以防止模型拟合任意标签。

在深度学习实现中,权重衰减仍然是一种流行的工具。然而,研究人员注意到,ℓ2 正则化不足以阻止网络对数据进行插值

(张等,2021)

因此,如果将其解释为正则化,其好处可能只有与早期停止标准结合使用才有意义。如果没有提前停止,可能就像层数或节点数(在深度学习中)或距离度量(在 1-最近邻中)一样,这些方法可能会导致更好的泛化,而不是因为它们有意义地限制了神经网络,而是因为它们以某种方式编码归纳偏差,这些偏差与感兴趣的数据集中发现的模式更好地兼容。因此,经典正则化器在深度学习实现中仍然很受欢迎,即使它们功效的理论依据可能完全不同。

值得注意的是,深度学习研究人员还建立了首先在经典正则化环境中普及的技术,例如向模型输入添加噪声。在下一节中,我们将介绍著名的 dropout 技术(由 Srivastava等人(2014 年)发明),它已成为深度学习的中流砥柱,尽管其功效的理论基础仍然同样神秘。

5.5.5。概括

与往往具有比示例更少的参数的经典线性模型不同,深度网络往往过度参数化,并且对于大多数任务来说能够完美地拟合训练集。这种 插值机制挑战了许多根深蒂固的直觉。在功能上,神经网络看起来像参数化模型。但将它们视为非参数模型有时可能是更可靠的直觉来源。因为通常情况下所有考虑中的深度网络都能够拟合所有训练标签,几乎所有收益都必须通过减轻过度拟合(缩小泛化差距)来 实现). 矛盾的是,减少泛化差距的干预措施有时似乎会增加模型的复杂性,而在其他时候似乎会降低复杂性。然而,这些方法很少能将复杂性降低到足以让经典理论解释深度网络泛化的程度,并且尽管许多杰出研究人员共同努力,但为什么某些选择会导致泛化能力得到改善,这在很大程度上仍然是一个巨大的悬而未决的问题。

5.5.6. 练习

在什么意义上,传统的基于复杂性的度量无法解释深度神经网络的泛化?

为什么提前停止被认为是一种正则化技术?

研究人员通常如何确定停止标准?

什么重要因素似乎可以区分早期停止导致泛化能力大幅提高的情况?

除了概括之外,描述提前停止的另一个好处。

Discussions

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

    关注

    73

    文章

    5249

    浏览量

    120012
  • pytorch
    +关注

    关注

    2

    文章

    766

    浏览量

    12864
收藏 人收藏

    评论

    相关推荐

    Pytorch模型训练实用PDF教程【中文】

    ?模型部分?还是优化器?只有这样不断的通过可视诊断你的模型,不断的对症下药,才能训练出一个较满意的模型。本教程内容及结构:本教程内容主要为在 PyTorch 训练一个模型所可能涉及到的方法及函数,并且
    发表于 12-21 09:18

    深度学习在预测和健康管理的应用

    深度学习在预测和健康管理的应用综述摘要深度学习对预测和健康管理(PHM)引起了浓厚的兴趣,因为它具有强大的表示能力,自动
    发表于 07-12 06:46

    Pytorch入门教程与范例

    pytorch 是一个基于 python 的深度学习库。pytorch 源码库的抽象层次少,结构清晰,代码量适中。相比于非常工程化的 tensorflow,
    发表于 11-15 17:50 5008次阅读
    <b class='flag-5'>Pytorch</b>入门教程与范例

    Facebook宣布发布深度学习框架 PyTorch 1.0开发者预览版

    用户共同制作张量处理单元(TPU)。用于预配置 AI 的 Google Cloud Platform 深度学习 VM,还将包含 PyTorch 1.0 的 VM 映像。亚马逊的 SageMaker 将为
    的头像 发表于 10-08 14:36 2992次阅读

    PyTorch官网教程PyTorch深度学习:60分钟快速入门中文翻译版

    PyTorch 深度学习:60分钟快速入门”为 PyTorch 官网教程,网上已经有部分翻译作品,随着PyTorch1.0 版本的公布,这
    的头像 发表于 01-13 11:53 9829次阅读

    为什么学习深度学习需要使用PyTorch和TensorFlow框架

    如果你需要深度学习模型,那么 PyTorch 和 TensorFlow 都是不错的选择。 并非每个回归或分类问题都需要通过深度学习来解决。
    的头像 发表于 09-14 10:57 3236次阅读

    基于PyTorch深度学习入门教程之PyTorch的安装和配置

    神经网络结构,并且运用各种深度学习算法训练网络参数,进而解决各种任务。 本文从PyTorch环境配置开始。PyTorch是一种Python接口的深度
    的头像 发表于 02-16 15:15 2246次阅读

    基于PyTorch深度学习入门教程之PyTorch简单知识

    是一个基于Python的科学计算框架,用于进行深度学习相关研究。对于Python语言的入门,可以参考之前的两篇介绍PythonNumpy的博客。分别是Python Numpy 教程(
    的头像 发表于 02-16 15:20 2026次阅读

    PyTorch开源深度学习框架简介

    PyTorch 是一种开源深度学习框架,以出色的灵活性和易用性著称。这在一定程度上是因为与机器学习开发者和数据科学家所青睐的热门 Python 高级编程语言兼容。
    的头像 发表于 07-29 10:26 3895次阅读

    PyTorch 的 Autograd 机制和使用

    PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里呢?我觉得一是
    的头像 发表于 08-15 09:37 848次阅读

    深度学习框架PyTorch和TensorFlow如何选择

    在 AI 技术兴起后,深度学习框架 PyTorch 和 TensorFlow 两大阵营似乎也爆发了类似的「战争」。这两个阵营背后都有大量的支持者,并且他们都有充足的理由来说明为什么他们所喜欢的框架是最好的。
    发表于 02-02 10:28 881次阅读

    PyTorch教程5.5深度学习中的泛化

    电子发烧友网站提供《PyTorch教程5.5深度学习中的泛化.pdf》资料免费下载
    发表于 06-05 15:31 1次下载
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>5.5</b>之<b class='flag-5'>深度</b><b class='flag-5'>学习</b>中的泛化

    PyTorch教程12.1之优化和深度学习

    电子发烧友网站提供《PyTorch教程12.1之优化和深度学习.pdf》资料免费下载
    发表于 06-05 15:08 0次下载
    <b class='flag-5'>PyTorch</b>教程12.1之优化和<b class='flag-5'>深度</b><b class='flag-5'>学习</b>

    深度学习框架pytorch入门与实践

    深度学习框架pytorch入门与实践 深度学习是机器学习中的一个分支,它使用多层神经网络对大量数
    的头像 发表于 08-17 16:03 1230次阅读

    深度学习框架pytorch介绍

    深度学习框架pytorch介绍 PyTorch是由Facebook创建的开源机器学习框架,其中TensorFlow是完全基于数据流图的。它是
    的头像 发表于 08-17 16:10 1196次阅读