神经网络学习 之 BP神经网络.docx
目录第二章BP算法的基本思想 第三章BP网络特性分析第四章BP网络的训练分解5.3第一章概述神经网络是1986年由Rumelhart和McCelland为首的科研小组提出,参见他们发表在Nature上的论文??。6.3 初始权值的选取一般初始权值是取值在(?1,1)之间的随机数。另外威得罗等人在分析了两层网络是如何对一 个函数进行训练后,提出选择初始权值量级为sVr的策略,其中r为输入个数,s为第一层神经 元个数。6.4 学习速率学习速率一般选取为0.01?0.8,大的学习速率可能导致系统的不稳定,但小的学习速率导致 收敛太慢,需要较长的训练时间。对于较复杂的网络,在误差曲面的不同位置可能需要不同的 学习速率,为了减少寻找学习速率的训练次数及时间,比较合适的方法是采用变化的自适应学习 速率,使网络在不同的阶段设置不同大小的学习速率。6.5 期望误差的选取在设计网络的过程中,期望误差值也应当通过对比训练后确定一个合适的值,这个合适的值 是相对于所需要的隐层节点数来确定的。一般情况下,可以同时对两个不同的期望误差值的网 络进行训练,最后通过综合因素来确定其中一个网络。BP网络的局限性BP网络具有以下的几个问题: Q)需要较长的训练时间:这主要是由于学习速率太小所造成的,可采用变化的或自适应 的学习速率来加以改进。 (2)完全不能训练:这主要表现在网络的麻痹上,通常为了避免这种情况的产生,一是选 取较小的初始权值,而是采用较小的学习速率。 (3)局部最小值:这里采用的梯度下降法可能收敛到局部最小值,采用多层网络或较多的 神经元,有可能得到更好的结果。BP网络的改进BP算法改进的主要目标是加快训练速度,避免陷入局部极小值等,常见的改进方法有带动 量因子算法、自适应学习速率、变化的学习速率以及作用函数后缩法等。动量因子法的基本思 想是在反向传播的基础上,在每一个权值的变化上加上一项正比于前次权值变化的值,并根据反 向传播法来产生新的权值变化。而自适应学习速率的方法则是针对一些特定的问题的。改变学 习速率的方法的原则是,若连续几次迭代中,若目标函数对某个权倒数的符号相同,则这个权的 学习速率增加,反之若符号相反则减小它的学习速率。而作用函数后缩法则是将作用函数进行 平移,即加上一个常数。BP神经网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和 阈值,使网络的误差平方和最小。第二章BP算法的基本思想多层感知器在如何获取隐层的权值的问题上遇到了瓶颈。既然我们无法直接得到隐层的权值, 能否先通过输出层得到输出结果和期望输出的误差来间接调整隐层的权值呢? BP算法就是采用这样的思想设计出来的算法,它的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这两个过程的具体流程会在后文介绍。BP算法的信号流向图如下图所示?隐层HH输出层H> f(VTX)第三章忖络嘱性好丽W Aof/6°我们分析一个ANN时,通常都是从它的三要素入手,即?1)网络拓扑结构;?72)传递函数;?一3)学习算法。/每一个要素的特性加起来就决定了这个ANN的功能特性。所以,我们也从这三要素入手对BP网络的研究。3.1 BP网络的拓扑结构上一次已经说了,BP网络实际上就是多层感知器,因此它的拓扑结构和多层感知器的拓扑 结构相同。由于单隐层(三层)感知器已经能够解决简单的非线性问题,因此应用最为普遍。三 层感知器的拓扑结构如下图所示。?一个最简单的三层BP:?3. 2 BP网络的传递函数BP网络采用的传递函数是非线性变换函数(又称S函数)。其特点是函数本身及其导 数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算 法的时候会进行进一步的介绍。?1单极性S型函数曲线如下图所示。?1+£ 1双极性S型函数曲线如下图所示。3.3 BP网络的学习算法BP网络的学习算法就是BP算法,又叫8算法(在ANN的学习过程中我们会发现不少具 有多个名称的术语),以三层感知器为例,当网络输出与期望输出不等时,存在输出误差E , 定义如下:后=/一。)2 = :£二(八-/)2将以上误差定义式展开至隐层,有? 进一步展开至输入层,有?由上式可以看出,网络输入误差是各层权值3jK、Uij的函数,因此调整权值可改变误差?E。 显然,调整权值的原则是使误差不断减小,因此应使权值与误差的梯度下降成正比,即?:对于一般多层感知器,设共有?h?个隐层,按前向顺序各隐层节点数分别记为?1111,1112,1113各隐层输出分别记为?丫1,丫2,丫11,各层权值矩阵分别记为?W1,W2,.,Wh,Wh+i,则各层权值调整公式为输出层第?h?隐层按以上规律逐层类推,则第一隐层权值调整公式容易看出,BP学习算法中,各层权值调整公式形式上都是一样的,均由3个因素决定,即:1 .学习率?n2 .本层输出的误差信号33 .本层输入信号?Y (或X)其中输入层误差信号与网络的期望输出与实际输出之差有关,直接反应了输出误差,而各隐 层的误差信号与前面各层的误差信号有关,是从输出层开始逐层反传过来的。可以看出BP算法属于b学习规则类,这类算法常被称为误差的梯度下降算法。b学习规则 可以看成是Widrow-Hoff(LMS)学习规则的一般化(generalize)情况。LMS学习规则与神经元采 用的变换函数无关,因而不需要对变换函数求导,b学习规则则没有这个性质,要求变换函数可 导。这就是为什么我们前面采用Sigmoid函数的原因。综上所述,BP三要素如下图所示。第四章BP网络的训练分解训练一个BP神经网络,实际上就是调整网络的权重和偏置这两个参数,BP神经网络的训练过程 分两部分:前向传输,逐层波浪式的传递输出值; 逆向反馈,反向逐层调整权重和偏置;?我们先来看前向传输。4. 1前向传输(Feed-Forward前向反馈)在训练网络之前,我们需要随机初始化权重和偏置,对每一个权重取的一个随机实数, 每一个偏置取0,1的一个随机实数,之后就开始进行前向传输。神经网络的训练是由多趟迭代完成的,每一趟迭代都使用训练集的所有记录,而每一次训练 网络只使用一条记录,抽象的描述如下:1 while终止条件未满足:的个数为100,那我们就设置输入层的神经单元个数为2 for record:dataset:100 3tra】即del (record)勺属性值"对输入层的操作就这么简单,之后的每层就要复朵一些r,除输入层外,其他各层的输入值是上一层输入值按权重累加的结果值加上偏置,每个结点的输出值等该结点的输入值作变换?前向传输的输出层的计算过程公式如下:?对隐藏层和输出层的每一个结点都按照如上图的方式计算输出值,就完成前向传播的过程, 紧接着是进行逆向反馈。4. 2 逆向反馈(Backpropagation)逆向反馈从最后一层即输出层开始,我们训练神经网络作分类的目的往往是希望最后一层的输出 能够描述数据记录的类别,比如对于一个二分类的问题,我们常常用两个神经单元作为输出层, 如果输出层的第一个神经单元的输出值比第二个神经单元大,我们认为这个数据记录属于第一类, 否则属于第二类。还记得我们第一次前向反馈时,整个网络的权重和偏置都是我们随机取,因此网络的输出肯定还 不能描述记录的类别,因此需要调整网络的参数,即权重值和偏置值,而调整的依据就是网络的 输出层的输出值与类别之间的差异,通过调整参数来缩小这个差异,这就是神经网络的优化目标。对于输出层:?Ej =。)(1 一 Oj)(Tj - Oj)其中Ej表示第j个结点的误差值,Qi表示第j个结点的输出值,Tj记录输出值,比如对于 2分类问题,我们用01表示类标L10表示类别2,如果一个记录属于类别1,那么其Ti=0, T2=L中间的隐藏层并不直接与数据记录的类别打交道,而是通过下一层的所有结点误差按权重累加,计算公式如下:?为=。乂1一。»£反印扑其中Wjk表示当前层的结点J 土I:一层的结点k的误差率。计算完误差率后,就可以利用误差率对权重和偏置进行更新,首先看权重的更新:?其中入表示表示学习速率,取隹叱)=入Ej°'争大,训练收敛更快,但容易陷入= W4d a AI忆 d局部最优解,学习速率设置得比较小 j 3日一步步逼近全局最优解。更新完权重后,还有最后一项参数需要更新,即偏置:?至此,我们完成了一次神经网络的训练过程,通过不断的使用所有数据记录进行训练,从而 得到一个分类模型。不断地迭代,不可能无休止的下去,总归有个终止条件。4. 3训练终止条件每一轮训练都使用数据集的所有记录,但什么时候停止,停止条件有下面两种:1 .设置最大迭代次数,比如使用数据集迭代100次后停止训练2 .计算训练集在网络上的预测准确率,达到一定门限值后停止训练第五章BP网络运行的具体流程5. 1网络结构输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元。5. 2变量定义输入变量:X=(Xl,X29.9Xn)隐含层输入变量:hi=(hii,hi2,.,hip)隐含层输出变量:ho=(ho 1 ,ho2,. ,hop)输出层输入变量:yi=(yii,yi2,yiq)输出层输出变量:yo=(yoi,yo2,yoq)期望输出向量:do=(di,d2,.,dq)输入层与中间层的连接权值:Wih隐含层与输出层的连接权值:Who隐含层各神经元的阈值:bh输出层各神经元的阈值:bo样本数据个数:k=l,2,m激活函数:f(?)误差函数:1 9e=万工侬式防一 w0(k)第一步:网络初始化°=1给各连接权值分别赋一个区间(?1,1)内的随机数,设定误差函数e,给定计算精度值£和最大学 习次数M。第二步:随机选取随机选取第k个输入样本以及对应的期望输出?x(k)=(xi(k),x2(k),. .,xn(k)do(k)=(di(k),d2(k),. .,dq(k)第三部:隐含层计算计算隐含层各神经元的输入和输出?n第四步:求偏导娄 也=£她力勺一瓦i=l利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数8o(k)?第六步:修正权值利用输出层各神经元的3°(k)和隐含层各神经元的输出来修正连接权值who(k)o?第七部:修正权值利用隐含层各神经元的3h(k)和输入层各神经元的输入修正连接权值。?771 q£工区-%)2第八步:计算全局误差第九步:判断模1 E= 2m判断网络误差是否满足要求。?当误差达到预设精度或者学习次数大于设计的最大次数,则结束算法。?否则,选取下一个学习样本以及对应的输出期望,返回第三部,进入下一轮学习。第六章BP网络的设计在进行BP网络的设计是,一般应从网络的层数、每层中的神经元个数和激活函数、初始值以及 学习速率等几个方面来进行考虑,下面是一些选取的原则。6.1 网络的层数理论已经证明,具有偏差和至少一个S型隐层加上一个线性输出层的网络,能够逼近任何有理函数,增加层数可以进一步降低误差,提高精度,但同时也是网络复杂化。另外不能用仅具有非 线性激活函数的单层网络来解决问题,因为能用单层网络解决的问题,用自适应线性网络也一定 能解决,而且自适应线性网络的运算速度更快,而对于只能用非线性函数解决的问题,单层精 度又不够高,也只有增加层数才能达到期望的结果。6.2 隐层神经元的个数网络训练精度的提高,可以通过采用一个隐含层,而增加其神经元个数的方法来获得,这在 结构实现上要比增加网络层数简单得多。一般而言,我们用精度和训练网络的时间来恒量一个 神经网络设计的好坏:?(1)神经元数太少时,网络不能很好的学习,训练迭代的次数也比较多,训练精度也不高。?(2)神经元数太多时,网络的功能越强大,精确度也更高,训练迭代的次数也大,可能会出现过拟合(over fitting)现象。?由此,我们得到神经网络隐层神经元个数的选取原则是:在能够解决问题的前提下,再加上 一两个神经元,以加快误差下降速度即可。