Tom机器学习 第4章-人工神经网络

jiavaz 贡献于2012-06-26

作者 Huajun Zeng  创建于2001-12-28 02:51:00   修改者dell  修改于2009-03-03 01:02:00字数35082

文档摘要:人工神经网络(Artificial Neural Networks - ANNs)提供了一种普遍而且实用的方法,来从样例中学习值为实数、离散或向量的函数。像反向传播(BackPropagation)这样的算法使用梯度下降来调节网络参数以最佳拟合由输入-输出对组成的训练集合。
关键词:

第4章  人工神经网络 人工神经网络(Artificial Neural Networks——ANNs)提供了一种普遍而且实用的方法,来从样例中学习值为实数、离散或向量的函数。像反向传播(BackPropagation)这样的算法使用梯度下降来调节网络参数以最佳拟合由输入-输出对组成的训练集合。ANN学习对于训练数据中的错误鲁棒性很好,且已经成功地应用到很多领域,例如视觉场景分析(interpreting visual scenes)、语音识别、以及机器人控制等。 4.1 简介 神经网络学习方法对于逼近实数值、离散值或向量值的目标函数提供了一种鲁棒性很强的方法。对于某些类型的问题,如学习解释复杂的现实世界中的传感器数据,人工神经网络是目前知道的最有效学习方法。例如,本章要描述的反向传播算法已在很多实际的问题中取得了惊人的成功,比如学习识别手写字符(LeCun et al. 1989),学习识别口语(Lang et al. 1990)和学习识别人脸(Cottrell 1990)。Rumelhart et al.(1994)中概览了其实际的应用。 4.1.1 生物学动机 人工神经网络的研究在一定程度上受到了生物学的启发,因为生物的学习系统是由相互连接的神经元(neuron)组成的异常复杂的网络。而人工神经网络与此大体相似,它是由一系列简单单元相互密集连接构成,其中每一个单元有一定数量的实值输入(可能是其他单元的输出),并产生单一的实数值输出(可能成为其他很多单元的输入)。 为了加深对这种类比的认识,让我们考虑一些来自生物学的事实。例如,据估计人类的大脑是由大约1011个神经元相互连接组成的密集网络,平均每一个神经元与其他104个神经元相连。神经元的活性通常被通向其他神经元的连接激活或抑制。目前知道的最快的神经元转换时间是在10-3秒级别——与计算机的转换时间10-10秒相比慢很多。然而人类能够以惊人的速度做出复杂度惊人的决策。例如,你要通过视觉认出自己的母亲大约需要10-1秒。注意在这10-1秒的间隔内,被激发的神经元序列不长于数百步,因为单个神经元的转换速度已知。这个事实使很多人推测,生物神经系统的信息处理能力一定得益于对分布在大量神经元上的信息表示的高度并行处理。ANN系统的一个动机就是获得这种基于分布表示的高度并行算法。大多数的ANN软件在串行机器上仿真分布处理,然而更快版本的算法也已经在高度并行机和特别为ANN应用设计的专用硬件上实现。 由于ANN只是一定程度地受生物神经系统的启发,所以ANN并未模拟生物神经系统中的很多复杂特征,而且已经知道ANN的很多特征与生物系统也是不一致的。例如,对于我们考虑的ANN,每个单元输出单一的不变值,然而生物神经元输出的是复杂的时序脉冲。 长期以来,人工神经网络领域的研究者分为两个团体。一个团体的目标是使用ANN研究和模拟生物学习过程。另一个团体的目标是获得高效的机器学习算法,不管这种算法是否反映了生物过程。在本书中我们的兴趣符合后一团体,所以我们不会再把注意力用在生物模型上。若要获得关于使用 ANN模拟生物系统的更多信息请参考Churchland & Sejnowski(1992),Zornetzer et al.(1994),Gabriel & Moore(1990)。 4.2 神经网络表示 Pomerleau(1993)的ALVINN系统是ANN学习的一个典型实例,这个系统使用一个学习到的ANN以正常的速度在高速公路上驾驶汽车。ANN的输入是一个30´32像素的网格,像素的亮度来自一个安装在车辆上的前向摄像机。ANN的输出是车辆行进的方向。这个ANN通过观察人类驾驶时的操纵命令进行训练,训练过程大约5分钟。ALVINN用学习到的网络在高速公路上以70英里时速成功地驾驶了90英里(在分行公路的左车道行驶,同时有其他车辆)。 图4-1画出了ALVINN系统的一个版本中使用过的神经网络表示,这也是很多ANN系统的典型表示方式。神经网络显示在图的左边,输入的摄像机图像在它的下边。网络图中每个结点对应一个网络单元(unit)的输出,而从下方进入结点的实线为其输入。可以看到,共有四个单元直接从图像接收所有的30´32个像素。这四个单元被称为“隐藏”单元,因为它们的输出仅在网络内部,不是整个网络输出的一部分。每个隐藏单元根据960个输入的加权和计算得到单一的实数值输出。然后这四个隐藏单元的输出被用作第二层30个“输出单元”的输入。每个输出单元对应一个特定的驾驶方向,这些单元的输出决定哪一个驾驶方向是最强烈推荐的。 插图——原书页码: 84 sharp left-急剧左转 sharp right-急剧右转 straight ahead-正前方 30 Output units-30个输出单元 4 Hidden units-4个隐藏单元 30´32 sensor input retina-30´32传感器视网膜输入 图4-1 学习驾驶汽车的神经网络 ALVINN系统使用反向传播算法来学习驾驶汽车(上图),它的最高时速达到每小时70英里。左图显示了来自车前摄像机的图像是如何被映射到960个神经网络输入的,这些输入又前馈到4个隐藏单元,再连接到30个输出单元。网络输出编码了推荐的驾驶方向。右图显示了网络中一个隐藏单元的权值。进入这个隐藏单元的30´32个权值显示在大的矩阵中,白色的方框表示正权值而黑色的方框表示负权值。从这个隐藏单元到30个输出单元的权值被画在这个大矩阵上方的较小矩形中。从这些输出权值可以看出,激活这个隐藏单元会促进向左转。 图4-1中的右侧部分描绘的是一些学习得到的权值,它们与这个ANN的四个隐藏单元之一相联系。下面的黑白方格大矩阵描述的是从30´32像素输入到这个隐藏单元的权值。这里,白方格表示正权值,黑方格表示负权值,方格的大小表示权的数量。大矩阵正上方的较小的矩形表示从这个隐藏单元到30个输出单元的权。 ALVINN的网络结构是很多ANN中的典型结构。所有单元分层互连形成了一个有向无环图。通常,ANN图的结构可以有很多种类型——无环的或有环的,有向的或无向的。本章集中讨论以反向传播算法为基础的最常见和最实用的ANN方法。反向传播算法假定网络是一个固定结构,对应一个有向图,可能包含环。ANN学习就是为图中的每一条边选取权值。尽管某种类型的循环是允许的,大多数的实际应用都采用无环的前馈网络,与ALVINN使用的网络结构相似。 4.3 适合神经网络学习的问题 ANN学习非常适合于这样的问题:训练集合为含有噪声的复杂传感器数据,例如来自摄像机和麦克风的数据。它也适用于需要更多符号表示的问题,例如第3章讨论的决策树学习任务。这种情况下ANN和决策树学习经常产生精度大体相当的结果。可参见Shavlik et al. (1991)和Weiss and Kapouleas(1989)中关于决策树和ANN学习的实验比较。反向传播算法是最常用的ANN学习技术。它适合具有以下特征的问题: · 实例是用很多“属性-值”对表示的。要学习的目标函数是定义在可以用向量描述的实例之上的,向量由预先定义的特征组成,例如ALVINN例子中的像素值。这些输入属性之间可以高度相关,也可以相互独立。输入值可以是任何实数。 · 目标函数的输出可能是离散值、实数值或者由若干实数属性或离散属性组成的向量。例如,在ALVINN系统中输出的是30个属性的向量,每一个分量对应一个建议的驾驶方向。每个输出值是0和1之间的某个实数,对应于在预测相应驾驶方向时的置信度(confidence)。我们也可以训练一个单一网络,同时输出行驶方向和建议的加速度,这只要简单地把编码这两种输出预测的向量连接在一起就可以了。 · 训练数据可能包含错误。ANN学习算法对于训练数据中的错误有非常好的鲁棒性。 · 可容忍长时间的训练。网络训练算法通常比像决策树学习这样的算法需要更长的训练时间。训练时间可能从几秒钟到几小时,这要看网络中权值的数量、要考虑的训练实例的数量、以及不同学习算法参数的设置等因素。 · 可能需要快速求出目标函数值。尽管ANN的学习时间相对较长,但对学习的网络求值,以便把网络应用到后续的实例,通常是非常快速的。例如,ALVINN在车辆向前行驶时,每秒应用它的神经网络若干次,以不断地更新驾驶方向。 · 人类能否理解学到的目标函数是不重要的。神经网络方法学习到的权值经常是人类难以解释的。学到的神经网络比学到的规则难于传达给人类。 这一章的其余部分是这样组织的:我们先讨论训练单个单元的学习算法,同时介绍组成神经网络的几种主要单元,包括感知器( perceptron)、线性单元(linear unit)和sigmoid单元(sigmoid unit)。然后给出训练这些单元组成的多层网络的反向传播算法,并考虑几个一般性的问题,比如ANN的表征能力、假设空间搜索的本质特征、过度拟合问题、以及反向传播算法的变体。本章也给出了一个应用反向传播算法识别人脸的详细例子,并指导读者如何取得这个例子的数据和代码,并进一步实验这个应用。 4.4 感知器 一种类型的ANN系统是以被称为感知器(perceptron)的单元为基础的,如图4-2所示。感知器以一个实数值向量作为输入,计算这些输入的线性组合,然后如果结果大于某个阈值就输出1,否则输出-1。更精确地,如果输入为x1到xn,那么感知器计算的输出为: 其中每一个wi是一个实数常量,或叫做权值(weight),用来决定输入xi对感知器输出的贡献率。请注意,常量(-w0)是一个阈值,它是为了使感知器输出1,输入的加权和必须超过的阈值。 插图——原书页码: 87上 图4-2 感知器 为了简化表示,我们假想有一个附加的常量输入x0=1,那么我们就可以把上边的不等式写为,或以向量形式写为。为了简短起见,我们有时会把感知器函数写为: 其中, 学习一个感知器意味着选择权w0, …, wn的值。所以感知器学习要考虑的候选假设空间H就是所有可能的实数值权向量的集合。 4.4.1 感知器的表征能力 我们可以把感知器看作是n维实例空间(即点空间)中的超平面决策面。对于超平面一侧的实例,感知器输出1,对于另一侧的实例输出-1,如图4-3所示。这个决策超平面方程是。当然,某些正反样例集合不可能被任一超平面分割。那些可以被分割的称为线性可分(linearly separable)样例集合。 插图——原书页码: 87下 图4-3 两输入感知器表示的决策面 (a)一组训练样例和一个能正确分类这些样例的感知器决策面。(b)一组非线性可分的训练样例(也就是不能用任一直线正确分类的样例)。x1和x2是感知器的输入。“+”表示正例,“-”表示反例。 单独的感知器可以用来表示很多布尔函数。例如,假定用1(真)和-1(假)表示布尔值,那么使用一个两输入的感知器来实现与函数(AND)的一种方法是设置权w0= -0.8并且w1=w2=0.5。如果用这个感知器来表示或函数(OR),那么只要改变它的阈值w0=-0.3。事实上,AND和OR可被看作m-of-n函数的特例:也就是要使函数输出为真,那么感知器的n个输入中至少m个必须为真。OR函数对应于m=1,AND函数对应于m=n.。任意m-of-n函数可以很容易地用感知器表示,只要设置所有输入的权为同样的值(如0.5),然后据此恰当地设置阈值。 感知器可以表示所有的原子布尔函数(primitive boolean function):与、或、与非(NAND)和或非(NOR)。然而不幸的是,一些布尔函数无法用单一的感知器表示,例如异或函数(XOR),它当且仅当x1¹x2时输出为1。请注意图4-3(b)中线性不可分的训练样本集对应于异或函数。 感知器表示与、或、与非、或非的能力是很重要的,因为所有的布尔函数都可表示为基于这些原子函数的互连单元的某个网络。事实上,仅用两层深度的感知器网络就可以表示所有的布尔函数,在这些网络中输入被送到多个单元,这些单元的输出被输入到第二级,也是最后一级。一种方法是用析取范式(disjunctive normal form)(也就是对输入和它们的否定的先进行合取,再对这组合取式进行析取)来表示布尔函数。注意,要把一个AND感知器的输入求否定,只要简单地改变相应输入权的符号。 因为阈值单元的网络可以表示大量的函数,而单独的单元不能做到这一点,所以通常我们感兴趣的是学习阈值单元组成的多层网络。 4.4.2 感知器训练法则 虽然我们的目的是学习由多个单元互连的网络,但我们还是从如何学习单个感知器的权值开始。准确地说,这里的学习任务是决定一个权向量,它可以使感知器对于给定的训练样例输出正确的1或-1。 已经知道有几种解决这个学习任务的算法。这里我们考虑两种:感知器法则和delta法则( delta rule)(是第1章中用来学习评估函数的最小均方法LMS的一个变体)。这两种算法保证收敛到可接受的假设,在不同的条件下收敛到的假设略有不同。这两种方法对于ANN是很重要的,因为它们提供了学习多个单元构成的网络的基础。 为得到可接受的权向量,一种办法是从随机的权值开始,然后反复地应用这个感知器到每个训练样例,只要它误分类样例就修改感知器的权值。重复这个过程,直到感知器正确分类所有的训练样例。每一步根据感知器训练法则(perceptron training rule)来修改权值,也就是根据下面的法则修改与输入xi对应的权wi: wi¬wi+Dwi 其中 Dwi =h(t-o)xi 这里t是当前训练样例的目标输出,o是感知器的输出,h是一个正的常数称为学习速率(learning rate)。学习速率的作用是缓和每一步调整权的程度。它通常被设为一个小的数值(例如0.1),而且有时会使其随着权调整次数的增加而衰减。 为什么这个更新法则会成功收敛到正确的权值呢?为了得到直观的感觉,考虑一些特例。假定训练样本已被感知器正确分类。这时,(t-o)是0,这使Dwi为0,所以没有权值被修改。而如果当目标输出是+1时感知器输出一个-1,这种情况为使感知器输出一个+1而不是-1,权值必须被修改以增大的值。例如,如果xi>0,那么增大wi会使感知器更接近正确分类这个实例。注意这种情况下训练法则会增长wi,因为(t-o),h和xi都是正的。例如,如果xi=0.8,h=0.1,t=1,并且o= -1,那么权更新就是Dwi =h(t-o)xi=0.1(1-(-1))0.8=0.16。另一方面,如果t=-1而o=1,那么和正的xi关联的权值会被减小而不是增大。 事实上可以证明,在有限次使用感知器训练法则后,上面的训练过程会收敛到一个能正确分类所有训练样例的权向量,前提是训练样例线性可分,并且使用了充分小的h(参见Minskey & Papert 1969)。如果数据不是线性可分的,那么不能保证收敛。 4.4.3 梯度下降和delta法则 尽管当训练样例线性可分时,感知器法则可以成功地找到一个权向量,但如果样例不是线性可分时它将不能收敛。因此,人们设计了另一个训练法则来克服这个不足,称为delta法则(delta rule)。如果训练样本不是线性可分的,那么delta法则会收敛到目标概念的最佳近似。 delta法则的关键思想是使用梯度下降(gradient descent)来搜索可能权向量的假设空间,以找到最佳拟合训练样例的权向量。这个法则很重要,因为它提供了反向传播算法的基础,而反向传播算法能够学习多个单元的互连网络。这个法则重要性的另一个原因是,对于包含多种不同类型的连续参数化假设的假设空间,梯度下降是必须遍历这样的假设空间的所有学习算法的基础。 最好把delta训练法则理解为训练一个无阈值的感知器,也就是一个线性单元(linear unit),它的输出o如下: (4.1) 于是,一个线性单元对应于感知器的第一阶段,不带有阈值。 为了推导线性单元的权值学习法则,先指定一个度量标准来衡量假设(权向量)相对于训练样例的训练误差(training error)。尽管有很多办法定义这个误差,一个常用的特别方便的度量标准为: (4.2) 其中D是训练样例集合,td是训练样例d的目标输出,od是线性单元对训练样例d的输出。在这个定义中,是目标输出td和线性单元输出od的差异的平方在所有的训练样例上求和后再除以2。这里我们把E定为的函数,是因为线性单元的输出o依赖于这个权向量。当然E也依赖于特定的训练样例集合,但我们认为它们在训练期间是固定的,所以不必麻烦地把E写为训练样例的函数。第6章给出了选择这种E定义的一种贝叶斯论证。确切地讲,在那里我们指出了在一定条件下,对于给定的训练数据使E最小化的假设也就是H中最可能的假设。 4.4.3.1 形象化假设空间 为了理解梯度下降算法,形象地表示整个假设空间是有帮助的,图4-4画出了包含可能权向量的整个假设空间和与与它们相关联的E值。这里,坐标轴w0,w1表示一个简单的线性单元中两个权的可能的取值。纵轴指出相对于某固定的训练样例的误差E。因此图中的误差曲面概括了假设空间中每一个权向量的企望度(desirability)(我们企望得到一个具有最小误差的假设)。如果给定了用来定义E的方法,那么对于线性单元,这个误差曲面必然是具有单一全局最小值的抛物面。当然,具体的抛物面形状依赖于具体的训练样例集合。 插图——原书页码: 90 图4-4 不同假设的误差 对于有两个权值的线性单元,假设空间H就是w0,w1平面。纵轴表示与固定的训练样例集合相应的权向量假设的误差。箭头显示了该点梯度的相反方向,指出了在w0,w1平面中沿误差曲面最陡峭下降的方向。 梯度下降搜索确定一个使E最小化的权向量的方法是从一个任意的初始权向量开始,然后以很小的步伐反复修改这个向量。在每一步,按照沿误差曲面产生最陡峭下降的方向修改权向量(参见图4-4)。继续这个过程直到到达全局的最小误差。 4.4.3.2 梯度下降法则的推导 我们怎样能计算出沿误差曲面最陡峭下降的方向呢?可以通过计算E相对向量的每个分量的导数来得到这个方向。这个向量导数被称为E对于的梯度(gradient),记作。 (4.3) 注意本身是一个向量,它的成员是E对每个wi的偏导数。当梯度被解释为权空间的一个向量时,它确定了使E最陡峭上升的方向。所以这个向量的反方向给出了最陡峭下降的方向。例如,图4-4中的箭头显示了w0,w1平面的一个特定点的负梯度。 既然梯度确定了E最陡峭上升的方向,那么梯度下降的训练法则是: 其中 (4.4) 这里h是一个正的常数叫做学习速率,它决定梯度下降搜索中的步长。其中的负号是因为我们想要让权向量向E下降的方向移动。这个训练法则也可以写成它的分量形式: wi¬wi+Dwi 其中 (4.5) 这样很清楚,最陡峭的下降可以通过按比例改变的每一分量wi来实现。 要形成一个根据等式(4.5)迭代更新权的实用算法,我们需要一个高效的方法在每一步计算这个梯度。幸运的是,计算过程并不困难。我们可以从公式(4.2)中计算E的微分,从而得到组成这个梯度向量的分量。过程如下: (4.6) 其中xid表示训练样例d的一个输入分量xi。现在我们有了一个等式,能够用线性单元的输入xid、输出od、以及训练样例的目标值td表示。把等式(4.6)代入等式(4.5)便得到了梯度下降权值更新法则。 (4.7) 概而言之,训练线性单元的梯度下降算法如下:选取一个初始的随机权向量;应用线性单元到所有的训练样例,然后根据公式(4.7)计算每个权值的Dwi;通过加上Dwi来更新每个权值,然后重复这个过程。这个算法被归纳在表(4.1)中。因为误差曲面仅包含一个全局的最小值,所以无论训练样本是否线性可分,这个算法会收敛到具有最小误差的权向量,条件是必须使用一个足够小的学习速率h。如果h太大,梯度下降搜索就有越过误差曲面最小值的危险,而不是停留在那一点。因此,对此算法的一种常用的改进是随着梯度下降步数的增加逐渐减小h的值。 表 4-1 训练线性单元的梯度下降算法 要实现梯度下降的随机近似,删除式(T4.2),并把式(T4.1)替换为wi ¬wi +h(t-o)xi。 Gradient-Descent(training_examples, h) training_examples中每一个训练样例形式为序偶<, t>,其中是输入值向量,t是目标输出值。h是学习速率(例如0.05)。 l 初始化每个wi为某个小的随机值 l 遇到终止条件之前,做以下操作: l 初始化每个Dwi为0 l 对于训练样例training_examples中的每个<, t>,做: l 把实例输入到此单元,计算输出o l 对于线性单元的每个权wi,做 Dwi ¬Dwi +h(t-o)xi (T4.1) l 对于线性单元的每个权wi,做 wi¬ wi +Dwi (T4.2) 4.4.3.3 梯度下降的随机近似 梯度下降是一种重要的通用学习范型。它是搜索庞大假设空间或无限假设空间的一种策略,它可应用于满足以下条件的任何情况:(1)假设空间包含连续参数化的假设(例如,一个线性单元的权值);(2)误差对于这些假设参数可微。应用梯度下降的主要实践问题是:(1)有时收敛过程可能非常慢(它可能需要数千步的梯度下降);(2)如果在误差曲面上有多个局部极小值,那么不能保证这个过程会找到全局最小值。 缓解这些困难的一个常见的梯度下降变体被称为增量梯度下降(incremental gradient descent),或随机梯度下降(stochastic gradient descent)。鉴于公式(4.7)给出的梯度下降训练法则在对D中的所有训练样例求和后计算权值更新,随机梯度下降的思想是根据每个单独样例的误差增量地计算权值更新,得到近似的梯度下降搜索。修改后的训练法则与公式(4.7)给出的相似,只是在迭代计算每个训练样例时根据下面的公式来更新权值 Dwi =h(t-o)xi (4.10) 其中t,o,和xi分别是目标值、单元输出和第i个训练样例的输入。要修改表4-1的梯度下降算法,只要简单地删除(T4.2)式并把式(T4.1)替换为wi ¬wi +h(t-o)xi。看待随机梯度下降的一种方法是考虑为每个单独的训练样例d定义不同的误差函数Ed(): (4.11) 其中td和od是训练样例d的目标输出值和单元输出值。随机梯度下降迭代计算训练样例集D的每个样例d,在每次迭代过程中按照关于Ed()的梯度来改变权值。在迭代所有训练样例时,这些权值更新的序列给出了对于原来的误差函数E()的梯度下降的一个合理近似。通过使h(梯度下降的步长)的值足够小,可以使随机梯度下降以任意程度接近于真实梯度下降。标准的梯度下降和随机的梯度下降之间的关键区别是: · 在标准的梯度下降中,是在权值更新前对所有样例汇总误差,然而在随机的梯度下降中,权值是通过考查每个训练实例来更新的。 · 在标准的梯度下降中权值更新的每一步对多个样例求和,这需要更多的计算。另一方面,因为使用真正的梯度,标准的梯度下降对于每一次权值更新经常使用比随机梯度下降有较大的步长。 · 如果E()有多个局部极小值,随机的梯度下降有时可能避免陷入这些局部极小值,因为它使用不同的ÑEd()而不是ÑE()来引导搜索。 在实践中,无论是随机的还是标准的梯度下降方法都被广泛应用。 公式(4.10)中的训练法则被称为增量法则(delta rule),或有时叫LMS法则(least-mean-square最小均方)、Adaline法则、或Windrow-Hoff法则(以它的发明者命名)。在第1章中描述了它在学习博弈问题的评估函数中的应用,当时我们称它为LMS权值更新法则。注意公式(4.10)的增量法则与4.4.2节的感知器训练法则相似。事实上两个表达式看起来完全一致。然而它们是不同的,因为在增量法则中o是指线性单元的输出o()=,而对于感知器法则,o是指阈值输出o()=sgn()。 尽管我们给出的增量法则可学习非阈值线性单元的权,但它也可以方便地用来训练有阈值的感知器单元。假定o=是上面的非阈值线性单元的输出,并且o¢=sgn()是o被阈值化的结果,与在感知器中一样。现在如果我们希望为o¢训练一个感知器使其拟合目标值为 ±1的训练样例,可以使用与训练o一样的目标值和训练样例,不过使用增量法则。很明显,如果非阈值输出o能够被训练到完美拟合这些值,那么阈值输出o¢ 也会拟合它们(因为sgn(1)=1,和sgn(-1)=-1)。即使不能完美地拟合目标值,只要线性单元的输出具有正确的符号,有阈值的o¢值会正确地拟合目标值±1。然而注意,由于这个过程会得到使线性单元输出的误差最小化的权值,这些权值不能保证也使有阈值输出o¢的误分类样例数最小化。 4.4.4 小结 我们已经研究了迭代学习感知器权值的两个相似的算法。这两个算法间的关键差异是感知器训练法则根据阈值化(thresholded)的感知器输出的误差更新权值,然而增量法则根据输入的非阈值化(unthresholded)线性组合的误差来更新权。 这两个训练法则间的差异反映在不同的收敛特性上。感知器训练法则经过有限次的迭代收敛到一个能理想分类训练数据的假设,但条件是训练样例线性可分。增量法则渐近收敛到最小误差假设,可能需要无限的时间,但无论训练样例是否线性可分都会收敛。关于以上收敛性的详细证明可以参考Hertz et al.(1991)。 学习权向量的第三种可能方法是线性规划(linear programming)。线性规划是解线性不等式方程组的一种通用的有效方法。注意每个训练样例对应一个形式为>0或£0的不等式,并且它们的解就是我们期望的权向量。不幸的是,这种方法仅当训练样例线性可分时有解,但Duda & Hart (1973,p.168)建议了一种更巧妙的方法适合非线性可分的情况。无论如何,这种线性规划的方法不能扩展到训练多层网络,这是我们最关心的。相反,正如下一节所讨论的,基于增量法则的梯度下降方法可以简单地扩展到多层网络。 4.5 多层网络和反向传播算法 正如4.4.1节所指出的,单个感知器仅能表示线性决策面。相反,反向传播算法所学习的多层网络能够表示种类繁多的非线性曲面。例如,图4-5描述了一个典型的多层网络和它的决策曲面。这个语音识别任务要区分出现在“h_d”上下文中的10种元音(例如,“hid”,“had”,“head”,“hood”等)。输入的语音信号用两个参数表示,它们是通过对声音的频谱分析得到的,这样我们可以方便地在二维实例空间中显示出决策面。如图可见,多层网络能够表示高度非线性的决策面,它比前面图4-3中画出的单个单元的线性决策面表征能力更强。 插图——原书页码: 96上 图4-5 多层前馈网络的决策区域 这里显示的网络是用来训练识别10种出现在“h_d”(例如“had”,“hid”)间的元音。这个网络的输入由两个参数F1和F2组成,它们是通过对声音的频谱分析得到的。网络的10个输出对应于10个可能的元音。这个网络的预测是其中有最大值的输出。右图画出了学到的网络所代表的高度非线性决策面。图中的点表示测试样例,它们与用来训练这个网络的样例是完全不同的。(经许可摘自Haung & Lippmann(1988)) 本节讨论如何学习这样的多层网络,使用的算法和前面讨论的梯度下降方法相似。 4.5.1 可微阈值单元 应该使用什么类型的单元来作为构建多层网络的基础?起初我们可以尝试选择前面讨论的线性单元,因为我们已经为这种单元导出了一个梯度下降学习法则。然而,多个线性单元的连接仍旧产生线性函数,而我们更希望选择能够表征非线性函数的网络。感知器单元是另一种选择,但它的不连续阈值使它不可微,所以不适合梯度下降算法。我们所需要的是这样的单元,它的输出是输入的非线性函数,并且输出是输入的可微函数。一种答案是sigmoid单元(sigmoid unit),这是一种非常类似于感知器的单元,但它基于一个平滑的可微阈值函数。 插图——原书页码: 96下 图4-6 sigmoid阈值单元 图4-6画出了sigmoid单元。与感知器相似,sigmoid单元先计算它的输入的线性组合,然后应用一个阈值到此结果。然而,对于sigmoid单元,阈值输出是输入的连续函数。更精确地讲,sigmoid单元这样计算它的输出: o=s () 其中 (4.12) s 经常被称为sigmoid函数或者也可以称为logistic函数(logistic function)。注意它的输出范围为0到1,随输入单调递增(参见图4-6中的阈值函数曲线)。因为这个函数把非常大的输入值域映射到一个小范围的输出,它经常被称为sigmoid单元的挤压函数(squashing function)。sigmoid函数有一个有用的特征,它的导数很容易以它的输出表示[确切地讲,=s(y)×(1-s(y))]。我们将看到,后面的梯度下降学习法则使用了这个导数。有时也可以使用其他易计算导数的可微函数代替s。例如,sigmoid函数定义的e-y项有时被替换为e-k×y,其中k为某个正常数,用来决定这个阈值函数的陡峭性。双曲正切函数tanh有时也用来代替sigmoid函数(参见练习4.8)。 4.5.2 反向传播算法 对于由一系列确定的单元互连形成的多层网络,反向传播算法可用来学习这个网络的权值。它采用梯度下降方法试图最小化网络输出值和目标值之间的误差平方。这一节给出反向传播算法,下一节推导出反向传播算法使用的梯度下降权值更新法则。 因为我们要考虑多个输出单元的网络,而不是象以前只考虑单个单元,所以我们先重新定义误差E,以便对所有网络输出的误差求和。 E() (4.13) 其中outputs是网络输出单元的集合,tkd和okd是与训练样例d和第k个输出单元相关的输出值。 反向传播算法面临的学习问题是搜索一个巨大的假设空间,这个空间由网络中所有单元的所有可能的权值定义。这种情况可以用一个误差曲面来形象表示,与图4-4表示的线性单元的误差曲面相似。那幅图中的误差被我们的新的误差定义E所替代,并且空间中的其他维现在对应网络中与所有单元相关的所有权值。和训练单个单元的情况一样,梯度下降可被用来尝试寻找一个假设使E最小化。 多层网络的一个主要不同是它的误差曲面可能有多个局部极小值,而图4-4表示的抛物曲面仅有一个最小值。不幸的是,这意味着梯度下降仅能保证收敛到局部极小值,而未必得到全局最小的误差。尽管有这个障碍,已经发现对于实践中很多应用反向传播算法都产生了出色的结果。 表4-2 包含两层sigmoid单元的前馈网络的反向传播算法(随机梯度下降版本) Backpropagation(training_examples, h, nin, nout, nhidden) trainning_exaples中每一个训练样例是形式为<, >的序偶,其中是网络输入值向量,是目标输出值。 h是学习速率(例如0.05)。nin是网络输入的数量,nhidden是隐藏层单元数,nout是输出单元数。 从单元i到单元j的输入表示为xji,单元i到单元j的权值表示为wij。 l 创建具有nin个输入,nhidden个隐藏单元,nout个输出单元的网络 l 初始化所有的网络权值为小的随机值(例如-0.05和0.05之间的数) l 在遇到终止条件前,做 l 对于训练样例training_examples中的每个<,>,做 把输入沿网络前向传播 1. 把实例输入网络,并计算网络中每个单元u的输出ou。 使误差沿网络反向传播 2. 对于网络的每个输出单元k,计算它的误差项dk dk ¬ok(1-ok)(tk-ok) (T4.3) 3. 对于网络的每个隐藏单元h,计算它的误差项dh dh ¬oh(1-oh)wkhdk (T4.4) 4. 更新每个网络权值wji wji¬ wji +Dwji 其中 Dwji=hdjxji (T4.5) 表4-2给出了反向传播算法。这里描述的算法适用于包含两层sigmoid单元的分层前馈网络,并且每一层的单元与前一层的所有单元相连。这是反向传播算法的增量梯度下降(或随机梯度下降)版本。这里使用的符号与前一节使用的一样,并进行了如下的扩展: · 网络中每个结点被赋予一个序号(例如一个整数),这里的结点要么是网络的输入,要么是网络中某个单元的输出。 · xji表示结点i到单元j的输入,并且wji表示对应的权值。 · dn表示与单元n相关联的误差项。它的角色与前面讨论的delta训练法则中的(t-o)相似。后面我们可以看到dn =。 在表4-2的算法的开始,建立一个具有期望数量的隐单元和输出单元的网络,并初始化所有网络的权值为小的随机数。给定了这个固定的网络结构,算法的主循环就对训练样例进行反复的迭代。对于每一个训练样例,它应用目前的网络到这个样例,计算对于这个样例网络输出的误差,然后更新网络中所有的权值。对这样的梯度下降步骤进行迭代,直到网络的性能达到可接受的精度(经常是上千次,多次使用同样的训练样例)。 这里的梯度下降权更新法则(表4-2中的公式[T4.5])与delta训练法则(公式[4.10])相似。就象delta法则,它依照以下三者的乘积来更新每一个权:学习速率h、该权值应用的输入值xji、和这个单元输出的误差。惟一的不同是delta法则中的误差项(t-o)被替换成一个更复杂的误差项dj。在4.5.3节的对权更新法则的推导之后我们将给出dj的准确形式。为了直观地理解它,先考虑网络的每一个输出单元k的dk(在算法的公式[T4.3]中))是怎样计算的。很简单,dk与delta法则中的(tk-ok)相似,但乘上了sigmoid挤压函数的导数ok(1-ok)。每个隐藏单元h的dh的值具有相似的形式(算法的公式[T4.4])。然而,因为训练样例仅对网络的输出提供了目标值tk,所以缺少直接的目标值来计算隐藏单元的误差值。因此采取以下间接办法计算隐藏单元的误差项:对受隐藏单元h影响的每一个单元的误差dk进行加权求和,每个误差dk权值为wkh,wkh就是从隐藏单元h到输出单元k的权值。这个权值刻画了隐藏单元h对于输出单元k的误差应“负责”的程度。 表4-2中的算法随着每个训练样例的出现递增地更新权。这一点与梯度下降的随机近似算法一致。要取得误差E的真实梯度,需要在修改权值之前对所有训练样例的djxji值求和。 在典型的应用中,反向传播算法的权值更新迭代会被重复上千次。有很多终止条件可以用来停止这个过程。一种方法是在迭代的次数到了一个固定值时停止;或当在训练样例上的误差降到某个阈值以下时;或在分离的验证样例集合上的误差符合某个标准时。终止判据的选择是很重要的,因为太少的循环可能没有有效地降低误差,而太多的循环会导致对训练数据的过度拟合。在4.6.5节中我们会更详细地讨论这个问题。 4.5.2.1 增加冲量(Momentum)项 因为反向传播算法的应用如此广泛,所以已经开发出了很多反向传播算法的变体。其中最常见的是修改算法中公式(T4.5)的权值更新法则,使第n次迭代的权值更新部分地依赖于发生在第n-1次迭代时的更新,即把公式(T4.5)换为如下的形式: Dwji(n)=hdjxji + aDwji(n – 1) (4.18) 这里Dwji(n)是算法主循环中的第n次迭代进行的权值更新,并且0£a<1是一个称为 冲量(momentum)的常数。注意这个公式右侧的第一项就是反向传播算法的公式(T4.5)中的权值更新。右边的第二项是新的,被称为冲量项。为了理解这个冲量项的作用,设想梯度下降的搜索轨迹就好像一个(无冲量的)球滚下误差曲面。a的作用是增加冲量使这个球从一次迭代到下一次迭代时以同样的方向滚动。冲量有时会使这个球滚过误差曲面的局部极小值;或使其滚过误差曲面上的平坦区域,如果没有冲量这个球有可能在这个区域停止。它也具有在梯度不变的区域逐渐增大搜索步长的效果,从而可以加快收敛。 4.5.2.2 学习任意的无环网络 表4-2给出的反向传播算法的定义仅适用于两层的网络。然而那里给出的算法可以简单地推广到任意深度的前馈网络。公式(T4.5)的权值更新法则保持不变,惟一的变化是计算d值的过程。概括地说,第m层的单元r的dr值是由更深的m+1层的d值根据下式计算的: dr =or(1- or)wsrds (4.19) 注意这个公式与表4-2算法的第3步相同,这里要说明的是对于网络中的任意数量的隐藏单元,该步骤要被重复很多遍。 如果推广到任何有向无环结构也一样的简单,而不论网络中的单元是否象我们至此为止假定的那样被统一地排列在层上。对于网络单元没有按此排列的情况,计算任意内部单元(也就是所有非输出单元)的d的法则是: dr =or(1- or)wsrds (4.20) 其中DownStream(r)是在网络中单元r的立即下游(immediately downstream)单元的集合,或者说输入中包括r的输出的所有单元。4.5.3节我们要推导的就是这种权值更新法则的一般形式。 4.5.3 反向传播法则的推导 这一节给出反向传播算法的权值调整法则的推导,如果是第一遍阅读可以跳过这一节,而不失连续性。 这里我们要解决的问题是推导出表4-2算法使用的随机梯度下降法则。回忆公式(4.11),随机的梯度下降算法迭代处理训练样例,每次处理一个。对于每个训练样例d,利用关于这个样例的误差Ed的梯度修改权值。换句话说,对于每一个训练样例d,每个权wji被增加Dwji。 Dwji= (4.21) 其中,Ed是训练样例d的误差,通过对网络中所有输出单元的求和得到 Ed() 这里outputs是网络中输出单元的集合,tk是单元k对于训练样例d的目标值,ok是给定训练样例d时单元k的输出值。 随机梯度下降法则的推导概念上是易懂的,但需要留意很多下标和变量。我们将遵循图4-6中所画出的符号,增加一个下标j用来表示网络中的第j个单元,具体如下: · xji=单元j的第i个输入 · wji=与单元j的第i个输入相关联的权值 · netj=åiwjixji(单元j的输入的加权和) · oj=单元j计算出的输出 · tj=单元j的目标输出 · s=sigmoid函数 · outputs=网络的最后一层的单元集合 · DownStream(j)=单元的立即输入(immediate inputs)中包含单元j输出的单元集合 现在我们导出的一个表示,以便实现公式(4.21)中出现的随机的梯度下降法则。首先,注意权值wji仅能通过netj影响网络的其他部分。所以,我们可以使用链式规则(chain rule)得到 = =xji (4.22) 已知等式(4.22),我们剩下的任务就是为导出一个方便的表示。我们依次考虑两种情况:一种情况是单元j是网络的一个输出单元,另一种情况是j是一个内部单元。 情况1:输出单元的权值训练法则。就象wji仅能通过netj影响其余的网络一样,netj仅能通过oj影响其余的网络。所以我们可以再次使用链式规则得出 = (4.23) 首先仅考虑等式(4.23)的第一项 = 除了当k=j时,所有输出单元k的导数为0。所以我们不必对多个输出单元求和,只需令 k=j。 = (-tj-oj) (4.24) 接下来考虑等式(4.23)的第二项。既然oj=s(netj),导数就是sigmoid函数的导数,而我们已经指出过sigmoid函数的导数为s(netj)(1-s(netj))。所以, (4.25) 把表达式(4.24)和(4.25)代入(4.23),我们得到 = -(tj-oj)oj(1-oj) (4.26) 然后与等式(4.21)和(4.22)合并,我们便推导出了输出单元的随机梯度下降法则: Dwji= =h(tj-oj)oj(1-oj)xji (4.27) 注意这个训练法则恰恰是表4-2算法中的(T4.3)和(T4.5)的权值更新法则。此外,我们可以发现式(T4.3)中的dk与值相等。在这一节的其余部分我们将使用di来表示任意单元i的。 情况2:隐藏单元的权值训练法则。对于网络中的内部单元或者说隐藏单元的情况,推导wji必须考虑wji间接地影响网络输出,从而影响Ed。由于这个原因,我们发现定义网络中单元j的所有立即下游(immediately downstream)单元的集合(也就是立即输入中包含单元j的输出的所有单元)是有用的。我们用DownStream(j)表示这样的单元集合。注意netj只能通过Downstream(j)中的单元影响网络输出(再影响Ed)。所以可以如下推导 (4.28) 重新组织各项并使用dj表示,我们得到 和 Dwji = h dj xji 上式就是由公式(4.20)得到的一般法则,用来更新任意有向无环网络结构内部单元的权值。注意表4-2的式(T4.4)仅是这个法则当Downstream(j)=outputs时的一个特例。 4.6 反向传播算法的说明 4.6.1 收敛性和局部极小值 正如前面所描述的,反向传播算法实现了一种对可能的网络权值空间的梯度下降搜索,它迭代地减小训练样例的目标值和网络输出间的误差。因为对于多层网络,误差曲面可能含有多个不同的局部极小值,梯度下降可能陷入这些局部极小值中的一个。因此,对于多层网络,反向传播算法仅能保证收敛到误差E的某个局部极小值,不一定收敛到全局的最小误差。 尽管缺乏对收敛到全局最小误差的保证,反向传播算法在实践中是非常有效的函数逼近算法。对于很多实际的应用,人们发现局部极小值的问题没有想象的那么严重。为了对这个问题有一些直观的认识,考虑含有大量权值的网络,它对应着维数非常高的空间中的误差曲面(每个权值一维)。当梯度下降陷入相对某个权的局部极小值时,相对其他的权这里未必是局部极小值。事实上,网络的权越多,误差曲面的维数越多,也就越可能为梯度下降提供更多的“逃逸路线”,让梯度下降离开相对该单个权值的局部极小值处。 对局部极小值的第二种观点是,考虑随着训练中迭代次数的增加网络权值的演化方式。注意在算法中,如果把网络的权值初始化为接近于0的值,那么在早期的梯度下降步骤中,网络将表现为一个非常平滑的函数,近似为输入的线性函数。这是因为sigmoid函数本身在权值靠近0时接近线性(见图4-6中的sigmoid函数曲线)。仅当权值已经增长了一定时间之后,它们才会到达可以表示高度非线性网络函数的程度。或许可以期待在权空间的这个区域存在更多的局部极小值,这样可以表示更复杂的函数。也可希望当权到达这一点时它们已经足够靠近全局最小值,即便它是这个区域的局部极小值也是可以接受的。 尽管有上面的评论,人们对用ANN表示的复杂误差曲面的梯度下降理解得还不够,还不知道有何方法能确切地预测局部极小值什么时候会导致困难。用来缓解局部极小值问题的一些常见的启发式规则包括: · 象公式(4.18)描述的那样为梯度更新法则加一个冲量项。冲量有时可以带动梯度下降过程,冲过狭窄的局部最下值(然而原则上它也可以带动梯度下降过程冲过狭窄的全局最小值到其他局部极小值!)。 · 使用随机的梯度下降而不是真正的梯度下降。根据4.4.3.3小节讨论的,梯度下降的随机近似对于每个训练样例沿一个不同的误差曲面有效下降,它依靠这些梯度的平均来逼近对于整个训练集合的梯度。这些不同的误差曲面通常有不同的局部极小值,这使得下降过程不太可能陷入任一个局部极小值。 · 使用同样的数据训练多个网络,但用不同的随机权值初始化每个网络。如果不同的训练过程产生不同的局部极小值,那么对分离的验证集合性能最好的网络被选择。或者保留所有的网络,并且把它们当作一个网络“委员会”,它们的输出是每个网络输出的平均值(可能加权)。 4.6.2 前馈网络的表征能力 什么类型的函数可以使用前馈网络来表示呢?当然这个问题的答案依赖于网络的宽度和深度。尽管目前对哪一族函数可以用哪种类型的网络描述还知道得很少,但已经知道了三个一般性的结论: · 布尔函数。任何布尔函数可以被具有两层单元的网络准确表示,尽管对于最坏的情况,所需隐藏单元的数量随着网络输入数量的增加指数级增长。为了说明这是如何实现的,考虑下面表示任何布尔函数的通用方案:对于每一个可能的输入向量,创建不同的隐藏单元,并设置它的权值使当且仅当这个特定的向量输入到网络时该单元被激活。这样就产生了一个对于任何输入仅有一个单元被激活的隐藏层。接下来把输出单元实现为一个或门,仅由所希望的输入模式激活。 · 连续函数。任何有界的连续函数可以由一个两层的网络以任意小的误差(在有限的范数下)逼近(Cybenko 1989;Hornik et al. 1989)。这个理论适用于隐藏层使用sigmoid单元、输出层使用(非阈值的)线性单元的网络。所需的隐藏单元数量依赖于要逼近的函数。 · 任意函数。任意函数可以被一个有三层单元的网络以任意精度逼近(Cybenko 1988)。与前面相同,输出层使用线性单元,两个隐藏层使用sigmoid单元,每一层所需的单元数量一般不确定。这一结论的证明方法为:首先说明任何函数可以被许多局部化函数的线性组合逼近,这些局部函数的值除了某个小范围外都为0;然后说明两层的sigmoid单元足以产生良好的局部逼近。 这些结论表明有限深度的前馈网络为反向传播算法提供了非常有表征力的假设空间。然而记住下面一点是重要的:梯度下降是从一个初始的权值开始的,因此搜索范围里的网络权向量可能不包含所有的权向量。Hertz et al.(1991)提供了上面结论的更详细的讨论。 4.6.3 假设空间搜索和归纳偏置 把反向传播算法的假设空间搜索和其他学习算法采取的搜索相比较很有意义。对于反向传播算法,网络权的每一种可能赋值都表示了一个句法不同的假设,原则上都在学习器的考虑范围内。换句话说,这个假设空间是n个网络权值的n维欧氏空间。注意这个空间是连续的,这与决策树学习和其他基于离散表示的方法的假设空间完全不同。假设空间的连续性以及误差E关于假设的连续参数可微这两个事实,导致了一个良定义的误差梯度,为最佳假设的搜索提供了一个非常有用的结构。这个结构与基于符号的概念学习算法的“一般到特殊序”搜索的结构,或ID3和C4.5算法中对决策树的简单到复杂序搜索所用的结构都完全不同。 反向传播算法从观测数据中泛化的归纳偏置是什么呢?精确地刻画反向传播学习的归纳偏置是有难度的,因为它依赖于梯度下降搜索和权空间覆盖可表征函数空间的方式的相互作用性。然而,可以把这一偏置粗略地刻画为在数据点之间平滑插值(smooth interpolation between data points)。如果给定两个正例,它们之间没有反例,反向传播算法会倾向于把这两点之间的点也标记为正例。例如,在图4-5画出的决策面中可以看到这一点,训练样例的特定样本产生了平滑变化的决策区域。 4.6.4 隐藏层表示 反向传播算法 的一个迷人的特性是,它能够在网络内部的隐藏层发现有用的中间表示。因为训练样例仅包含网络输入和输出,权值调节的过程可以自由地设置权值,来定义在最小化误差平方E中最有效的任何隐藏单元表示。这能够引导反向传播算法定义新的隐藏层特征,这些特征在输入中没有明确表示出来,但却能捕捉输入实例中与学习目标函数最相关的特征。 例如,考虑图4-7所示的网络。这里,8个网络输入与3个隐藏单元相连,3个隐藏单元又依次连接到8个输出单元。由于这样的结构,3个隐藏单元必须重新表示8个输入值,以某种方式捕捉输入的相关特征,以便这个隐藏层的表示可以被输出单元用来计算正确的目标值。 插图——原书页码: 107 Inputs-输入 Outputs-输出 Input-输入值 Output-输出值 Hidden Values-隐藏值 图4-7 学习到的隐藏层表示 这个8´3´8的网络被训练以学习恒等函数,使用图中所示的8个训练样例。在5000轮(epochs)训练之后,3个隐藏单元使用图右侧的编码方式来编码8个相互不同的输入。注意如果把编码后的值四舍五入为0和1,那么结果是8个不同值的标准二进值编码。 考虑训练图4-7所示的网络,来学习简单的目标函数f()=,其中是含有七个0和一个1的向量。网络必须学会在8个输出单元重现这8个输入。尽管这是一个简单的函数,但现在限制网络只能使用3个隐单元。所以,学习到的3个隐藏单元必须捕捉住来自8个输入单元的所有关键信息。 当反向传播算法被用来完成这个任务时,使用8个可能向量作为训练样例,它成功地学会了目标函数。梯度下降的反向传播算法产生的隐藏层表示是什么呢?通过分析学习到的网络对于8个可能输入向量产生的隐藏单元的值,可以看出学到的编码和熟知的对8个值使用3位标准二进制编码相同(也就是000,001,010,……,111)。图4-7显示了反向传播算法的一次运行中计算出的这3个隐藏单元的确切值。 多层网络在隐藏层自动发现有用表示的能力是ANN学习的一个关键特性。与那些仅限于使用人类设计者提供的预定义特征的学习方法相比,它提供了一种相当重要的灵活性——允许学习器创造出设计者没有明确引入的特征。当然这些创造出的特征一定是网络输入的sigmoid单元函数可以计算出的。注意网络中使用的单元层越多,就可以创造出越复杂的特征。4.7节要讨论的人脸识别应用提供了隐藏单元特征的另一个例子。 为了增强对这个例子中反向传播算法操作的直观理解,让我们更详细地分析梯度下降过程中的具体操作 这个例子的源代码可以从http://www.cs.cmu.edu/~tom/mlbook.html得到。 。使用表4-2中的算法训练图4-7中的网络,设置初始的权值为区间(-0.1, 0.1)中的随机数,学习速率h=0.3,没有权冲量(即a=0)。使用其他的学习速率和使用非0的冲量得到的结果相似。图4-7中显示的隐藏单元编码是在执行了算法的外层训练迭代5000次后得到的(也就是对8个训练样例的每一个迭代5000次)。然而吸引我们注意的大多数权值变化是发生在前2500次的。 我们可以描绘出输出误差的平方相对梯度下降搜索步数的函数曲线,这样就可以直接观察反向传播算法的梯度下降搜索的效果。它显示在图4-8中最上面的曲线图中。这幅图的8条曲线对应8个网络输出,每一条曲线都显示了相应的网络输出对所有训练样例的误差平方和。横轴表示反向传播算法的最外层迭代的次数。如图中所显示的,每个输出的误差平方和随着梯度下降过程而下降,某些单元快一些,某些单元较慢。 隐藏单元表示的演变过程可以在图4-8的第二幅图中看到。这幅图显示了对于一个可能的输入(这幅图对应的是01000000)网络计算出的三个隐藏单元值。和前面一样,横轴表示训练循环的次数。如图中所显示的,这个网络收敛到图4-7中给出的最终的编码之前经历了很多不同的编码。 最后,图4-8中的第3幅图画出了网络中各个权值的演变过程。这幅图显示了连接8个输入单元(和一个常量偏置输入(constant bias input))到3个隐单元之一的权值的演变过程。注意这个隐藏单元权值的显著变化与隐藏层编码和输出误差平方的显著变化一致。这里收敛接近0的权值是偏置权 w0。 插图——原书页码: 109 Sum of squared errors for each output unit-每个输出单元的误差平方和 Hidden unit encoding for input 01000000-输入01000000的隐藏单元编码 Weights from inputs to one hidden unit-输入到一个隐藏单元的权 图4-8 学习8´3´8网络 最上图显示了随着训练迭代次数(轮数)的增加,8个输入的误差平方和的演变。中图显示了对于输入串“01000000”的隐藏层表示的演变。下图显示了3个隐藏单元之一的权值演变过程。 4.6.5 泛化,过度拟合和停止判据 在表4-2对反向传播算法的描述中,没有指定算法使用的终止条件。终止权值更新循环的合适条件是什么呢?很明显,一种选择是继续训练直到对训练样例的误差E降低至某个预先定义的阈值之下。事实上,这不是一个好的策略,因为反向传播算法容易过度拟合训练样例,降低了对于其他未见过实例的泛化精度。 为了看出使训练数据上误差最小化的危险,考虑误差E是如何随着权值迭代次数变化的。图4-9显示了两个相当典型的反向传播算法应用中的这种变化。首先考虑图中上面一幅曲线图。两条曲线中较低的一条显示了在训练集合上的误差E随着梯度下降迭代次数的增加而单调下降。较高的曲线是在一个与训练样例不同的验证集合的实例上测到的误差E的情况。这条线测量了网络的泛化精度(generalization accuracy)——网络拟合训练数据外的实例的精度。 注意在验证样例上测量到的的误差E 译注:原书此处有误,原句为generalization accuracy先下降后上升,显然这里的generalization accuracy应为error E)。 先下降,然后上升,尽管在训练样例上的误差持续下降。为什么会发生这种现象呢?这是因为这些权值拟合了训练样例的“特异性”(idiosyncrasy),而这个“特异性”对于样例的一般分布没有代表性。ANN中大量的权值参数为拟合这样的“特异性”提供了很大的自由度。 为什么过度拟合往往是发生在迭代的后期,而不是迭代的早期呢?设想网络的权值是被初始化为小随机值的。使用这些几乎一样的权值仅能描述非常平滑的决策面。随着训练的进行,一些权值开始增长,以降低在训练数据上的误差,同时学习到的决策面的复杂度也在提高。于是,随着权值调整迭代次数的增加,反向传播算法获得的假设的有效复杂度也在增加。如果权值调整迭代次数足够多,反向传播算法经常会产生过度复杂的决策面,拟合了训练数据中的噪声和训练样例中没有代表性的特征。这个过度拟合问题与决策树学习中的过度拟合问题相似(见第3章)。 有几种技术可以用于解决反向传播中的过度拟合问题。一种方法被称为权值衰减(weight decay),它在每次迭代过程中以某个小因子降低每个权值。这等效于修改E的定义,加入一个与网络权值的总量相应的惩罚项。此方法的动机在于保持权值较小,从而使学习过程向着复杂决策面的反方向偏置。 克服过度拟合问题的一个最成功的方法,就是在训练数据外再为算法提供一套验证数据(validation data)。算法在使用训练集合驱动梯度下降搜索的同时,监视对于这个验证集合的误差。本质上,这相当于允许算法本身画出图4-9中显示的两条曲线。算法应该进行多少次权值调整迭代呢?显然,应该使用在验证集合上产生最小误差的迭代次数,因为这是网络性能对于未见过实例的最好表征。在这种方法的典型实现中,网络的权值被保留两份拷贝:一份用来训练,而另一份拷贝作为目前为止性能最好的权,衡量的标准是它们对于验证集合的误差。一旦训练到的权值在验证集合上的误差比保存的权值的误差高,训练被终止,并且返回保存的权值作为最终的假设。当这个过程被应用到图4-9中最上图的情况时,它将输出在9100次迭代后网络得到的权值。图4-9的第二幅曲线图显示,不是总能明显确定验证集合何时达到最小误差。在这幅图中,验证集合的误差先下降,然后上升,然后再下降。所以必须注意避免错误的结论:在850次迭代后网络到达了它的最小验证集合误差。 插图——原书页码: 110 Error versus weight updates(example 1)-误差相对权值更新次数变化曲线(例1) Error versus weight updates(example 2)- 误差相对权值更新次数变化曲线(例2) Error-误差 Number of weight updates-权值更新次数 Training set error-训练集合的误差 Validation set error-验证集合的误差 图4-9 两个不同机器人感知任务的误差E相对权值更新次数的变化曲线 两种情况下,在训练样例上的误差E都单调下降,因为梯度下降的目标是最小化这个误差。对于单独的验证集合中的样例,误差E通常先下降,然后误差可能因为过度拟合训练样例而上升。最有可能正确泛化到未见过数据的网络是对于验证集合有最小误差的网络。注意在第二幅曲线图中,必须小心不要过早停止训练,因为在验证集合上的误差E在迭代到850次时开始上升而后又下降。 一般而言,过度拟合问题以及克服它的方法是一个棘手的问题。上面的交叉验证方法在可获得额外的数据提供验证集合时工作得最好。然而不幸的是,过度拟合的问题对小训练集合最严重。在这种情况下,有时使用一种称为“k-fold交叉验证(k-fold cross-validation)”的方法,这种方法进行k次不同的交叉验证,每次使用数据的不同分割作为训练集合和验证集合,然后对结果进行平均。在这种方法的一个版本中,把可供使用的m个实例分割成k 个不相交的子集,每个子集有m/k个实例。然后,运行k次交叉验证过程,每一次使用不同的子集作为验证集合,并合并其他的子集作为训练集合。于是,每一个样例会在一次实验中被用作验证集合的成员,在k-1次实验中用作训练集合的成员。在每次试验中,都使用上面讨论的交叉验证过程,来决定在验证集合上取得最佳性能的迭代次数i。然后计算这些i的均值,最后运行一次反向传播算法,训练所有m个 译注:原书此处误为n 实例并迭代次,此时没有验证集合。这个过程与第5章描述的基于有限数据比较两种学习方法的过程很相近。 4.7 示例:人脸识别 为了说明反向传播算法应用中的一些实际的设计问题,这一节讨论把这个算法应用到人脸识别的学习任务。这一节用来产生这个例子的所有图像数据和代码都可以从以下网址得到:http://www.cs.cmu.edu//~tom/mlbook.html,同时还有如何使用这些代码的完整文档。读者可以自己进行试验。 4.7.1 任务 这里的学习任务是分类不同人的不同姿态的摄影图像。我们收集了20个不同的人的摄影图像,每个人大约有32张图像,对应这个人不同的表情(快乐,沮丧,愤怒,中性);他们看的不同方向(左,右,正前,上);和他们是否戴太阳镜。从图4-10的示例图像中可以看到,人后面的背景、穿的衣服、和人脸在图像中的位置也都有差异。我们共收集了624幅灰度图像,每一幅的分辨率为120´128,图像的每个像素使用0(黑色)到255(白色)的灰度值描述。 从这些图像数据中可以学习很多不同的目标函数。例如,我们可以训练一个ANN,使给定一幅图像输入时输出这个人的惟一标识(identity)、脸的朝向、性别、是否带太阳镜等。所有这些目标函数可以以很高的精度从这些数据中学习到,鼓励读者们自行试验。在本节后面的部分,我们考虑一个特定的任务:学习图像中人脸的朝向(左,右,正前,还是上)。 插图——原书页码: 113 30´32resolution input images- 30´32分辨率的输入图像 Network weights after 1 iteration through each training example- 对每个训练样例迭代1次后的网络权值 Network weights after 100 iteration through each training example- 对每个训练样例迭代100次后的网络权值 left: 左 straight: 前 right: 右 up: 上 图4-10 学习识别人脸朝向的人工神经网络 这里使用人脸的灰度图像(见最上一行)训练一个960´3´4的网络,来预测一个人是在向左、向右、向前还是向上看。在使用了260幅这样的图像训练后,这个网络对于独立的验证集合达到了90%的精度。图中也显示了使用训练样例迭代1次后和迭代100次后的网络权值。每个输出单元(左,前,右,上)有四个权值,用暗(负)和明(正)的方块显示。最左侧的方块对应权w0,它决定单元的阈值,右面的三个方块对应从三个隐藏单元输入的权。图中也显示了每个像素输入到每个隐藏单元的权值,被画在对应像素的位置。 4.7.2 设计要素 应用反向传播算法到一个给定任务时,必须决定几个设计要素。下面我们归纳出了学习人脸朝向这个学习任务的一些设计要素。尽管我们没有打算去选择精确的最优设计,但这里描述的设计对目标函数学习得相当好。在训练了260幅图像样例之后,对于独立测试集合的精度达到90%。相对而言,如果随机猜测四个脸朝向中的一个,只能达到25%的正确率。 输入编码。已经知道ANN的输入必然是图像的某种表示,那么设计的关键是如何编码这幅图像。例如我们可以对图像进行预处理,来分解出边缘、亮度一致的区域或其他局部图像特征,然后把这些特征输入网络。这种设计的一个问题是会导致每幅图像有不同数量的特征参数(例如边缘的数量),然而ANN具有固定数量的输入单元。对于这种情况,我们的设计是把图像编码成固定的30´32像素的亮度值,每个像素对应一个网络输入。并且把范围是0到255的亮度值按比例线性缩放到0到1的区间内,以使网络输入与隐单元和输出单元在同样的区间取值。实际上这里的30´32像素图像就是原来120´128像素的图像的低分辨率概括,每个低分辨率像素根据对应的若干高分辨率像素亮度的均值计算得到。使用这样的低分辨率图像,把输入个数和权值的数量减少到了一个更易于处理的规模,从而降低了运算要求,但同时也保留了足够的分辨率以正确分类图像。回忆图4-1中ALVINN系统使用了相似的的分辨率图像作为网络的输入。一个有趣的差别是,在ALVINN中,每一个低分辨率像素的亮度等于从高分辨率图像对应的区域中随机取一个像素的亮度,而不是取这个区域中所有像素亮度的均值。其动机是为了明显地减少从高分辨率图像产生低分辨率图像所需的运算。这个效率对于ALVINN系统是特别重要的,因为在自动驾驶车辆的过程中,ALVINN系统的网络必须在每秒钟处理很多幅图像。 输出编码。ANN必须输出四个值中的一个来表示输入图像中人脸的朝向(左,右,上,前)。注意我们可以使用单一的输出单元来编码这四种情况的分类,例如指定输出值0.2,0.4,0.6和0.8来编码这四个可能值。不过这里我们使用4个不同的输出单元,每一个对应四种可能朝向中的一种,取具有最高值的输出作为网络的预测值。这种方法经常被称为n取1(1-of-n)输出编码。选择n取1输出编码而不用单个单元有两个动机。第一,这为网络表示目标函数提供了更大的自由度(即在输出层单元中有n倍的可用权值)。第二,在n取1编码中,最高值输出和次高值输出间的差异可以作为对网络预测的置信度(不明确的分类可能导致结果相近或相等)。进一步的设计问题是“这4个输出单元的目标值应该是什么?” 一个显而易见的办法是用4个目标值<1,0,0,0>来编码脸朝向左,<0,1,0,0>来编码脸朝向正前,依此类推。我们这里使用0.1和0.9,而不是0和1,即<0.9,0.1,0.1,0.1>表示脸朝向左的目标输出向量。避免使用0和1作为目标值的原因是sigmoid单元对于有限权值不能产生这样的输出。如果我们企图训练网络来准确匹配目标值0和1,梯度下降将会迫使权值无界增长。另一方面,值0.1和0.9是sigmoid单元在有限权值情况下可以完成的。 网络结构图。正如前面所描述的,反向传播算法可以被应用到任何有向无环sigmoid单元的网络。所以,我们面临的另一设计问题是,这个网络包含多少个单元以及如何互连。最普遍的一种网络结构是分层网络,一层的每个单元向前连接到下一层的每一个单元。目前的设计选择这样的标准结构,使用两层sigmoid单元(一个隐藏层和一个输出层)。使用一或两层sigmoid单元是很普遍的,偶尔使用三层。使用更多的层是不常见的,因为训练时间会变得很长,而且三层sigmoid单元的网络已经能够表示数量相当大的目标函数(见4.6.2节)。我们已经确定选择一个分层的前馈网络,那么其中应该包含多少个隐藏单元呢?在图4-10报告的结果中,仅使用了三个隐藏单元,达到了对测试集合90%的精度。在另一个使用30个隐藏单元的实验中,得到的精度提高了一到两个百分点。尽管这两个实验得到的泛化精度相差很小,但后一个试验明显需要更多的训练时间。使用260幅图像的训练样例,30个隐单元的网络在Sun Sparc5工作站上的训练时间大约是一个小时。相对而言,三个隐藏单元的网络大约是5分钟。人们已经发现在很多应用中需要某个最小数量的隐单元来精确地学习目标函数,并且超过这个数量的多余的隐单元不会显著地提高泛化精度,条件是使用交叉验证方法来决定应该进行多少次梯度下降迭代。如果没有使用交叉验证,那么增加隐藏单元数量经常会增加过度拟合训练数据的倾向,从而降低泛化精度。 学习算法的其他参数。在这个实验中,学习速率h被设定为0.3,冲量a被设定为0.3。赋予这两个参数更低的值会产生大体相当的泛化精度,但需要更长的训练时间。如果这两个值被设定得太高,训练将不能收敛到一个具有可接受误差(在训练集合上)的网络。在整个试验中我们使用完全的梯度下降(和表4-2算法中随机近似的梯度下降不同)。输出单元的网络权值被初始化为小的随机值。然而输入单元的权值被初始化为0,因为这样可以使学习到的权值的图像化(见图4-10)更易于理解,而对泛化精度没有明显的影响。训练的迭代次数的选择可以通过分割可用的数据为训练集合和独立的验证集合。梯度下降方法被用于最小化训练集合上的误差,并且每隔50次梯度下降迭代根据验证集合评估一次网络的性能。最终选择的网络是对验证集合精度最高的网络。可以参见4.6.5节得到关于这个过程的解释和依据。最终报告的精度(也就是90%,对于图4-10中的网络)是在没有对训练产生任何影响的第三个集合——测试集合上测量得到的。 4.7.3 学习到的隐藏层表示 有必要分析一下网络中学习得到的2899个 译注:2899=输入单元与三个隐单元间连接对应的权(960´3)+三个隐单元与四个输出单元间连接对应的权(3´4)+三个隐单元和四个输出单元的w0权(3+4) 权值。图4-10描绘了对所有训练样例进行一次权值更新后的每个权值,和100次更新后的权值。 为了理解这些图像,先考虑图中紧邻人脸图像下的四个矩形。每一个矩形描绘了网络中四个输出单元(编码了左、前、右和上)中的一个权值。每个矩形中的四个小方形表示和这个输出单元关联的四个权值 ——最左边是权w0,它决定单元的阈值,然后是连接三个隐藏单元到这个输出的三个权值。方形的亮度表示权值,亮白表示较大的正权值,暗黑表示较大的负权值,介于中间的灰色阴影表示中等的权值。例如,标为“上”的输出单元的阈值权w0接近0,从第一个隐藏单元来的权值为较大的正值,从第二个隐藏单元来的权值为较大的负值。 隐藏单元的权值显示在输出单元的下边。回忆一下,每个隐藏单元接受所有30´32个像素输入。与这些输入关联的30´32个权值被显示在它们对应的像素的位置(阈值权w0被重叠显示在图像阵列的左上角)。非常有趣的是,可以看到权的取值通常对人脸和身体出现的图像区域的特别敏感。 针对每一个训练样例梯度下降迭代100次后的网络权值显示在图的下部。注意最左边的隐藏单元的权值和迭代一次时的权值有很大不同,另两个隐藏单元的权值也有所变化。现在可以分析一下这个最终权值集合中的编码。例如,考虑输出单元指出一个人是在向右看。这个单元与第二个隐藏单元间具有一个较大的正权值,与第三个隐单元间具有一个大的负权值。分析这两个隐单元的权值,容易看到如果一个人的脸是转向他的右面(也就是我们的左面),那么他的亮度高的皮肤会大致与这个隐藏单元中的较大正值对齐,同时他的亮度低的头发会大致与负权值对齐,这导致此单元输出一个较大的值。同样的图像会使第三个隐单元输出一个接近0的值,因为亮度高的脸部倾向于与大的负权对齐。 4.8 人工神经网络的高级话题 4.8.1 其他可选的误差函数从上面可以看出,针对经典人工神经网络使用最小平方误差为误差函数,采用梯度下降法来使误差最小化,训练的是无环网络,网络结构预先设定等特点,人们提出了一系列改进方案,并做实验以证明他们。 正如前面所指出的,只要函数E相对参数化的假设空间可微,那么就可以执行梯度下降。虽然基本的反向传播算法以网络误差平方和的形式定义E,但也有人提出其他的定义,以便把其他的约束引入权值调整法则。如果定义了一个新的E,那么就必须推导出一个新的权值调整法则供梯度下降使用。E的其他可选定义包括: · 为权值增加一个惩罚项。如同前面讨论的,我们可以加入一个随着向量幅度增长的项到E中。这导致梯度下降搜寻较小的权值向量,从而减小过度拟合的风险。一种办法是按照下面的等式重新定义E: 这得到了一个与反向传播法则基本一致的权更新法则,只是在每次迭代时为每个权乘以常量(1-2gh)。因此选择这种E的定义和使用权衰减策略(见练习4.10)是等价的。 · 对误差增加一项目标函数的斜率(slope)或导数。某些情况下,训练信息中不仅有目标值,而且还有关于目标函数的导数。例如,Simard et al.(1992)描述了一个字符识别的应用,在这个应用中使用了一些训练导数来强迫网络学习那些在图像平移中不变的字符识别函数。Mitchell and Thrun(1993)描述了根据学习器以前的知识计算训练导数的方法。在这两个系统中(在第12章中描述),误差函数都被增加了一项,用来衡量这些训练导数和网络的实际导数间的差异。这样的误差函数的一个例子是 这里,表示对于训练实例d第j个输入单元的值。于是是描述目标输出值tkd应该如何随输入值变化的训练导数。类似的,表示实际的学习网络的对应导数。常数m决定匹配训练值对于匹配训练导数的相对权值。 · 使网络对目标值的交叉熵(cross entropy)最小化。考虑学习一个概率函数,比如预测一个借贷申请者会否还贷,根据是这个申请者的年龄和存款余额。尽管这里的训练样例仅提供了布尔型的目标值(要么是1,要么是0,根据这个申请者是否还贷),但基本的目标函数最好以申请者还贷的概率的形式输出,而不是对每个输入实例都企图输出明确的0或1值。在这种情况下,我们希望网络输出一个概率估计,可以证明最小化交叉熵(cross entropy)的网络可以给出最好的(也就是最大似然)概率估计,交叉熵的定义如下: 这里od是网络对于训练样例d输出的概率估计,td是对于训练样例d的目标值(0或1)。第6章讨论了何时及为什么最可能的网络假设就是使交叉熵最小化的假设,并推导了相应的sigmoid单元的梯度下降权值调整法则。第6章也描述了在什么条件下最可能的假设就是使误差平方和最小化的假设。 · 改变有效误差函数也可以通过权值共享(weight sharing)完成,也就是把与不同单元或输入相关联的权“捆绑在一起”。这里的想法是强迫不同的网络权值取一致的值,通常是为了实施人类设计者事先知道的某个约束。例如,Waibel et al.(1989)和Lang et al.(1990)描述了神经网络在语音识别方面的一个应用 ,其中网络的输入是在一个144毫秒的时间窗中不同时间的语音频率分量。在这个应用中可以做的一个假定是:一个特定语音(例如“eee”)的频率分量的识别是与这个语音在144毫秒时间窗中出现的确切时间无关的。为了实施这个约束,必须强迫接收这个时间窗不同部分的不同单元共享权值。这样做的效果是约束了假设的潜在空间,从而减小了过度拟合的风险,提高了准确泛化到未见过情形的可能性。权值共享通常这样实现:首先在共享权值的每个单元分别更新各个权值,然后取这些权值的平均,再用这个平均值替换每个需共享的权值。这个过程的结果是被共享的权值与没有被共享的权值相比使用了不同的误差函数。 4.8.2 其他可选的误差最小化过程 虽然梯度下降是搜寻使误差函数最小化的假设的最通用的搜索方法之一,但它不总是最高效的。当训练复杂的网络时,不难见到反向传播算法要进行上万次的权值更新迭代。由于这个原因,人们探索并提出了很多其他的权值优化算法。为了领会其他的可能方法,我们不妨把权值更新方法就看作是要决定两个问题:选择一个改变当前权值向量的方向;选择要移动的距离。在反向传播算法中,这个方向是通过取梯度的负值来选择的,距离是通过常量的学习速率 h决定的。 一种被称为“线搜索(line search)”的优化方法,采用了不同的方法选择权值更新的距离。确切地讲,每当选定了一条确定权值更新方向的路线,那么权更新的距离是通过寻找沿这条线的误差函数的最小值来选择的。注意这可能导致很大幅度也可能是很小幅度的权值更新,要看沿这条线的最小误差点的位置。另一种方法,是根据“线搜索”的思想建立的,被称为共轭梯度(conjugate gradient)法。这种方法进行一系列线搜索来搜索误差曲面的最小值。这一系列搜索的第一步仍然使用梯度的反方向作为方向。在后来的每一步,选择使误差梯度分量刚好为0并保持为0的方向。 虽然其他的误差最小化方法提高了训练网络的效率,但象共轭梯度这样的方法对于最终网络的泛化误差没有明显的影响。对最终误差惟一可能的影响是,不同的误差最小化过程会陷入不同的局部极小值。Bishop(1996)包含了关于训练网络的几种参数优化方法的一般性讨论。 4.8.3 递归网络(Recurrent Networks) 直到现在我们考虑的只是有向无环的网络拓扑结构。递归网络是有如下特征的人工神经网络:适用于时序数据;使用网络单元在时间t的输出作为其他单元在时间t+1的输入。以这种方式,递归网络支持在网络中使用某种形式的有向环(directed cycles)。为了演示递归网络,考虑一个时序预测任务——根据当天的经济指标x(t),预测下一天的股票平均市值y(t+1)。给定了这样的时序数据,一个显而易见的办法是根据输入值x(t)训练一个前馈网络预测输出y(t+1)。一个这样的网络显示在图4-11(a)中。 这样的网络的缺点是仅依赖x(t)作出对y(t+1)预测,而不能捕捉y(t+1)对x的以前值的依赖性。而这可能是必需的,例如,明天的股票平均市值可能依赖于今天的经济指标和昨天的经济指标的差异。当然我们可以通过把x(t)和x(t-1)都作为前馈网络的输入,来弥补这个不足。但是如果我们希望这个网络预测y(t+1)时考虑任意过去的时间窗内的信息呢?那么就需要用不同的解决方案了。图4-11(b)显示的递归网络提供了一个这样的解决方案。这里我们向隐藏层加了一个新的单元b和新的输入单元c(t)。c(t)的值被定义为单元b在时间t-1的值;也就是说,网络在某一个时间步(time step)的输入值c(t)拷贝自单元b在前一时间步的值。注意这实现了一种递归关系,其中b表示关于网络输入的历史信息。因为b既依赖于x(t)又依赖于c(t),所以b可能概括了x以前任意时间距离的值。很多其他的网络拓扑也可以用来表示递归网络。例如,我们可以在输入和单元b间插入若干层单元,也可以在加入单元b和输入单元c的地方再并行插入几个单元。 插图——原书页码: 120 Feedforward network-前馈网络 Recurrent network-递归网络 Recurrent network unfolded in time-按时间展开的递归网络 图4-11 递归网络 如何训练这样的递归网络呢?递归网络有多种变体,因此人们也分别提出了不同的训练方法(例如参见Jordan 1986; Elman 1990; Mozer 1995; Williams & Zipser 1995)。有趣的是,象图4-11(b)那样的递归网络可以简单使用反向传播算法的变体来训练。为了理解如何实施,考虑图4-11(c),显示了递归网络按照时间展开的数据流。这里我们把递归网络拷贝成几份,用不同拷贝间的连接替换掉反馈环。注意这个大的网络不再包含回路。所以展开网络的权值可以直接使用反向传播算法来训练。当然实践中我们希望仅保留一份递归网络和权值集合的拷贝。所以,在训练了展开的网络后,可以取不同拷贝中权值wji的平均值作为最终网络的对应的权值wji。Mozer(1995)非常详细地描述了这个训练过程。实践中,递归网络比没有反馈环的网络难以训练,泛化的可靠性也不如后者。然而它们仍然因较强的表征力保持着重要性。 4.8.4 动态修改网络结构 直到现在我们考虑的神经网络学习问题是调整一个固定网络结构中的权值。为了改善泛化精度和训练效率,人们提出了很多动态增长或压缩网络单元和单元间连接数量的方法。 一种想法是从一个不包含隐藏单元的网络开始,然后根据需要增加隐单元增长网络,直到训练误差下降到某个可接受的水平。级联相关(Cascade-Correlation)算法(Fahlman & Lebiere 1990)就是这样一种算法。级联相关算法从创建一个没有隐单元的网络开始。例如,对于我们的人脸朝向的学习任务,它会建立一个仅包含四个输出单元全连接到30´32个输入结点的网络。在这个网络被训练了一段时间后,我们可以很容易地发现还有较大的残留误差,因为事实上这个目标函数不可能被一个单层结构的网络理想地表示。在这种情况下,算法增加一个隐藏单元,选择它的权值使这个隐藏单元的值和整个网络的残留误差的相关性最大化。现在一个新的单元被安装进了网络,它的权值保持不变,并且增加这个新单元到每一个输出单元间的连接。重复这个过程。原始的权值被再次训练(保持隐藏单元的权值不变),检查残留误差,如果残留误差还高于阈值就加入第二个隐单元。每当加入一个新的隐藏单元,它的输入包括所有原始的网络输入和已经存在的隐藏单元的输出。网络以这种方式增长,积聚隐藏单元,直到网络的残余误差下降到某个可接受的水平。Fahlman & Lebiere(1990)报告了级联相关算法显著减少训练时间的例子,原因是每一步仅有一层网络在被训练。这个算法的一个实际困难是因为算法可以无限制地增加单元,它就很容易过度拟合训练数据,所以必须采取避免过度拟合的预防措施。 动态修改网络结构的第二个想法是使用相反的途径。不再从可能的最简单网络开始增加复杂性,而是从一个复杂的网络开始修剪掉某些无关紧要的连接。判断某个权是否无关紧要的一种方法是看它的值是否接近0。第二种看来在实践中更加成功的方法是考虑这个权值的一个小的变化对误差E的影响。变化w对E的影响(也就是)可以被看作衡量这个连接的显著性(salient)的尺度。LeCun et al.(1990)描述了一个网络被训练的过程,最不显著的连接被拆除,重复这个过程直到遇到某个终止条件。他们称这种方法为“最优脑损伤(optimal brain damage)”法,因为在每一步算法都试图去除最没有用的连接。他们报告了在一个字符识别应用中这种方法将一个大的网络中权值减少到四分之一,对泛化精度有微小的改善,并且大大改善了后来的训练效率。 一般而言,动态修改网络结构的方法已经取得了一些成功,但也有不足。这种方法是否能稳定地提高反向传播算法的泛化精度还有待研究。然而已经证明在一些情形下它可以显著地降低训练时间。 4.9 小结和补充读物 这一章的要点包括: · 人工神经网络学习为学习实数值和向量值函数提供了一种实际的方法,对于连续的和离散值的属性都可以使用,并且对训练数据中的噪声有很好的鲁棒性。反向传播算法是最常见的网络学习算法,已经成功应用到很多学习任务,比如手写识别和机器人控制。 · 反向传播算法考虑的假设空间是固定连接的有权网络所能表示的所有函数空间。包含三层单元的前馈网络能够以任意精度逼近任意函数,只要每一层有足够数量(可能非常多)的单元。即使是一个实际大小的网络也能够表示很大范围的高度非线性的函数,这使得前馈网络成为学习预先未知的一般形式的离散和连续函数的很好选择。 · 反向传播算法使用梯度下降方法搜索可能假设的空间,迭代减小网络的误差以拟合训练数据。梯度下降收敛到训练误差相对网络权值的局部极小值。更一般的,梯度下降是一种有应用潜力的方法,它可用来搜索很多连续参数的假设空间,只要训练误差是假设参数的可微函数。 · 反向传播算法最令人感兴趣的特征之一是,它能够创造出网络输入中没有明确出现的特征。确切地讲,多层网络的内部(隐藏)层能够表示对学习目标函数有用的但隐含在网络输入中的中间特征。这种能力被例子如4.6.4节的8´3´8网络中创造的数字1到8的布尔编码;以及4.7节人脸识别应用中隐藏层表示的图像特征。 · 过度拟合训练数据是ANN学习中的一个重要问题。过度拟合导致网络泛化到新的数据时性能很差,尽管网络对于训练数据表现非常好。交叉验证方法可以用来估计梯度下降搜索的合适终止点,从而最小化过度拟合的风险。 · 尽管反向传播算法是最常见的ANN学习算法,人们也提出很多其他的算法,包括对于特殊任务的一些算法。例如,递归网络方法训练包含有向环的网络,类似级联相关的算法改变权的同时也改变网络结构。 本书的其他章节也介绍了一些关于ANN学习的其他信息。第6章给出了选择最小化误差平方和的贝叶斯论证,以及在其他情况下用最小化交叉熵(cross entropy)代替最小化误差平方和的方法。第7章讨论了为可靠学习布尔函数所需要的训练实例数量的理论结果,以及某些类型网络的Vapnik-Chervonenkis维。关于过度拟合以及如何避免的讨论可以在第5章中找到。第12章讨论了使用以前的知识来提高泛化精度的方法。 对人工神经网络的研究可以追溯到计算机科学的早期。McCulloch & Pitts(1943)提出了一个相当于感知器的神经元模型,60年代的大量工作探索了这个模型的很多变体。60年代早期Widrow & Hoff(1960)探索了感知器网络(他们称为“adelines”)和delta法则,Rosenblatt(1962)证明了感知器训练法则的收敛性。然而,直到60年代晚期,人们开始清楚单层的感知器网络的表征能力很有限,而且找不到训练多层网络的有效方法。Minsky & Papert(1969)说明即使是象XOR这样简单的函数也不能用单层的感知器网络表示或学习,在整个70年代ANN的研究衰退了。 在80年代中期ANN的研究经历了一次复兴,主要是因为训练多层网络的反向传播算法的发明(Rumelhart & McClelland 1986;Parker 1985)。这些思想可以被追溯到有关的早期研究(例如Werbos 1975)。自从80年代,反向传播算法就成为应用最广泛的学习方法,而且人们也积极探索出了很多其他的ANN方法。在同一时期,计算机变得不再贵重,这允许人们试验那些在60年代不可能被完全探索的计算密集性的算法。 很多教科书专门论述了神经网络学习。一本早期的但仍有用的关于模式识别的参数学习方法的书是Duda & Hart(1973)。Windrow & Stearns(1985)的教科书覆盖了感知器和相关的单层网络以及它们的应用。Rumelhart & McClelland(1986)收编了80年代中期开始的重新激发起人们对神经网络方法兴趣的论文。关于神经网络最近出版的书籍包括Bishop(1996);Chauvin & Rumelhart(1995);Freeman & Skapina(1991);Fu(1994);Hecht-Nielson(1990)和Hertz et al.(1991)。 习题 4.1 对图4-3画出的误差曲面,感知器的权w0,w1和w2的值是什么?假定这个误差曲面与x1轴相交在x1= -1,并与x2轴相交在x2 = 2。 4.2 设计一个两输入的感知器来实现布尔函数AÙØB。设计一个两层的感知器网络来实现布尔函数A XOR B。 4.3 考虑使用阈值表达式w0 + w1x1 + w2x2 > 0定义的两个感知器。感知器A的权值为 w0=1,w1=2,w2=1 感知器B的权值为 w0=0,w1=2,w2=1 请判断以下表达对或错。感知器A是more_general_than感知器B的。(more_general_than在第2章中定义) 4.4 实现一个两输入线性单元的delta训练法则。训练它来拟合目标概念-2+x1+2x2>0。画出误差E相对训练迭代次数的函数曲线。画出5,10,50,100,……次迭代后的决策面。 (a) 为h选取不同的常量值,并使用衰减的学习速率——也就是第i次迭代使用h0/i,再进行试验。哪一个效果更好? (b) 试验增量(incremental)和批量(batch)学习。那个收敛得更快?考虑权值更新次数和总执行时间。 4.5 推导输出为o的单个单元的梯度下降训练法则,其中 4.6简略的解释为什么公式(4.10)中的delta法则仅是公式(4.7)表示的真正梯度下降法则的近似? 4.7 考虑一个两层的前馈ANN,它具有两个输入a和b,一个隐单元c,和一个输出单元d。这个网络有五个权值(wca,wcb,wc0,wdc,wd0),其中wx0表示单元x的阈值权。先把这些权的值初始化为(0.1,0.1,0.1,0.1,0.1),然后给出使用反向传播算法训练这个网络的前两次迭代中每一次这些权值的值。假定学习速率h=0.3,冲量a=0.9,采用增量的权值更新,和以下训练样例: a b d 1 0 1 0 1 0 4.8 修改表4-2中的反向传播算法,使用双曲正切tanh函数取代sigmoid函数作为挤压函数。也就是说,假定单个单元的输出是o=tanh()。给出输出层权值和隐藏层权值的权更新法则。提示:tanh¢(x)=1-tanh2(x)。 4.9 回忆图4-7描述的8´3´8网络。考虑训练一个8´1´8的网络来完成同样的任务;也就是仅有一个隐藏单元的网络。注意,图4-7中的8个训练样例可以被表示为单个隐单元的8个不同的值(例如0.1,0.2,……,0.8)。那么仅有一个隐单元的网络能够根据这些训练样例学习恒等函数吗?提示:考虑类似这样的问题“是否存在这样的隐藏单元权值,能产生上面建议的隐藏单元编码?”,“是否存在这样的输出单元权值,能正确解码这样的输入编码?”和“梯度下降搜索可能发现这样的权值吗?” 4.10 考虑4.8.1小节中描述的另一种误差函数: 为这个误差E推导出梯度下降权更新法则。证明这个权值更新法则的实现可通过在进行表4-2的标准梯度下降权更新前把每个权值乘以一个常数。 4.11 应用反向传播算法来完成人脸识别任务。参见互联网页http://www.cs.cmu.edu/~tom/mlbook.html来获得其细节,包括人脸图像数据,反向传播程序源代码和具体的任务。 4.12 推导出学习x,y平面上的矩形这一目标概念的梯度下降算法。使用x,y的坐标描述每一个假设,矩形的左下角和右上角分别表示为llx,lly,urx和ury。实例被假设标记为正例的充要条件是点位于对应的矩形内部。按本章中的办法定义误差E。试设计一个梯度下降算法来学习这样的矩形假设。注意误差E不是llx,lly,urx和ury的连续函数,这与感知器学习的情况一样。(提示:考虑感知器中使用的两个解决办法:(1)改变分类法则来使输出预测成为输入的连续函数;(2)另外定义一个误差——比如到矩形中心的距离——就像训练感知器的delta法则。)当正例和反例可被矩形分割时,设计的算法会收敛到最小误差假设吗?何时不会?该算法有局部极小值的问题吗?该算法与学习特征约束合取的符号方法相比如何? 参考文献

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 6 人已下载

下载文档