神经网络和深度神经网络有什么区别,为什么深度神经网络效果更好?

机器算法验证 神经网络 深度学习
2022-02-09 12:29:46

我还没有看到用这些术语准确表达的问题,这就是我提出一个新问题的原因。

我感兴趣的不是神经网络的定义,而是理解与深度神经网络的实际区别。

更多背景信息:我知道神经网络是什么以及反向传播是如何工作的。我知道 DNN 必须有多个隐藏层。然而,10 年前在课堂上我了解到,就神经网络能够表示的功能而言,具有几层或一层(不包括输入和输出层)是等效的(参见 Cybenko 的通用逼近定理),并且具有更多的层使分析变得更加复杂而不会提高性能。显然,情况不再如此。

我认为,也许是错误的,差异在于训练算法和属性而不是结构,因此如果答案能够强调使迁移到 DNN 成为可能的原因(例如数学证明或随机玩网络),我将不胜感激?)和可取的(例如收敛速度?)

4个回答

让我们从一个琐事开始:深度神经网络只是一个具有许多隐藏层的前馈网络。

这或多或少是关于定义的全部内容。神经网络可以是循环的或前馈的;前馈的在他们的图中没有任何循环,可以分层组织。如果有“很多”层,那么我们说网络很深

一个网络必须有多少才能达到深度?对此没有明确的答案(这有点像问有多少颗粒构成一个堆),但通常有两个或更多隐藏层算作深度。相比之下,只有一个隐藏层的网络通常被称为“浅层”。我怀疑这里会发生一些通货膨胀,十年后人们可能会认为任何少于十层的东西都是浅的,只适合幼儿园练习。非正式地,“深”表示网络难以处理。

这是一个插图,改编自这里

深度与非深度神经网络

但是,您要问的真正问题当然是,为什么有很多层是有益的?

我认为有点令人惊讶的答案是没有人真正知道。我将在下面简要回顾一些常见的解释,但没有一个被令人信服地证明是正确的,甚至无法确定拥有多层是否真的有益。

我说这很惊人,因为深度学习非常流行,每年都在打破所有记录(从图像识别,到下围棋,到自动翻译等),正在被行业使用等等。我们仍然不太确定为什么它运作良好。

我的讨论基于Goodfellow、Bengio 和 Courville 于 2017 年出版的深度学习书,该书被广泛认为是关于深度学习的书。(它可以在线免费获得。)相关部分是6.4.1 Universal Approximation Properties and Depth

你写的

10 年前,我在课堂上了解到,就神经网络能够表示的功能而言,具有几层或一层(不包括输入和输出层)是等价的 [...]

您一定指的是所谓的通用逼近定理,该定理由 Cybenko 在 1989 年证明,并在 1990 年代被各种人推广。它基本上说浅层神经网络(具有 1 个隐藏层)可以逼近任何函数,即原则上可以学习任何东西这适用于各种非线性激活函数,包括当今大多数神经网络使用的校正线性单元(教科书参考Leshno 等人 1993 年的结果)。

如果是这样,那么为什么每个人都使用深度网络?

好吧,一个天真的答案是因为它们工作得更好。下面是深度学习书中的一张图,表明它有助于在一项特定任务中拥有更多层,但在不同的任务和领域中经常观察到相同的现象:

更多的层是好的

我们知道浅层网络性能与深层网络一样好。但事实并非如此;他们通常不会。问题是——为什么?可能的答案:

  1. 也许浅层网络比深层网络需要更多的神经元?
  2. 也许一个浅层网络更难用我们当前的算法训练(例如它有更讨厌的局部最小值,或者收敛速度更慢,或者其他什么)?
  3. 也许浅层架构不适合我们通常试图解决的那种问题(例如,对象识别是一个典型的“深层”、分层过程)?
  4. 还有什么?

深度学习》一书主张要点 #1 和 #3。首先,它认为浅层网络中的单元数量随着任务复杂性呈指数增长。因此,为了有用,浅层网络可能需要非常大;可能比深度网络大得多。这是基于许多论文证明浅层网络在某些情况下需要成倍增加的神经元;但是,例如 MNIST 分类还是围棋是这样的情况还不是很清楚。其次,这本书是这样说的:

选择一个深度模型意味着一个非常普遍的信念,即我们想要学习的函数应该包括几个更简单的函数的组合。这可以从表示学习的角度解释为,我们相信学习问题包括发现一组潜在的变异因素,而这些因素又可以用其他更简单的潜在变异因素来描述。

我认为当前的“共识”是它是要点 #1 和 #3 的组合:对于现实世界的任务,深层架构通常是有益的,而浅层架构效率低下,并且需要更多的神经元才能获得相同的性能。

但这远未得到证实。考虑例如Zagoruyko 和 Komodakis,2016,Wide Residual Networks2015 年出现了 150+ 层的残差网络,并赢得了各种图像识别比赛。这是一个巨大的成功,看起来像是一个支持深度的令人信服的论据。这是第一作者在残差网络论文上的演讲中的一个图(请注意,这里的时间令人困惑地移到了左边):

深度残差网络

但上面链接的论文表明,“仅”16 层的“宽”残差网络可以胜过 150 层以上的“深”残差网络。如果这是真的,那么上图的全部要点就失效了。

或者考虑一下Ba 和 Caruana,2014 年,深度网络真的需要深度吗?

在本文中,我们提供了经验证据,表明浅层网络能够学习与深度网络相同的功能,并且在某些情况下具有与深度网络相同数量的参数。为此,我们首先训练一个最先进的深度模型,然后训练一个浅层模型来模仿深度模型。使用下一节中描述的模型压缩方案训练模拟模型。值得注意的是,通过模型压缩,我们能够将浅层网络训练为与某些深度模型一样准确,即使当浅层网络直接在原始模型上进行训练时,我们无法将这些浅层网络训练为与深度网络一样准确标记的训练数据。如果一个与深度网络具有相同数量参数的浅层网络可以学习模仿一个具有高保真度的深度网络,

如果属实,这将意味着正确的解释是我的子弹 #2,而不是 #1 或 #3。

正如我所说 --- 还没有人真正确切地知道。


结束语

在过去的 10 年里,深度学习所取得的进步确实令人惊叹,但大部分进步都是通过反复试验实现的,我们仍然缺乏非常基本的了解,究竟是什么深度网络如此出色地工作。即使是人们认为对建立有效的深度网络至关重要的事情清单似乎每隔几年就会发生变化。

深度学习的复兴始于 2006 年,当时 Geoffrey Hinton(他在神经网络上工作了 20 多年,但没有受到任何人的极大兴趣)发表了几篇突破性论文,提供了一种训练深度网络的有效方法(科学论文神经计算论文) . 诀窍是在开始梯度下降之前使用无监督的预训练。这些论文彻底改变了该领域,几年来人们认为无监督的预训练是关键。

然后在 2010 年,Martens 表明,可以使用二阶方法(所谓的 Hessian-free 方法)训练深度神经网络,并且可以胜过使用预训练训练的网络:Deep learning via Hessian-free optimization然后在 2013 年 Sutskever 等人。表明具有一些非常聪明的技巧的随机梯度下降可以胜过无 Hessian 方法:关于深度学习中初始化和动量的重要性此外,大约在 2010 年,人们意识到使用整流线性单元而不是 sigmoid 单元会对梯度下降产生巨大影响。2014年出现Dropout,2015年出现残差网络,人们不断想出越来越有效的方法来训练深度网络和10 年前看似重要的见解,如今通常被认为是令人讨厌的事情。所有这一切很大程度上都是由反复试验驱动的,并且很少有人了解是什么让一些事情运作得如此顺利,而另一些事情则不然。训练深度网络就像一大堆技巧。成功的技巧通常是事后合理化的。

我们甚至不知道为什么深度网络会达到性能平台。仅仅 10 年,人们过去常常指责局部最小值,但目前的想法是这不是重点(当性能停滞不前时,梯度往往会保持较大)。这是一个关于深度网络的基本问题,我们甚至都不知道

更新:这或多或少是 Ali Rahimi 在 NIPS 2017 上关于机器学习作为炼金术的演讲的主题:https ://www.youtube.com/watch?v=Qi1Yry33TQE 。


[这个答案在 2017 年 4 月完全重写,所以下面的一些评论不再适用。]

到目前为止,答案很好,尽管这里没有人提到一些事情,这是我的 0.02 美元

我只是以故事的形式回答,应该让事情变得更有趣和清晰。这里没有 tldr。在此过程中,您应该能够理解其中的区别。

DNN 之所以会引发火花,有多种原因(星星必须对齐,就像所有相似的事物一样,这只是正确的地点、正确的时间等问题)。

一个原因是数据的可用性,大量数据(标记数据)。如果您希望能够概括和学习诸如“通用先验”或“通用先验”(也就是可以在任务/应用程序之间重复使用的基本构建块)之类的东西,那么您需要大量数据。我可以补充一下,野生数据,而不是在实验室中用受控照明和所有东西仔细记录的无菌数据集。Mechanical Turk 使这(标签)成为可能。

其次,使用 GPU 更快地训练更大网络的可能性使实验更快。ReLU 单元也使计算速度更快,并提供了它们的正则化,因为您需要在一层中使用更多单元才能压缩相同的信息,因为层现在更加稀疏,所以它也很适合 dropout。此外,它们还帮助解决了堆叠多层时发生的一个重要问题。稍后再谈。各种提高性能的多种技巧。就像使用小批量(实际上对最终错误有害)或卷积(实际上没有捕获与局部感受野一样多的方差),但计算速度更快。

与此同时,人们在争论他们是喜欢更瘦还是更胖,更小还是更高,有没有雀斑等等。优化就像是嘶嘶声还是爆炸声,所以研究正在转向更复杂的训练方法,比如共轭梯度和牛顿法,最后他们都意识到没有免费的午餐。网络在打嗝。

让事情变慢的是梯度消失的问题。人们说:哇,那太远了,伙计!简而言之,这意味着很难在靠近输入的层上调整误差。当你在蛋糕上添加更多层时,变得太不稳定了。您无法将有意义的错误反向传播回第一层。层数越多,效果越差。真可惜。

一些人发现使用交叉熵作为损失函数(好吧,同样,分类和图像识别)提供了某种正则化,有助于防止网络饱和,进而导致梯度无法很好地隐藏。

使事情成为可能的是使用无监督方法的每层预训练。基本上,随着压缩比的增加,你会使用一堆自动编码器并学习越来越少的抽象表示。这些网络的权重用于初始化监督版本。这以另一种方式解决了梯度消失问题:您已经从一个更好的起始位置开始了监督训练。因此,所有其他网络都站起来并开始反抗。但是网络无论如何都需要监督,否则不可能保持大数据静止。

现在,对于最后一部分,最终会导致您的答案太复杂而无法简而言之:为什么要多层而不是仅一层。因为我们可以!并且因为上下文和不变的特征描述符。和游泳池。

这是一个例子:你有一个图像数据集,你将如何使用这些数据训练一个计划 NN?好吧,天真地,您假设每一行,然后将其连接成一个长向量,这就是您的输入。你学什么?好吧,一些模糊的废话函数可能看起来不像任何东西,因为图像中的对象包含许多类型的差异,并且您无法区分相关和不相关的事物。在某些时候,网络需要忘记能够重新学习新东西。所以存在容量问题。这是更多的非线性动力学,但直觉是您需要增加神经元的数量才能在网络中包含更多信息。

所以关键是,如果你只是将图像作为一个整体输入,添加额外的层对你来说并没有太大的帮助,因为你无法学习抽象,这非常重要。因此,从整体上做事情并不能很好地工作,除非你用网络做更简单的事情,比如专注于特定类型的对象,所以你将自己限制在一个类中,并选择一些全局属性作为分类目标。

那么有什么办法呢?查看屏幕边缘并尝试阅读此文本。问题?听起来很愚蠢,你需要看看你在读什么。否则它太模糊/没有足够的分辨率/粒度。我们将焦点区域称为感受野。网络也需要能够集中注意力。基本上不是使用整个图像作为输入,而是沿着图像移动一个滑动窗口,然后将其用作网络的输入(比人类所做的随机性要小一些)。现在,您还有机会捕捉像素之间的相关性以及物体之间的相关性,您还可以区分坐在沙发上的瞌睡猫和倒立的猫蹦极。整洁,恢复了对人类的信心。网络可以在多个层次上学习图像中的局部抽象。网络学习过滤器,

所以,总结一下:感受野/卷积、无监督初始化、校正线性单元、dropout 或其他正则化方法。如果您对此非常认真,我建议您看一下 Schmidhuber 的神经网络深度学习:概述这里是预印本的网址http://arxiv.org/abs/1404.7828

记住:大学习,深度数据。单词。

通俗地说,与经典神经网络的主要区别在于它们具有更多的隐藏层。

这个想法是为层添加标签以进行几层抽象:

例如,用于物体识别的深度神经网络

  • 第 1 层:单个像素
  • 第 2 层:边缘
  • 第 3 层:表格(圆形、正方形)
  • 第 n 层:整个对象

你可以在Quora中找到关于这个问题的一个很好的解释

而且,如果您对这个主题感兴趣,我建议您看看这本书

为了扩展 David Gasquez 的回答,深度神经网络和传统神经网络之间的主要区别之一是我们不只是将反向传播用于深度神经网络。

为什么?因为反向传播训练后面的层比训练前面的层更有效——当你在网络中越早越早,错误就越小,越分散。所以一个十层网络基本上是七层随机权重,然后是三层拟合权重,和三层网络一样好。请参阅此处了解更多信息。

所以概念上的突破是将单独的问题(标记层)视为单独的问题——如果我们首先尝试解决构建通用良好的第一层的问题,然后尝试解决构建通用良好的第二层的问题,最终我们将拥有一个深度特征空间,我们可以将其输入到我们的实际问题中。