乐读窝

深度学习

乐读窝 > 文学理论 > 深度学习

6.4 架构设计

书籍名:《深度学习》    作者:伊恩.古德费洛



神经网络设计的另一个关键点是确定它的架构。架构(architecture)一词是指网络的整体结构:它应该具有多少单元,以及这些单元应该如何连接。

大多数神经网络被组织成称为层的单元组。大多数神经网络架构将这些层布置成链式结构,其中每一层都是前一层的函数。在这种结构中,第一层由下式给出:

第二层由

给出,以此类推。

在这些链式架构中,主要的架构考虑是选择网络的深度和每一层的宽度。我们将会看到,即使只有一个隐藏层的网络也足够适应训练集。更深层的网络通常能够对每一层使用更少的单元数和更少的参数,并且经常容易泛化到测试集,但是通常也更难以优化。对于一个具体的任务,理想的网络架构必须通过实验,观测在验证集上的误差来找到。



6.4.1 万能近似性质和深度


线性模型,通过矩阵乘法将特征映射到输出,顾名思义,仅能表示线性函数。它具有易于训练的优点,因为当使用线性模型时,许多损失函数会导出凸优化问题。可惜的是,我们经常希望我们的系统学习非线性函数。

乍一看,可能认为学习非线性函数需要为我们想要学习的那种非线性专门设计一类模型族。幸运的是,具有隐藏层的前馈网络提供了一种万能近似框架。具体来说,万能近似定理(universal  approximation  theorem)(Hornik  et  al.,1989;Cybenko,1989)表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数(例如logistic  sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。前馈网络的导数也可以任意好地来近似函数的导数(Hornik  et  al.,1990)。Borel可测的概念超出了本书的范畴。对于我们想要实现的目标,只需要知道定义在的有界闭集上的任意连续函数是Borel可测的,因此可以用神经网络来近似。神经网络也可以近似从任何有限维离散空间映射到另一个的任意函数。虽然原始定理最初以具有特殊激活函数的单元的形式来描述,这个激活函数当变量取绝对值非常大的正值和负值时都会饱和,万能近似定理也已经被证明对于更广泛类别的激活函数也是适用的,其中就包括现在常用的整流线性单元(Leshno  et  al.,1993)。

万能近似定理意味着无论我们试图学习什么函数,我们知道一个大的MLP一定能够表示这个函数。然而,我们不能保证训练算法能够学得这个函数。即使MLP能够表示该函数,学习也可能因两个不同的原因而失败。首先,用于训练的优化算法可能找不到用于期望函数的参数值。其次,训练算法可能由于过拟合而选择了错误的函数。回忆第5.2.1节中的“没有免费的午餐”定理,说明了没有普遍优越的机器学习算法。前馈网络提供了表示函数的万能系统,在这种意义上,给定一个函数,存在一个前馈网络能够近似该函数。不存在万能的过程既能够验证训练集上的特殊样本,又能够选择一个函数来扩展到训练集上没有的点。

万能近似定理说明,存在一个足够大的网络能够达到我们所希望的任意精度,但是定理并没有说这个网络有多大。Barron(1993)提供了单层网络近似一大类函数所需大小的一些界。不幸的是,在最坏情况下,可能需要指数数量的隐藏单元(可能一个隐藏单元对应着一个需要区分的输入配置)。这在二进制值的情况下很容易看到:向量上的可能的二值型函数的数量是,并且选择一个这样的函数需要2n位,这通常需要O(2n)的自由度。

总之,具有单层的前馈网络足以表示任何函数,但是网络层可能大得不可实现,并且可能无法正确地学习和泛化。在很多情况下,使用更深的模型能够减少表示期望函数所需的单元的数量,并且可以减少泛化误差。

存在一些函数族能够在网络的深度大于某个值d时被高效地近似,而当深度被限制到小于或等于d时需要一个远远大于之前的模型。在很多情况下,浅层模型所需的隐藏单元的数量是n的指数级。这个结果最初被证明是在那些不与连续可微的神经网络类似的机器学习模型中出现,但现在已经扩展到了这些模型。第一个结果是关于逻辑门电路的(Håstad,1986)。后来的工作将这些结果扩展到了具有非负权重的线性阈值单元(Håstad  and  Goldmann,1991;Hajnal  et  al.,1993),然后扩展到了具有连续值激活的网络(Maass,1992;Maass  et  al.,1994)。许多现代神经网络使用整流线性单元。Leshno  et  al.(1993)证明带有一大类非多项式激活函数族的浅层网络,包括整流线性单元,具有万能的近似性质,但是这些结果并没有强调深度或效率的问题——它们仅指出足够宽的整流网络能够表示任意函数。Montufar  et  al.(2014)指出一些用深度整流网络表示的函数可能需要浅层网络(一个隐藏层)指数级的隐藏单元才能表示。更确切地说,他们说明分段线性网络(可以通过整流非线性或maxout单元获得)可以表示区域的数量是网络深度的指数级的函数。图6.5解释了带有绝对值整流的网络是如何创建函数的镜像图像的,这些函数在某些隐藏单元的顶部计算,作用于隐藏单元的输入。每个隐藏单元指定在哪里折叠输入空间,来创造镜像响应(在绝对值非线性的两侧)。通过组合这些折叠操作,我们获得指数级的分段线性区域,它们可以概括所有种类的规则模式(例如,重复)。

图6.5 关于更深的整流网络具有指数优势的一个直观的几何解释,来自Montufar  et  al.(2014)。(左)绝对值整流单元对其输入中的每对镜像点有相同的输出。镜像的对称轴由单元的权重和偏置定义的超平面给出。在该单元顶部计算的函数(绿色决策面)将是横跨该对称轴的更简单模式的一个镜像。(中)该函数可以通过折叠对称轴周围的空间来得到。(右)另一个重复模式可以在第一个的顶部折叠(由另一个下游单元)以获得另外的对称性(现在重复4次,使用了两个隐藏层)。经Montufar  et  al.(2014)许可引用此图

Montufar  et  al.(2014)的主要定理指出,具有d个输入、深度为l、每个隐藏层具有n个单元的深度整流网络可以描述的线性区域的数量是

意味着,这是深度l的指数级。在每个单元具有k个过滤器的maxout网络中,线性区域的数量是

当然,我们不能保证在机器学习(特别是AI)的应用中想要学得的函数类型享有这样的属性。

还可能出于统计原因来选择深度模型。任何时候,当选择一个特定的机器学习算法时,我们隐含地陈述了一些先验,这些先验是关于算法应该学得什么样的函数的。选择深度模型默许了一个非常普遍的信念,那就是我们想要学得的函数应该涉及几个更加简单的函数的组合。这可以从表示学习的观点来解释,我们相信学习的问题包含发现一组潜在的变差因素,它们可以根据其他更简单的潜在的变差因素来描述。或者,我们可以将深度结构的使用解释为另一种信念,那就是我们想要学得的函数是包含多个步骤的计算机程序,其中每个步骤使用前一步骤的输出。这些中间输出不一定是变差因素,而是可以类似于网络用来组织其内部处理的计数器或指针。根据经验,更深的模型似乎确实在广泛的任务中泛化得更好(Bengio  et  al.,2007b;Erhan  et  al.,2009;Bengio,2009;Mesnil  et  al.,2011;Ciresan  et  al.,2012;Krizhevsky  et  al.,2012a;Sermanet  et  al.,2013;Farabet  et  al.,2013;Couprie  et  al.,2013;Kahou  et  al.,2013;Goodfellow  et  al.,2014d;Szegedy  et  al.,2014a)。图6.6和图6.7展示了一些实验结果的例子。这表明使用深层架构确实在模型学习的函数空间上表示了一个有用的先验。

图6.6 深度的影响。实验结果表明,当从地址照片转录多位数字时,更深层的网络能够更好地泛化。数据来自Goodfellow  et  al.(2014d)。测试集上的准确率随着深度的增加而不断增加。图6.7给出了一个对照实验,它说明了对模型尺寸其他方面的增加并不能产生相同的效果

图6.7 参数数量的影响。更深的模型往往表现更好。这不仅仅是因为模型更大。Goodfellow  et  al.(2014d)的这项实验表明,增加卷积网络层中参数的数量,但是不增加它们的深度,在提升测试集性能方面几乎没有效果。图例标明了用于画出每条曲线的网络深度,以及曲线表示的是卷积层还是全连接层的大小变化。我们可以观察到,在这种情况下,浅层模型在参数数量达到2000万时就过拟合,而深层模型在参数数量超过6000万时仍然表现良好。这表明,使用深层模型表达出了对模型可以学习的函数空间的有用偏好。具体来说,它表达了一种信念,即该函数应该由许多更简单的函数复合在一起而得到。这可能导致学习由更简单的表示所组成的表示(例如,由边所定义的角)或者学习具有顺序依赖步骤的程序(例如,首先定位一组对象,然后分割它们,之后识别它们)



6.4.2 其他架构上的考虑


到目前为止,我们都将神经网络描述成层的简单链式结构,主要的考虑因素是网络的深度和每层的宽度。在实践中,神经网络显示出相当的多样性。

许多神经网络架构已经被开发用于特定的任务。用于计算机视觉的卷积神经网络的特殊架构将在第9章中介绍。前馈网络也可以推广到用于序列处理的循环神经网络,但有它们自己的架构考虑,这将在第10章中介绍。

一般来说,层不需要连接在链中,尽管这是最常见的做法。许多架构构建了一个主链,但随后又添加了额外的架构特性,例如从层i到层i+2或者更高层的跳跃连接。这些跳跃连接使得梯度更容易从输出层流向更接近输入的层。

架构设计考虑的另外一个关键点是如何将层与层之间连接起来。默认的神经网络层采用矩阵W描述的线性变换,每个输入单元连接到每个输出单元。在之后章节中的许多专用网络具有较少的连接,使得输入层中的每个单元仅连接到输出层单元的一个小子集。这些用于减少连接数量的策略减少了参数的数量以及用于评估网络的计算量,但通常高度依赖于问题。例如,第9章描述的卷积神经网络使用对于计算机视觉问题非常有效的稀疏连接的专用模式。在这一章中,很难对通用神经网络的架构给出更多具体的建议。我们在随后的章节中介绍一些特殊的架构策略,可以在不同的领域工作良好。