反向传播网络(BP网络)

上传人:ji****72 文档编号:37625347 上传时间:2018-04-20 格式:DOC 页数:5 大小:51KB
返回 下载 相关 举报
反向传播网络(BP网络)_第1页
第1页 / 共5页
反向传播网络(BP网络)_第2页
第2页 / 共5页
反向传播网络(BP网络)_第3页
第3页 / 共5页
反向传播网络(BP网络)_第4页
第4页 / 共5页
反向传播网络(BP网络)_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《反向传播网络(BP网络)》由会员分享,可在线阅读,更多相关《反向传播网络(BP网络)(5页珍藏版)》请在金锄头文库上搜索。

1、反向传播网络(反向传播网络(BP 网络)网络)1概述概述前面介绍了神经网络的结构和模型,在实际应用中,我们用的最广泛的是反向传播网络(BP 网络)。下面就介绍一下 BP 网络的结构和应用。BP 网络是采用 Widrow-Hoff 学习算法和非线性可微转移函数的多层网络。一个典型的 BP 网络采用的是梯度下降算法,也就是 Widrow-Hoff 算法所规定的。backpropagation 就是指的为非线性多层网络计算梯度的方法。现在有许多基本的优化算法,例如变尺度算法和牛顿算法。神经网络工具箱提供了许多这样的算法。这一章我们将讨论使用这些规则和这些算法的优缺点。一个经过训练的 BP 网络能够根

2、据输入给出合适的结果,虽然这个输入并没有被训练过。这个特性使得 BP 网络很适合采用输入/目标对进行训练,而且并不需要把所有可能的输入/目标对都训练过。为了提高网络的适用性,神经网络工具箱提供了两个特性-规则化和早期停止。这两个特性和用途我们将在这一章的后面讨论。这一章还将讨论网络的预处理和后处理技术以提高网络训练效率。2基础基础网络结构网络结构神经网络的结构前一章已详细讨论过,前馈型 BP 网络的结构结构和它基本相同,这里就不再详细论述了,这里着重说明以下几点:1 常用的前馈型 BP 网络的转移函数有 logsig,tansig,有时也会用到线性函数 purelin。当网络的最后一层采用曲线

3、函数时,输出被限制在一个很小的范围内,如果采用线性函数则输出可为任意值。以上三个函数是 BP 网络中最常用到的函数,但是如果需要的话你也可以创建其他可微的转移函数。2 在 BP 网络中,转移函数可求导是非常重要的,tansig、logsig 和 purelin 都有对应的导函数dtansig、dlogsig 和 dpurelin。为了得到更多转移函数的导函数,你可以带字符“deriv“的转移函数:tansig(deriv)ans = dtansig网络构建和初始化网络构建和初始化训练前馈网络的第一步是建立网络对象。函数 newff 建立一个可训练的前馈网络。这需要 4 个输入参数。第一个参数是

4、一个 Rx2 的矩阵以定义 R 个输入向量的最小值和最大值。第二个参数是一个颟顸每层神经元个数的数组。第三个参数是包含每层用到的转移函数名称的细胞数组。最后一个参数是用到的训练函数的名称。举个例子,下面命令将创建一个二层网络,其网络模型如下图所示。它的输入是两个元素的向量,第一层有三个神经元,第二层有一个神经元。第一层的转移函数是 tan-sigmoid,输出层的转移函数是 linear。输入向量的第一个元素的范围是-1 到 2,输入向量的第二个元素的范围是 0 到 5,训练函数是 traingd。net=newff(-1 2; 0 5,3,1,tansig,purelin,traingd);

5、这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。我们可能要多次重新初始化权重或者进行自定义的初始化。下面就是初始化的详细步骤。在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令 init 来实现。这个函数接收网络对象并初始化权重和偏置后返回网络对象。下面就是网络如何初始化的:net = init(net);我们可以通过设定网络参数 net.initFcn 和 net.layeri.initFcn 这一技巧来初始化一个给定的网络。net. initFcn 用来决定整个网络的初始化函数。前馈网络的缺省值为 initlay,它允许每一层用单独的初始化

6、函数。设定了 net.initFcn ,那么参数 net.layeri.initFcn 也要设定用来决定每一层的初始化函数。对前馈网络来说,有两种不同的初始化方式经常被用到:initwb 和 initnw。initwb 函数根据每一层自己的初始化参数(net.inputWeightsi,j.initFcn)初始化权重矩阵和偏置。前馈网络的初始化权重通常设为rands,它使权重在-1 到 1 之间随机取值。这种方式经常用在转换函数是线性函数时。initnw 通常用于转换函数是曲线函数。它根据 Nguyen 和 WidrowNgWi90为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的

7、分布在输入空间。它比起单纯的给权重和偏置随机赋值有以下优点:(1)减少神经元的浪费(因为所有神经元的活动区域都在输入空间内)。(2)有更快的训练速度(因为输入空间的每个区域都在活动的神经元范围中)。初始化函数被 newff 所调用。因此当网络创建时,它根据缺省的参数自动初始化。init 不需要单独的调用。可是我们可能要重新初始化权重和偏置或者进行自定义的初始化。例如,我们用 newff 创建的网络,它缺省用 initnw 来初始化第一层。如果我们想要用 rands 重新初始化第一层的权重和偏置,我们用以下命令:net.layers1.initFcn = initwb;net.inputWeig

8、hts1,1.initFcn = rands;net.biases1,1.initFcn = rands;net.biases2,1.initFcn = rands;net = init(net);网络模拟网络模拟(SIM)函数 sim 模拟一个网络。sim 接收网络输入 p,网络对象 net,返回网络输出 a,这里是 simuff 用来模拟上面建立的带一个输入向量的网络。p = 1;2;a = sim(net,p)a =-0.1011(用这段代码得到的输出是不一样的,这是因为网络初始化是随机的。)下面调用 sim 来计算一个同步输入 3 向量网络的输出:p = 1 3 2;2 4 1;a=s

9、im(net,p)a =-0.1011 -0.2308 0.4955网络训练网络训练一旦网络加权和偏差被初始化,网络就可以开始训练了。我们能够训练网络来做函数近似(非线性 后退),模式结合,或者模式分类。训练处理需要一套适当的网络操作的例子-网络输入 p 和目标输出 t。在训练期间网络的加权和偏差不断的把网络性能函数 net.performFcn 减少到最小。前馈网络的缺省性能函数是均方误差 mse-网络输出和目标输出 t 之间的均方误差。这章的余项将描述几个对前馈网络来说不同的训练算法。所有这些算法都用性能函数的梯度来决定怎样把权重调整到最佳。梯度由叫做反向传播的技术决定,它要通过网络实现反

10、向计算。反向传播计算源自使用微积分的链规则。基本的反向传播算法的权重沿着梯度的负方向移动,这将在下一节讲述。以后的章节将讲述更复杂的算法以提高收敛速度。反向传播算法反向传播算法反向传播算法中有许多变量,这一章将讨论其中的一些。反向传播学习算法最简单的应用是沿着性能函数最速增加的方向-梯度的负方向更新权重和偏置。这种递归算法可以写成:xk+1 = xk- a k g k 这里 xk 是当前权重和偏置向量,g k 是当前梯度,a k 是学习速率。有两种不同的办法实现梯度下降算法:增加模式和批处理模式。在增加模式中,网络输入每提交一次,梯度计算一次并更新权重。在批处理模式中,当所有的输入都被提交后网

11、络才被更新。下面两节将讨论增加模式和批处理模式。增加模式训练法(增加模式训练法(ADAPT)函数 adapt 用来训练增加模式的网络,它从训练设置中接受网络对象、网络输入和目标输入,返回训练过的网络对象、用最后的权重和偏置得到的输出和误差。这里有几个网络参数必须被设置,第一个是 net.adaptFcn,它决定使用哪一种增加模式函数,缺省值为 adaptwb,这个值允许每一个权重和偏置都指定它自己的函数,这些单个的学习函数由参数net.biasesi,j.learnFcn、net.inputWeightsi,j.learnFcn、 net.layerWeightsi,j.learnFcn 和

12、Gradient Descent (LEARDGD)来决定。对于基本的梯度最速下降算法,权重和偏置沿着性能函数的梯度的负方向移动。在这种算法中,单个的权重和偏置的学习函数设定为“learngd“。下面的命令演示了怎样设置前面建立的前馈函数参数:net.biases1,1.learnFcn = learngd;net.biases2,1.learnFcn = learngd;net.layerWeights2,1.learnFcn = learngd;net.inputWeights1,1.learnFcn = learngd;函数 learngd 有一个相关的参数-学习速率 lr。权重和偏置的

13、变化通过梯度的负数乘上学习速率倍数得到。学习速率越大,步进越大。如果学习速率太大算法就会变得不稳定。如果学习速率太小,算法就需要很长的时间才能收敛。当 learnFcn 设置为 learngd 时,就为每一个权重和偏置设置了学习速率参数的缺省值,如上面的代码所示,当然你也可以自己按照意愿改变它。下面的代码演示了把层权重的学习速率设置为 0.2。我们也可以为权重和偏置单独的设置学习速率。net.layerWeights2,1.learnParam.lr= 0.2;为有序训练设置的最后一个参数是 net.adaptParam.passes,它决定在训练过程中训练值重复的次数。这里设置重复次数为 2

14、00net.adaptParam.passes = 200;现在我们就可以开始训练网络了。当然我们要指定输入值和目标值如下所示:p = -1 -1 2 2;0 5 0 5;t = -1 -1 1 1;如果我们要在每一次提交输入后都更新权重,那么我们需要将输入矩阵和目标矩阵转变为细胞数组。每一个细胞都是一个输入或者目标向量。p = num2cell(p,1);t = num2cell(t,1);现在就可以用 adapt 来实现增加方式训练了:net,a,e=adapt(net,p,t);训练结束以后,我们就可以模拟网络输出来检验训练质量了。a = sim(net,p)a =-0.9995 -1.

15、0000 1.0001 1.0000带动力的梯度下降法带动力的梯度下降法(LEARDGDM)除了 learngd 以外,还有一种增加方式算法常被用到,它能提供更快的收敛速度-learngdm,带动量的最速下降法。动力允许网络不但根据当前梯度而且还能根据误差曲面最近的趋势响应。就像一个低通滤波器一样,动量允许网络忽略误差曲面的小特性。没有动量,网络又可能在一个局部最小中被卡住。有了动量网络就能够平滑这样的最小。动量能够通过把权重变得与上次权重变化的部分和由算法规则得到的新变化的和相同而加入到网络学习中去。上一次权重变化对动量的影响由一个动量常数来决定,它能够设为 0到 1 之间的任意值。当动量常

16、数为 0 时,权重变化之根据梯度得到。当动量常数为 1 时新的权重变化等于上次的权重变化,梯度值被忽略了。Learngdm 函数有上面所示的 learngd 函数触发,除非 mc 和 lr 学习参数都被设置了。由于每一个权重和偏置有它自己的学习参数,每一个权重和偏置都可以用不同的参数。下面的命令将用 lerangdm 为前面建立的用增加方式训练的网络设置缺省的学习参数:net.biases1,1.learnFcn = learngdm;net.biases2,1.learnFcn = learngdm;net.layerWeights2,1.learnFcn = learngdm;net.inputWeights1,1.learnFcn = learngdm;net,a,e=adapt(net,p,t);批处理训练方式批处理训练方式训练的另一种方式是批处理方式,它由函

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号