让我们从一个琐事开始:深度神经网络只是一个具有许多隐藏层的前馈网络。
这或多或少是关于定义的全部内容。神经网络可以是循环的或前馈的;前馈的在他们的图中没有任何循环,可以分层组织。如果有“很多”层,那么我们说网络很深。
一个网络必须有多少层才能达到深度?对此没有明确的答案(这有点像问有多少颗粒构成一个堆),但通常有两个或更多隐藏层算作深度。相比之下,只有一个隐藏层的网络通常被称为“浅层”。我怀疑这里会发生一些通货膨胀,十年后人们可能会认为任何少于十层的东西都是浅的,只适合幼儿园练习。非正式地,“深”表示网络难以处理。
这是一个插图,改编自这里:
但是,您要问的真正问题当然是,为什么有很多层是有益的?
我认为有点令人惊讶的答案是没有人真正知道。我将在下面简要回顾一些常见的解释,但没有一个被令人信服地证明是正确的,甚至无法确定拥有多层是否真的有益。
我说这很惊人,因为深度学习非常流行,每年都在打破所有记录(从图像识别,到下围棋,到自动翻译等),正在被行业使用等等。我们仍然不太确定为什么它运作良好。
我的讨论基于Goodfellow、Bengio 和 Courville 于 2017 年出版的深度学习书,该书被广泛认为是关于深度学习的书。(它可以在线免费获得。)相关部分是6.4.1 Universal Approximation Properties and Depth。
你写的
10 年前,我在课堂上了解到,就神经网络能够表示的功能而言,具有几层或一层(不包括输入和输出层)是等价的 [...]
您一定指的是所谓的通用逼近定理,该定理由 Cybenko 在 1989 年证明,并在 1990 年代被各种人推广。它基本上说浅层神经网络(具有 1 个隐藏层)可以逼近任何函数,即原则上可以学习任何东西。这适用于各种非线性激活函数,包括当今大多数神经网络使用的校正线性单元(教科书参考Leshno 等人 1993 年的结果)。
如果是这样,那么为什么每个人都使用深度网络?
好吧,一个天真的答案是因为它们工作得更好。下面是深度学习书中的一张图,表明它有助于在一项特定任务中拥有更多层,但在不同的任务和领域中经常观察到相同的现象:
我们知道浅层网络的性能与深层网络一样好。但事实并非如此;他们通常不会。问题是——为什么?可能的答案:
- 也许浅层网络比深层网络需要更多的神经元?
- 也许一个浅层网络更难用我们当前的算法训练(例如它有更讨厌的局部最小值,或者收敛速度更慢,或者其他什么)?
- 也许浅层架构不适合我们通常试图解决的那种问题(例如,对象识别是一个典型的“深层”、分层过程)?
- 还有什么?
《深度学习》一书主张要点 #1 和 #3。首先,它认为浅层网络中的单元数量随着任务复杂性呈指数增长。因此,为了有用,浅层网络可能需要非常大;可能比深度网络大得多。这是基于许多论文证明浅层网络在某些情况下需要成倍增加的神经元;但是,例如 MNIST 分类还是围棋是这样的情况还不是很清楚。其次,这本书是这样说的:
选择一个深度模型意味着一个非常普遍的信念,即我们想要学习的函数应该包括几个更简单的函数的组合。这可以从表示学习的角度解释为,我们相信学习问题包括发现一组潜在的变异因素,而这些因素又可以用其他更简单的潜在变异因素来描述。
我认为当前的“共识”是它是要点 #1 和 #3 的组合:对于现实世界的任务,深层架构通常是有益的,而浅层架构效率低下,并且需要更多的神经元才能获得相同的性能。
但这远未得到证实。考虑例如Zagoruyko 和 Komodakis,2016,Wide Residual Networks。2015 年出现了 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 月完全重写,所以下面的一些评论不再适用。]