理解深度学习需要重新思考泛化

2024-05-09 13:08

本文主要是介绍理解深度学习需要重新思考泛化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇文章来自ICLR2017 best paper,是一片十分有争议的文章,看完之后在小组会上跟大家分享了这篇文章,最终经过一系列讨论,结合种种实验得出结论,我们认为数据对于泛化性能来说是十分重要的,因为对于实验中的数据来说,我们可以发现在真实数据上的实验结果以及泛化结果相对于其他数据副本来说都是极具优势的。以下为个人观点:

我认为这篇文章只是提出了一个新的思考,给出了一个新的研究方向,至于是否有意思,目前无从得知,斯以为它能获得最佳论文的理由如下:

首先,作者团队足够强大,MIT博士,谷歌大脑团队,深度学习三大巨头之一的成员;

其次,由于最近深度学习的研究在很多方向上已经很难开展出十分醒目的研究,比如设计新的模型种种变得并没有那么容易,而这篇paper的出现给大家引了一条新路,开拓了一个新的研究方向。但是它只是给了大家一种新的思考,至于它的实际意义,个人认为目前仍不能确定;

最后,证明了以前的方法不好,这在一定程度上对前人的工作进行了一个前所未有的评价,不敢说否定,但确实有一定的冲击性。

因此,评委认为对这篇paper给予了很高的评价。

下面是我个人对这篇paper的一个翻译,有些地方可能翻译的而不够准确,仅供参考。

UNDERSTANDING DEEP LEARNING REQUIRESRETHINKING GENERALIZATION

摘要

尽管体积巨大,成功的深度人工神经网络在训练和测试性能之间可以展现出非常小的差异。过去一般将其归功于泛化误差小,无论是对模型谱系的特点还是对于训练中使用的正则技术来说。

通过广泛的系统的实验,我们展示了传统方法无法解释为什么大规模神经网络在实践中泛化表现好。 具体来说,我们的实验证明了用随机梯度方法训练的、用于图像分类的最先进的卷积网络很容易拟合训练数据的随机标记。这种现象本质上不受显式正则化影响,即使我们通过完全非结构化随机噪声来替换真实图像,也会发生这种现象。我们用一个理论结构证实了这些实验结果,表明只要参数的数量超过实践中通常的数据点的数量,简单两层深的神经网络就已经具有完美的有限样本表达性(finite sample expressivity)。我们通过与传统模型进行比较来解释我们的实验结果。

【一句话总结】通过深入系统的实验,我们指出传统方式无法解释为什么大规模神经网络在实践中泛化表现良好,同时指出我们为何需要重新思考泛化问题。

   1介绍

深度人工神经网络通常具有远远多于训练样本数目的可训练模型参数 。然而,这些模型中的一些显示出非常小的泛化误差(即“训练误差”与“测试误差”之间的差异比较小)。同时,很容易想出一些泛化很差的自然模型架构。那么,泛化好的神经网络与泛化不好的神经网络有什么区别?对这一问题做出满意的回答,不仅有助于更好地理解神经网络,还可能带来更正确可靠的模型架构设计。

为了回答这个问题,统计学习理论提出了一些能够控制泛化误差的不同复杂度测度。这些包括VC维,拉德马赫复杂度,和均匀稳定性等。而且,当参数的数量很大时,理论认为需要某种形式的正规化来确保小的泛化误差。正则化也可能是隐式的,如提前停止的情况。

 

2我们的贡献

在这个工作中,我们通过展示传统的泛化观点不能够解释为什么不同的神经网络具有截然不同的泛化性能。

随机测试 我们方法论的核心是众所周知的,即从非参数统计中随机化一个变体。在第一组实验中,我们在数据的副本上训练了一些标准的结构,在这个副本数据中,真正的标签被替换为随机的标签。我们的中心发现可以概括为:

深度神经网络很容易拟合随机标签

更确切地说,当我们在真正的数据集上完全随机化标记然后进行训练的时候,神经网络的训练误差为0。当然,测试错误并不是很好,因为没有训练标签和测试标签之间的相关性。

总结在这种情况下,实例和分类标签之间不再有任何关系。因此,学习是不可能发生的。直觉告诉我们,这种不可能会在训练过程中很清楚地表现出来,比如训练不收敛,或者收敛速度大幅减慢。让我们感到意外的是,有多个标准架构的训练过程的好些属性,在很大程度上都没有受这种标签转换的影响。

 

换句话说,通过单独的随机化标签,我们可以强制让一个模型的泛化误差在不改变其模型,以及模型大小,超参数还有优化器的情况下大幅度增加。我们在CIFAR10和ImageNet上分别对不同的标准结构进行训练后得出了这一事实。但是这个简单的陈述,从统计学的角度来看,这一观察结果具有深远的意义:

1 神经网络的有效容量足以记住整个数据集;

2对标签随机的数据进行优化很容易。事实上,与标签正确的训练过程相比,随机标签的训练时间也只增加一个小的常数因子;

3将标签打乱仅仅是做了一个数据转换,其他所有关于学习问题的属性都没有改变。

综上可得:

“……通过将标签随机化,我们可以强制模型不受改变、保持同样大小、超参数或优化器的情况下,大幅提升网络的泛化误差。我们在 CIFAR 10 和 ImageNet 分类基准上训练了好几种不同标准架构,证实了这一点。”

换句话说:模型本身、模型大小、超参数和优化器都不能解释当前最好的神经网络的泛化性能。因为在其他条件都不变的情况下,唯独泛化误差产生大幅变动,只能得出这一个答案。

在第一组实验上进行扩展,我们通过完全随机化的图像像素去替代真实图像,观察发现卷积神经网络继续适用于0训练误差的数据。这表明,尽管他们是这种结构,卷积神经网络可以拟合随机噪声。此外,我们进一步改变随机化的数量,在无噪声和完全噪声的情况下平滑地插入数据集。这样一来,标签还是保有某种程度的信号,从而会造成一系列间接的学习问题。随着噪声水平的提高,我们观察到泛化误差呈现出稳定的恶化。这表明神经网络能够理解数据中的剩余信号,同时用暴力计算适应噪声部分。我们将在下面更详细地讨论这些观察结果排除了所有的VC维度,Rademacher复杂度和均匀的稳定性,作为对最先进神经网络的泛化性能的可能解释。

显式正则化的作用。 如果模型本身没有充分的正则化,它仍然可以看到显式正则化的帮助有多少。我们表明,显式正则化方法,如

这篇关于理解深度学习需要重新思考泛化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973497

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security