您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页BP神经网络在MATLAB上的实现与应用

BP神经网络在MATLAB上的实现与应用

来源:华佗小知识
 第25卷第3期

2004年6月

湛江师范学院学报

JOURNALOFZHANJIANGNORMALCOLLEGE

Jun1,2004Vol125 No13

BP神经网络在MATLAB上的实现与应用

桂现才

(湛江师范学院数学与计算科学学院,广东湛江524048)

摘 要:BP神经网络在非线性建模,函数逼近和模式识别中有广泛地应用,该文介绍了BP神经网络的基本原理,利用MATLAB神经网络工具箱可以很方便地进行BP神经网络的建立、训练和仿真,给出了建立BP神经网络的注意事项和例子.

关键词:人工神经网络;BP网络;NNboxMATLAB

中图分类号:TP311.52 文献标识码:A 文章编号:1006-4702(2004)03-0079-05

1 BP神经网络简介

人工神经网络(ArtificialNeuralNetworks,简称为NN)是近年来发展起来的模拟人脑生物过程

的人工智能技术.它由大量简单的神经元广泛互连形成的复杂的非线性系统,它不需要任何先验公式,就能从已有数据中自动地归纳规则,获得这些数据的内在规律,具有很强的非线性映射能力,特别适合于因果关系复杂的非确性推理、判断、识别和分类等问题.

基于误差反向传播(Backpropagation)算法的多层前馈网络(Multiple-layerfeedforwardnet2work,简记为BP网络),是目前应用最多也是最成功的网络之一,构造一个BP网络需要确定其处理单元)))神经元的特性和网络的拓扑结构.1.1神经元模型

神经元是神经网络最基本的组成部分,一般地,一个有R个输入的神经元模型如图1所示.其中P为输入向量,w为权向量,b为阈值,f为传递函数,a为神经元输出.所有输入P通过一个权重w进行加权求和后加上阈值b再经传递函数f的作用后即为该神经元的输出a.传递函数可以是任何可微的函数,常用的有Sigmoid型和线性型.1.2 神经网络的拓扑结构

神经网络的拓扑结构是指神经元之间的互连结构.图2是一个三层的BP网络结构.BP网络由输入层、输出层以及一个或多个隐层节点互连而成的一种多层网,这种结构使多层前馈网络可在输入和输出间建立合适的线性或非线性关系,又不致使网络输出在-1和1之间.

2 MATLAB中BP神经网络的实现

BP网络的训练所采用的算法是反向传播法,可以以任意精度逼近任意的连续函数,近年

收稿日期:2004-02-12

作者简介:桂现才(19)),海南临高人,湛江师范学院数学与计算科学学院讲师,从事数据分析与统计,数据挖

掘研究.

80湛江师范学院学报(自然科学) 第25卷

来,为了解决BP网络收敛速度慢,训练时间长等不足,提出了许多改进算法[1][2].在应用BP网络解决实际问题的过程中,选择多少层网络、每层多少个神经元节点、选择何种传递函数、何种训练算法等,均无可行的理论指导,只能通过大量的实验计算获得.这无形增加了研究工作量和编程计算工作量.MATLAB软件提供了一个现成的神经网络工具箱(NeuralNetworkToolbox,简称NNbox),为解决这个矛盾提供了便利条件.下面针对BP网络的建立、传递函数的选择、网络的训练等,在介绍NNbox相关函数的基础上,给出利用这些函数编程的方法.

2.1 神经网络的建立

MATLAB的NNbox提供了建立神经网络的专用函数newff().用newff函数来确定网络层数、每层中的神经元数和传递函数,其语法为:

net=newff(PR,[S1,S2,,,SN],{TF1,TF2,,,TFN},BTF,BLF,PF)其中PR是一个由每个输入向量的最大最小值构成的Rx2矩阵.Si是第i层网络的神经元个数.

TFi是第i层网络的传递函数,缺省为tansig,可选用的传递函数有tansig,logsig或purelin.BTF)字符串变量,为网络的训练函数名,可在如下函数中选择:traingd、traingdm、traingdx、trainbfg、trainlm等,缺省为trainlm.

BLF)字符串变量,为网络的学习函数名,缺省为learngdm.BF)字符串变量,为网络的性能函数,缺省为均方差cmsec

newff在确定网络结构后会自动调用init函数用缺省参数来初始化网络中各个权重和阈值,产生一个可训练的前馈网络,即该函数的返回值为net.

由于非线性传递函数对输出具有压缩作用,故输出层通常采用线性传递函数,以保持输出范围.

2.2 神经网络训练

初始化后的网络即可用于训练,即将网络的输入和输出反复作用于网络,不断调整其权重和阈值,以使网络性能函数net.performFcn达到最小,从而实现输入输出间的非线性映射.对于newff函数产生的网络,其缺省的性能函数是网络输出和实际输出间的均方差MSE.

在NNbox中,给出了十多种网络学习、训练函数,其采用的算法可分为基本的梯度下降算法

[1][2]

和快速算法,各种算法的推导参见文献.

在MATLAB中训练网络有两类模式:逐变模式(incrementalmode)和批变模式(batchmode).在逐变模式中,每一个输入被作用于网络后,权重和阈值被更新一次.在批变模式中,所有的输入被应用于网络后,权重和阈值才被更新一次.使用批变模式不需要为每一层的权重和阈值设定训

第3期 桂现才:BP神经网络在MATLAB上的实现与应用81

练函数,而只需为整个网络指定一个训练函数,使用起来相对方便,而且许多改进的快速训练算法只能采用批变模式,在这里我们只讨论批变模式,以批变模式来训练网络的函数是train,其语法主要格式为:

[net,tr]=train(NET,p,t),其中p和t分别为输入输出矩阵,NET为由newff产生的要训练的网络,net为修正后的网络,tr为训练的记录(训练步数epoch和性能perf).train根据在newff函数中确定的训练函数来训练,不同的训练函数对应不同的训练算法.

Traingd基本梯度下降算法.收敛速度慢,可用于增量模式训练.

Traingdm带有趋势动量的梯度下降算法.收敛速度快于Traingd,可用于增量模式训练.Traingdx自适应学习速度算法.收敛速度快于Traingd,仅用于批量模式训练.

Trainnp强适应性BP算法.用于批量模式训练,收敛速度快,数据占用存储空间小.TraincgfFletcher-reeves变梯度算法.是一种数据占用存储空间最小的变梯度算法.

TraincgpPolak-Ribiere变梯度算法.存储空间略大于Traincgp,但对有些问题具有较快的收敛速度.

TraincgbPowell-beale变梯度算法.存储空间略大于Traincgp,具有较快的收敛速度.Trainscg固定变比的变梯度算法.是一种无需线性搜索的变梯度算法.

TrainbfgBFGS拟牛顿算法.数据存储量近似于Hessian矩阵,每个训练周期计算虽大,但收敛速度较快.

Trainoss变梯度法与拟牛顿法的折中算法.

TrainlmLevenberg-Marquardt算法.对中度规模的网络具有较快的收敛速度.Trainbr改进型L)M算法.可大大降低确定优化网络结构的难度.训练时直接调用上述的函数名,调用前为下列变量赋初始值:

net.trainParam.show)))每多少轮显示一次;net.trainParam.Lr)))学习速度;

net.trainParam.epochs)))最大训练轮回数;net.trainParam.goal)))目标函数误差.2.3 仿真函数及实例

利用仿真函数可对训练好的网络进行求值运算及应用.函数调用形式为: a=sim(net,p);

其中net为训练好的网络对象,p为输入向量或矩阵,a为网络输出.如果P为向量,则为单点仿真;P为矩阵,则为多点仿真.

作为应用示例利用上述的函数,可解决下述非线性单输入单输出系统的模型化问题.已知系统输入为:x(k)=sin(k*P/50)

系统输出为:y(k)=0.7sin(Px)+0.3sin(3Px)

假定采样点kI[0,50].采用含有一个隐层的三层BP网络建模,为了便于比较建立了两个模型.模型一的神经元为{1,7,1},模型二为{3,7,1},输入层和隐层传递函数均为TANSIG函数,输出层为线性函数.网络训练分别采用基本梯度下降法和变学习速度的梯度下降法.可编制如下的应用程序:

k=0:50;

x(k)=sin(k*pi/50);

y(k)=0.7*sin(pi*x)+0.3*sin(3*pi*x);

net=newff([0,1],[1,7,1],{-tansig.,.tansig.,.purelin.},.traingd.);%建立模型一,并采用基本梯度下降法训练.

net.trainParam.show=100;%100轮回显示一次结果

82湛江师范学院学报(自然科学) 第25卷

net.trainParam.Lr=0.05;%学习速度为0.05

net.trainParam.epochs=50000;%最大训练轮回为50000次net.trainParam.goal=1e-4;%均方误差为0.0001

net=train(net,x,y);%开始训练,其中x,y分别为输入输出样本y1=sim(net,x);%用训练好的模型进行仿真plot(x,y,x,y1);%绘制结果曲线

若采用模型二,仅需将程序第4句newff函数中的第二个参数改为[3,7,1].若采用变学习速度算法,仅需将该函数第4个参数改为.traingda.,加入:

net.trainparam.lr-inc=1.05%;训练速度增加系数.

一句即可.模型一用基本梯度下降法,训练次数要5万次以上,用变学习速度的梯度下降法,训练次数为4214次.模型二用基本梯度下降法,训练次数要5万次以上,用变学习速度的梯度下降法,训练次数6511次.(MATLAB6.0)

以上结果反映出BP网络经有效训练后可很好地逼近非线性函数.但其训练次数过多,训练时间长.

3 建立BP神经网络的注意事项

利用MATLAB软件提供的工具箱编制采用BP网络解决非线性问题程序是一种便捷、有效、省事的途径,但在使用时要解决好以下几个关键环节.3.1神经元结点数

网络的输入与输出结点数是由实际问题的本质决定的,与网络性能无关.网络训练前的一个关键步骤是确定隐层结点数L,隐层结点数的选择与其说具有科学性,不如说更具有技巧性,往往与输入数据中隐含的特征因素有关.L的选择至今仍得不到一个统一的规范.

L的初始值可先由以下两个公式中的其中之一来确定[3][4].

l=

m+n

(1)

或l=0143mn+0112n2+2154m+0177n+0135+0151(2)其中m、n分别为输入结点数目与输出结点数目.

隐层结点数可根据公式(1)或(2)得出一个初始值,然后利用逐步增长或逐步修剪法.所谓逐步增长是先从一个较简单的网络开始,若不符合要求则逐步增加隐层单元数到合适为止;逐步修剪则从一个较复杂的网络开始逐步删除隐层单元,具体实现已有不少文献讨论.3.2 传递函数的选择

工具箱提供了三种传递函数:Log-sigmoid、tan-sigmoid和线性函数.前两种为非线性函数,分别将xI(-],+])的输入压缩为yI[0,1]和yI[-1,+1]的输出.因此,对非线性问题,输入层和隐层多采用非线性传递函数,输出层采用线性函数,以保持输出的范围,就非线性传递函数而言,若样本输出均大于零时,多采用Log-sigmoid函数,否则,采用Tan-sigmoid函数.对线性系统而言,各层多采用线性函数.3.3 数据预处理和后期处理

如果对神经网络的输入和输出数据进行一定的预处理,可以加快网络的训练速度,MATLAB中提供的预处理方法有(1)归一化处理:将每组数据都变为-1至1之间数,所涉及的函数有premnmx、postmnmx、tramnmx;(2)标准化处理:将每组数据都化为均值为0,方差为1的一组数据,所涉及的函数有prestd、poststd、trastd;(3)主成分分析:进行正交处理,可减少输入数据的维数,所涉及的函数有prepca、trapca.(4)回归分析与相关性分析:所用函数为postrg,可得到回归系数与相

第3期 桂现才:BP神经网络在MATLAB上的实现与应用83

关系数,也可用[5]介绍的方法进行置信区间分析.

下面以归一化处理为例说明其用法,另外两种预处理方法的用法与此类似.对于输入矩阵p和输出矩阵t进行归一化处理的语句为:

[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);训练时应该用归一化之后的数据,即:net=train(net,pn,tn);

训练结束后还应对网络的输出an=sim(net,pn)作如下处理:a=postmnmx(an,mint,maxt);

当用训练好的网络对新数据pnew进行预测时,也应作相应的处理:pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);

anew=postmnmx(anew,mint,maxt);3.4 学习速度的选定

学习速度参数net.trainparam.lr不能选择的太大,否则会出现算法不收敛.也不能太小,会使训练过程时间太长.一般选择为0.01~0.1之间的值,再根据训练过程中梯度变化和均方误差变化值来确定.

3.5 对过拟合的处理

网络训练有时会产生/过拟合0,所谓/过拟合0就是训练集的误差被训练的非常小,而当把训练好的网络用于新的数据时却产生很大的误差的现象,也就是说此时网络适应新情况的泛化能力很差.提高网络泛化能力的方法是选择合适大小的网络结构,选择合适的网络结构是困难的,因为对于某一问题,事先很难判断多大的网络是合适的.为了提高泛化能力,可用修改性能函数和提前结束训练两类方法来实现,详见[6].参考文献:

[1] 张乃尧、阎平凡.神经网络与模糊控制[M].北京:清华大学出版社,1998.

[2] 刘增良、刘有才.模糊逻辑与神经网络)))理论研究与探索[M].北京:北京航空航天大学出版社,1996.[3] 徐庐生.微机神经网络[M].北京:中国医药科技出版社,1995.

[4] 高大启.有教师的线性基本函数前向三层神经网络结构研究[J].计算机学报,1998,21(1):80-85

[5] 陈小前,罗世彬,王振国,等1BP神经网络应用中的前后处理过程研究[J].系统工程理论与实践,2002,22(1):65-70.[6] 闵惜琳、刘国华.用MATLAB神经网络工具箱开发BP网络应用[J].计算机应用,2001,21(8):163-1.[7] 飞思科技产品研发中心.MATLAB6.5辅助神经网络分析与设计[M].北京:电子工业出版社,2003.

RealizationofBPNetworksandTheirApplicationsonMATLAB

GUIXian-cai

(MathematicsandComputationalScienceSchool,ZhanjiangNormalCollege,Zhanjiang,Guangdong524048,China)

Abstract:BPNeuralNetworksarewidelyappliedinnonlinearmodeling,functionapproach,andpat2ternrecognition.ThispaperintroducesthefundmentalofBPNeuralNetworks.Nnboxcanbeeasilyusedtocreate,trainandsimulateanetwork,whilesomeexamplesandexplanationsaregiven.

Keywords:ArtificialNeuralNetworks;BPNetworks;Nnbox;MATLAB

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务