4 深度架构的多层网络
4.1 多层神经网络
下面是一个多层神经网络的典型方程集。就像在图表4.1中阐释的那样,从第一层输入x=h0开始,第k层计算上次一层的输出h(k-1)得到新的输出h(k)。参数bk是偏移向量,wk是权重矩阵。
双曲正弦应用于点积并且可以被XX或者其他饱和非线性器替代。最顶层的输出可以用于做出预测。该输出也可以结合一个有监督的目标模块y组成一个损失函数L(h,y)。输出层与其它层比起来或许有一个非线性的不同。比如下面的softmax(softmax回归是logistic回归的泛化版)。
此公式中的Wi是W的第i行,hi是正数并且。此softmax的输出可作为的估计值,Y与输入模式类相关。此例中人们经常用一个负的有条件的对数似然函数作为损失,它的在(x,y)对之上的期望值会被最小化。
4.2 训练深度神经网络的挑战
在激励了深度架构的需求这一非局部估计量之后,我们开始谈论如何训练它们这一难题。实验表明训练深度架构要比训练浅层架构难的多。
直到2006年之前,在机器学习会议中关于深度学习的讨论还不多。因为用标准随机初始化参数通常会得到泛化错误。需要注意的是,人们发现深度卷积神经网络比较容易训练,这会在章节4.5中讨论,然问具体原因人们现在也不太清楚。
很多未讨论的负面观察和实验结果表明,基于梯度的对深度有监督多层网络的训练(从随机初始化开始)会被困在“明显局部最小值或局部最大值”。并且随着深度的加深,泛化能力会越来越差。当从随机初始化开始训练的时候,得到的结果会倾向于比相应的只有一到两层隐含层的网络差。这甚至发生在即便k+1层网络可以表示一个k层网络所能够表示的内容(不需要附加大量的容量)的情况下;但反过来不然。然而,研究发现用无监督的学习算法预先训练每一层,以直接观测结果x作为第一层输入,此时便能够得到好的结果。开始有一个用于RBM生殖模型的试验,随后又有一个实验得到了相似的结果,它用自动编码器 生成的变量来训练每一层。绝大多数这样的论文都用到了层宽的贪婪无监督学习(下章会有更详细的讲解)。第一步,用一个无监督的学习算法(如RBM或一些 auto-encoder)训练低层网络,对第一层的参数初始集合做激励;第二步,用第一层的输出(一个对原始数据的新表示)作为其它层的输入,用与上类似的方法初始化第二层;第三部,通过这样的方法初始化了几层之后,就可以转向正常的有监督学习了。无监督预训练与随机初始化相比,优点是明显的,这在一些统计比较中得到证实。要靠什么原理来解释为什么这样做能改进效果呢?有一条线索或许能帮助我们辨明隐藏在效果提升背后的原理,它既不来自RBM也不来自auto-encoder。这些算法的共同特点是局部层次的无监督标准。为每一层注入一个无监督训练信号或许可以帮助我们指导这些层的参数朝着更好的参数空间去回归。
在[202]文献中,使用了示例参数对(x,x~)来训练网络,它们要么被期望是属于“邻居”这样的关系,要么不是。考虑此模型的h(x),它是参数x在第k层的表示。一个局部训练标准被定义在每一层中,它是hk(x)与hk(x~)的中间表示,不管x与x~是否为邻居,它总这样表示(举例来说,可以为输入空间中的k-临近 邻居)。同样的标准已经被成功地用于嵌入了一个低维的无监督的复写学习算法;但此处我们用在了神经网络中的一个或多个中间层上。照这样的慢特征分析的思路继续下去,利用高纬抽象的短时不变性来证明一个对中间层的无监督指导效果:连续帧可能包含相同的对象。
显然,这些技术可以显著提高测试错误,至少是在研究类型的任务中,但这是为什么呢?一个要问的基本问题是:这归因于更好的优化还是更好的正规化上呢?就像下面讨论的那样,答案或许并不适用于通常的优化或正规化的定义。
一些试验很清楚地显示,一个人可以通过无监督的预训练得到一个深度神经网络,进而 将训练分类错误降低到零,这表明正规化的效果要比优化的效果更佳。文献[50]给出的实验也表明了这一点——对于同样的训练错误(表现在训练期间的不同方面),使用无监督的预训练可以被显著减少。像在[50]中讨论的那样,无监督的预训练可以被看做一个优先的规范:无监督的预训练相当于在结果允许的范围内对参数空间的回归做了一次约束。这个约束强制解决方案邻近于无监督的预训练效果,最理想的情况下对应于输入中的统计结构的捕获。另一方面,其他实验表明对低层的贫乏的调整是缺少预训练情况下结果较糟的原因:当顶层的隐含层被约束(强制变小)时,标准初始化的深度网络(没有经过无监督的预训练)无论在训练集上还是测试集上都有着糟糕的表现,并且同样不如预训练过的网络。在前面提到的训练误差变为零的实验中,几乎总是如此——每一层隐含单元的数目(hyper-parameter)被允许设置为必要的最大值(在验证集中用来最小化误差)。
在文献[17,98]中提出的解释性假说是当顶层的隐含层无约束时,最靠上的两层(对应于一个常规的一个隐含层的神经网络)足以适应训练集,作为上两层输出的输入表示,即便它所包含的信息比较贫乏。另一方面,经过无监督的预训练,低层已经被充分的优化,并且一个小的顶层就足够了,一个低训练误差也就会得到更好的泛化。在[50]中描述的其他文献也与用随机参数初始化得出的结果一致,那些低层(与输入靠的较近的层次)没有得到充足的训练。这些实验都表明了无监督的预训练是对深度架构中低层的一个很好的标记。
从实验中我们得知一个两层的网络(只包含一个隐含层)通常情况下能得到很好的训练,并且可以从这种观点中引申出——最靠上的两层来自于一个输入是低层输出的浅层网络。
优化深层神经网络的最后一层是标准训练时常用的一个凸优化问题。
最后两层优化,虽然不是凸问题,但也比优化深度网络容易得多(事实上当隐含单元的数量趋近无限时,两层网络的训练标准可以被像凸问题那样转化)。
如果有足够的隐藏单元(即足够的容量)在顶部的隐藏层,训练误差可以变得非常低,即便下层没有得到适当的训练(只要他们保持足够的原始输入信息),但是这可能会比浅层神经网络带来更糟的泛化效果。当训练误差较低和测试误差高同时发生时,我们通常称之为过度拟合现象。自从无监督训练降低测试误差以来,已被作为一种数据相关规范。其他的强有力的证据表明无监督训练就像一个正则器:特别地,当没有足够的容量时,无监督训练倾向于削弱泛化能力,这也发生在训练集的规模较小时(比如 MNIST,规模不够十万的样例)。尽管无监督预训练会提升测试误差,但它会提升训练误差。
另一方面,对于更大的训练集与更好的初始隐藏层来说,它们的训练和泛化误差都可以使用使用无监督训练来显著降低(见下面的图4.2和讨论)。我们假设在一个训练效果很好的深度神经网络中,隐含层因为输入数据表示得当表现也很好,它就会做出好的预测。当低层初始化的较差的时候,这些确定性和持续的表示通常保持大部分的信息输入,但这些表示可能争夺和伤害输入,对得到较好泛化的顶层的分类性能的提升甚至还不足以弥补这些。
根据这个假设,尽管用像高斯过程或一个支持向量机这样的凸机器来替代顶部两层可以产生一些改进,特别是对于训练误差,如果低层尚未充分优化它不会有太大帮助。也就是说,一个好的原始的表示层还没有被发现。
因此,一个假设是,无监督训练通过允许对深层架构低层深的调整,有助于得到更好的泛化。虽然通过只调整顶层容量来适配训练样例的方法能够降低训练误差,但更好的泛化能力往往通过恰当的调整所有层次来实现。 另一个实现更好的泛化性能的途径可能来自一种正则化形式:通过无监督训练,下层得到约束,以便捕获输入分布的规律。考虑随机输入输出对(X,Y), 这样的正则化类似于无标签例子的半监督学习的假说效果或最大化P(X,Y)(产生模型)与P(Y|X)(判别模型)的对数似然函数的效果。如果真实的P(X)与P(Y|X)在函数X(举例来说,独立地选择,让其中一个的学习效果不影响另一个)中不相关,那么P(X)的无监督学习将不会对P(Y|X)的学习有帮助效果。但如果它们是相关的话,并且假设在估计P(X)与P(Y|X)时使用了同样的参数,那么每一对(X,Y)在P(Y|X)上产生的信息不仅可以通过常规途径产生,也可以通过P(X)产生。
例如,在一个深度置信网络中,双方分布基本上具有相同的参数,所以包含在P(Y |X)的估计值中的参数可以从数据依赖的正规化中受益:他们已经在一定程度上与P(Y | x)以及与P(X)保持一致。
让我们回到优化VS无监督预训练得到的更优解的规范化解释这个问题中来。请注意谨慎使用“优化”一词。我们没有通常意义上的优化难度。事实上,从整个网络的角度来看,是没有什么困难的,因为在前两层中,大部分时候,一个人可以处理的误差很小。然而,如果考虑调整较低的层的问题(同时保持隐数的倒数第二层单元的数量(即,顶隐层)或上面的两层的权重足够小),那么也许这时候才可以探讨一个优化的难度。一种方法来调和优化
与正规化的观点可能要考虑真实的在线设置(这里的例子来自一个无限流和一个不循环通过训练集)。在这种情况下,在线梯度下降是执行推广误差的随机优化。如果受到监督的预训练结果是其中一个单纯的正规化解释,人们便会期望有几乎无限的训练集,那么无论有没有预训练,在线误差都会收敛到同一水平。另一方面,如果这里提出的解释性的假设是正确的,我们会期望非监督预训练会带来明确的好处,即使在网络设置这一问题上。为了探索这个问题,我们已经使用了“无限MNIST”数据集[ 120 ],即,一个几乎无限流的MNIST样数字图像(随机获得翻译,旋转,缩放,等等;参见[ 176 ]的定义)。如图4.2所示,一个三隐数层神经网络接受在线训练后,比接受预先训练时的收敛误差显著降低(如堆叠降噪自动编码器,见第7.2节)。该图显示了网络误差的进步(接下来的1000例),该误差是一个无偏的蒙特卡罗估计的泛化误差。前2500000个更新用于无监督的预训练。该图明显表明,非监督预训练会收敛到一个较低的误差水平,即,它不仅是一个正则化矩阵,也可以找到更好的极小值的优化准则。尽管从表面上看,这与正则化假设并不矛盾:由于局部最小值的原因,正则化的影响仍然存在,即使数量的例子趋于无穷大。这种解释的另一面是,一旦驱动力陷于明显的局部最小值附近,被标记的例子将停止提供更多新的信息。
为了解释低层会更难优化,述研究表明梯度向后传播到低层可能不足以移动参数相应的良好的解决方案区域。根据这一假说,相对于较低层次的参数优化会陷入在一个明显很小的局部最小值或平台中去(即,梯度小)。由于基于梯度的顶层训练工作十分合理,那将意味着当我们朝着较低的层移动时,梯度所需的参数的变化不够丰富,又或使误差函数梯度下降过于病态以致无法避开这些明显的局部最小值。正如4.5部分的争论,这可能与观察到的结果相关,深的卷积神经网络容易培养,或许是因为他们在每一层中都有一个非常特殊的稀疏的连接。也许在探索深网络梯度开发和通过长序列[ 22,81,119 ]分析递归神经网络的训练之间存在困难。神经网络可以通过考虑不同的每个神经元的输出不同的变量的时间的步骤“打开时间”,使通过一个长的输入序列展开的网络形成的一个很深的架构。在递归神经网络中,训练难度的原因可以追溯到梯度传播非线性的消失(有时是爆炸)。除此之外,还有其他的困难,即在有递归神经网络的情况下, 短期(较短的路径在展开图计算)和长期(相关成分梯度较长的路径图)的不匹配。
4.3 深度架构的无监督学习
正如我们所看到的,截至目前,层宽的无监督学习已经是所有成功的深度架构学习算法中的重要组成部分。如果在输出层定义的梯度准则变得不那么有用,是因为他们向低层后向传播。我们有理由相信,一个无监督学习的标准定义的单个层可以用来移动它的参数以便在一个有利的方向发展。我们可以合理地去期望——单层学习算法捕获了层间的输入统计规律。PCA(Principal Component Analysis)和ICA的标准变体要求尽可能多的发生信号似乎是不合适的,因为它们通常不理解在所谓的过拟合情况,即在输出层的数量大于输入层的数量情况。这表明在拓展ICA应对过拟合现象的方向上,同PCA、ICA相关算法一样,比如RBM与自动编码器,它们都可以应对过拟合现象。事实上,这些应用在多层系统的上下文中放入单层非监督学习算法的实验也证实了这个想法。此外,叠加线性预测(如两层PCA) 仍然是一个线性变换,,而不是构建更深层次的架构。
除了无监督学习的激励会对减少基于在每个级别的架构不可靠的更新方向有所帮助外, 我们已经介绍过了另一个在每个级别的架构中使用非监督学习的动机。这可能是一种自然地做法——通过不同层次的抽象概念把问题分解成了子问题。我们知道无监督学习算法可以在输入分布中提取重要信息。此信息可以在分布式表示中捕获。也就是说,捕获不同输入中的凸因素的特征集。一个单层无监督学习算法可以提取这些特征,但是因为层的容量限制,特征提取的第一级会被视为低级特性。可想而知,基于同样原理的第二层学习可以轻微地提取高层新特征。通过这种方式,我们可以想象,更高级别的抽象描述输入可能实现。在这一过程中需要注意,所有的学习是如何被保持在局部每一层的。因此,当我们试图优化一个单一全局标准时,赋予基于梯度扩散行为可能伤害梯度学习的神经网络。这促使在下一节中,我们将正式讨论深度置信网络。
4.4 深度生成架构
除了无监督预测器中的预训练是有用的之外,深架构的无监督学习在可以学习感兴趣的分布并从中生成样本。通常,生成模型可以被表示为图形化模型:可以用图说明哪些节点代表随机变量和弧以及随机变量之间的依赖关系。所有变量的联合分布可以在图中用邻居关系表示出来。通过有向弧,一个节点同他的祖先是条件独立的。一些随机变量在图形模型可以观察到,另一些(被称之为隐含变量)不能被观察到。S型信念网络是生成型的多层神经网络,它在06年前被提出和学习,它用变化的近似值去训练。在S型信念网络中,每一层的单元(典型的二进制随机变量)都是独立的,如图4.3所示。这些条件分布的典型参数化(向下传递,而不是在普通神经网络中那样向上传递)类似于神经元的激活方程(图表4.1)。
Hik是第k层编号为i的隐含单元的二进制激活码,hk是向量,我们用向量x=h0表示输入。注意我们是如何注解P(...)的,它总是代表一种和我们模型有关的分布概率,然而,P~是训练分布(训练集的经验分布或训练样例的生成分布)。底层在输入空间中产生一个向量x,同时我们希望模型能对训练数据给出高可能性。考虑多层的情况,生成模型会被下面的式子分解:
生成模型会向P(x)边缘化发展,但这在试验中是棘手的,除非是很小的模型。在S性信念网络中,顶层的权重通常会被因式分解,一个单一的伯努利参数是每一个二进制单元都需要的。深度信念网络类似于S型信念网络,但在顶层的参数化过程中稍微不同。如图4.4所示:
上面两层的联合分布是一个受限制的玻耳兹曼机。
如图4.5所示,它的的推理和训练算法将会在5.3与5.4章节中分别解释。此图明显地展示出了S型信念网络与DBN的细微差别。后者一层一层贪婪的利用训练中的注解,从而渐渐地构造出一个相比于原始数据更抽象的表示。关于RBM的一个详细描述和深度架构的贪婪层级算法将会在接下来的章节5和6中讲述。
4.5 卷积神经网络
虽然深监督神经网络在使用无监督预训练之前很难训练,但一个明显的例外:卷积神经网络。卷积神经网络的灵感来自视觉系统的结构,特别是来自文献83提出的模型。第一个计算模型基于这些局部神经元之间的连接性和在福岛新认知机的组织图像的转换等级。他承认,当具有相同参数的神经元在不同应用的位置时,可以得到平移不变性。后来,勒存和合作者,跟进这个想法,使用误差梯度设计和训练了卷积网络,在一些模式识别场景中获取了最先进的性能与表现。至少在现代理解的水平下,生理视觉系统下的模型与卷积网络中的处理方式是一致的。也就是说,没有利益的关注和自上而下的反馈连接。直到今天,基于卷积网络的模式识别系统拥有着最好的性能,这在手写字符识别系统中得到了很好的证明,它成为这一领域的基准已经好多年了。
关于我们讨论的训练架构,(101、104、153、101)这几个卷积神经网络示例很有趣,因为他们通常有五、六、七层,这样一些层数使得基于随机初始化的全连接神经网络几乎不可能被适当的训练。在他们的系统架构中,到底是什么能够解释在视觉任务中表现出的优秀的泛化性能呢?
勒存的卷积神经网络被组织成两种类型的层——卷积层和二次抽样层,每一层都有一个地形结构,也就是说,每个神经元与一个固定的二维位置相关联,这些位置对应于输入图像的位置以及接受域(那些能够影响神经元应答的输入区域)。在每一层的每个位置上,都有一些不同数目的神经元,每一组输入权重都与神经元前层的矩形斑点相对应。那些仅仅是矩形输入斑点不同的相同输入权重,与不同位置的神经元相联系。
一个未经测试的假设是,这些神经元的小扇入(每个神经元的少量输入)帮助梯度通过这么多层的传播却没有扩散,这么多最终都成为无用的了。请注意,这 本身不会足以解释卷积网络的成功,因为在深层神经网络中,随机稀疏连接并不足以产生良好的结果。然而,扇入产生的影响与这样一个想法——通过许多渐变传播,路径逐渐变得过于分散,是一致的。也就是说,对输出误差的宽容或责备会被分散得很宽很薄。另一个假设(这并不排除第一条假设)是,分层的局部连接结构,是一个非常强大的优先,特别适合视觉任务,在良好的区域设置整个网络的参数(对应于零权重的所有非连接)可以使梯度优化工作得很好。事实是,即使在第一层使用随机权重,卷积神经网络也表现良好[151],即,比训练完全连接 神经网络好但比完全优化的卷积神经网络差。
就在最近,卷积结构已经被导入RBMs和DBNs。在[111]中一个重要的创新是衍生版本池/二次抽样单位的设计,它在报道的实验中表现很好,不仅在MNIST数字(一个数据库),也在加利福尼亚理工学院的对象分类标准上。此外,用可视化的功能得到每一层的输出特征(隐藏单元最喜欢的模式),这清晰地确认了能首先驱动深度架构的成分的多层的概念——用一个自然的方式从边缘到对象的一部分部分再到对象本身。
4.6 自动编码器
下面讨论的一些深度架构(深度置信网络与堆叠式自动编码机),作为神经网络的一种,被当做一个组件或监督装置来开发。自动编码器,也叫做auto-associator和空竹网络,它与在章节5.4.3中讨论的RBMs也有一些联系,通过差异对比展示了自动编码机的训练同RBM的训练也很类似。因为训练一个自动编码器看起来比训练一个RBM要容易,所以它们被用作建筑块来训练深度网络,每一层的自动编码器都可以单独训练。
训练一个auto-encoder,目的是把输入x编码到一些表示c(x),因此输入可以被表示重建。因此,自动编码机的目标输出也是它自身的编码输入。如果训练中用到一个线性隐藏层和一个均方误差准则,那么隐含单元k将会把输入投射到数据主分量的第一个k跨度上。如果隐含层是非线性的,那自动编码器的表现行为将不同于PCA,前者有能力捕获输入分布的多模态切面。我们倾向于这样一个构想——泛化均方误差标准为重建过程中的最小负数对数函数,给出编码c(x):
如果 x|c(X)是高斯的,我们就恢复常见的方差。如果输入xi是二进制的或被认为是二项概率的,那么损失函数将会是: