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

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

相关文章

Linux命令学习之二

每日一结 ​               命令置换:是将一个命令的输出作为另一个命令的参数,命令格式如下: commond1 `command2` 其中,命令command2的输出将作为命令command1的参数,需要注意的是, 命令置换的单引号为ESC键下方的 ` 其意思就是说,先运行单引号内的命令,再将其命令作为

Linux命令学习之一

每日一结                                                                                        注:当用户不确定一个软件包的类型时, 可使用file命令查看文件类型

有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。

discuz-ucenter_api_for_java 有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。 所有的代码 1.UC.java package com.fivestars.interfaces.bbs.api;import java.io.IO

javaweb学习-jstl-c:forEach中 varStatus的属性简介

varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性。就拿varStatus=“status”来说,事实上定义了一个status名的对象作为varStatus的绑定值。该绑定值也就是status封装了当前遍历的状态,比如,可以从该对象上查看是遍历到了第几个元素:${status.count} 我们常会用c标签来遍历需要的数据,为了方便使用,varSta

java学习—null和isEmpty 区别

String fly1 = new String(); String fly2 = ""; String fly3 = null; 解释如下: 此时fly1是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) 此时fly2是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串) 此时fly3是未分配内存空间,无值,是一种无值(

javaWeb学习—getRequestURI,getRequestURL等的学习

我使用的是SpringMVC框架,做一个小的例子,说明一下对这个内容的学习和理解! 1:我的项目名称为 dufyun_SpringMVC  2:我测试的地址为 ${pageContext.servletContext.contextPath}/testName 3;后台获取的代码为: @RequestMapping(value="/testName",method=Req

maven学习系列——(五)maven聚合与继承

这一篇学习和整理maven的聚合和继承! 并用具体的项目讲解说明! 参考: http://www.cnblogs.com/xdp-gacl/p/4242221.html

maven学习系列——(四)maven仓库

这一篇学习和整理maven仓库的一些知识点 ! 参考: http://blog.csdn.net/wanghantong/article/details/36427433

maven学习系列——(三)maven项目的创建

这一篇大概会整理和总结到有如下知识点: (1):maven的使用入门一些命令 (2):用命令创建项目 (3):使用IDE集成工具创建项目–Eclipse和idea 3:使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目 新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:create -DgroupId=c

maven学习系列——(二)maven的安装和一些基本的配置

这一篇主要会总结maven在window上的安装,以及Eclipse安装maven插件。 会整理和贴出具体的安装步骤等! 配置大概会整理一下,方便自己查看和使用! Maven 的使用在Windows上使用比较多,一般的开发都是在Windows上;Linux上的使用相对比较少,不过会总结Windows和Linux系统两种安装方式。 首先会介绍在Windows和Eclipse安装Maven,L