1、人工神经网络是一种模仿人脑结构及其功能的信息处理系统,能提高人们对信息处理的智能化水平。它是一门新兴的边缘和交叉学科,它在理论、模型、算法等方面比起以前有了较大的发展,但至今无根本性的突破,还有很多空白点需要努力探索和研究。1 人工神经网络研究背景神经网络的研究包括神经网络基本理论、网络学习算法、网络模型以及网络应用等方面。其中比较热门的一个课题就是神经网络学习算法的研究。近年来己研究出许多与神经网络模型相对应的神经网络学习算法,这些算法大致可以分为三类:有监督学习、无监督学习和增强学习。在理论上和实际应用中都比较成熟的算法有以下三种: (1) 误差反向传播算法 (Back Propagati
2、on,简称 BP 算法); (2) 模拟退火算法;(3) 竞争学习算法。目前为止,在训练多层前向神经网络的算法中,BP 算法是最有影响的算法之一。但这种算法存在不少缺点,诸如收敛速度比较慢,或者只求得了局部极小点等等。因此,近年来,国外许多专家对网络算法进行深入研究,提出了许多改进的方法。主要有: (1) 增加动量法:在网络权值的调整公式中增加一动量项,该动量项对某一时刻的调整起阻尼作用。它可以在误差曲面出现骤然起伏时,减小振荡的趋势,提高网络训练速度;(2) 自适应调节学习率:在训练中自适应地改变学习率,使其该大时增大,该小时减小。使用动态学习率,从而加快算法的收敛速度; (3) 引入陡度因
3、子:为了提高 BP 算法的收敛速度,在权值调整进入误差曲面的平坦区时,引入陡度因子,设法压缩神经元的净输入,使权值调整脱离平坦区。 此外,很多国内的学者也做了不少有关网络算法改进方面的研究,并把改进的算法运用到实际中,取得了一定的成果: (1) 王晓敏等提出了 一种基于改进的差分进化算法,利用差分进化算法的全局寻优能力,能够快速地得到 BP 神经网络的权值,提高算法的速度;(2) 董国君等提出了一种基于随机退火机制的竞争层神经网络学习算法,该算法将竞争层神经网络的串行迭代模式改为随机优化模式,通过采用退火技术避免网络收敛到能量函数的局部极小点,从而得到全局最优值; (3) 赵青提出一种分层遗传
4、算法与 BP 算法相结合的前馈神经网络学习算法。将分层遗传算法引入到前馈神经网络权值和阈值的早期训练中,再用 BP 算法对前期训练所得性能较优的网络权值、阈值进行二次训练得到最终结果,该混合学习算法能够较快地收敛到全局最优解; (4) 胡洁等提出一种快速且全局收敛的神经网络学习算法,并且对该优化算法的全局收敛性进行分析和详细证明,说明提出的算法比标准的算法效率更高且更精确。尽管国内外的很多学者对 BP 算法进行了改进,但这些算法只有在某些特定要求下才有效,并且对网络训练时要加强对网络的监控,网络的结构和参数是要通过多次的试验才能确定,这些都导致了网络训练时间的增加,降低了网络收敛速度。因此,还
5、需要进一步研究神经网络学习算法,提高网络收敛速度,使网络能够更好地应用于实际。2 神经网络基础2.1 人工神经网络概念2.1.1 生物神经元模型生物神经系统是一个有高度组织和相互作用的数量巨大的细胞组织群体。人类大脑的神经细胞大约有 1010 一 10, 个。神经细胞也称神经元,是神经系统的基本单元,它们按不同的结合方式构成了复杂的神经网络。通过神经元及其连接的可塑性,使得大脑具有学习、记忆和认知等各种智能。人工神经网络的研究出发点是以生物神经元学说为基础的。生物神经元学说认为,神经细胞即神经元是神经系统中独立的营养和功能单元。其独立性是指每一个神经元均有自己的核和自己的分界线或原生质膜。生物
6、神经系统包括中枢神经系统和大脑,均是由各类神经元组成。生物神经元之间的相互连接让信息传递的部位称为突触(SynaPse)。突触按其传递信息的不同机制,可分为化学突触和电突触,其中化学突触占大多数,其神经冲动传递借助于化学递质的作用。神经元是基本的信息处理单元。它主要由树突、轴突和突触组成。其结构大致描述如图 1 所示。图 1 生物神经元结构2.1.2 神经网络模型目前人们提出的神经元模型己有很多,其中提出最早且影响最大的是 1943 年心理学家McCulloch 和科学家 W.PittS 在分析总结神经元基本特性的基础上首先提出的 M 一 P 模型,如图 2 所示,它是大多数神经网络模型的基础
7、。图 2 模型Wji代表神经元 i 与神经元 j 之间的连接强度(模拟生物神经元之间突触连接强度 ),称之为连接权;Ui代表神经元 i 的活跃值,即神经元状态;Vi代表神经元 j 的输出,即是神经元 i 的一个输入;j 代表神经元的阀值。函数 f 表达了神经元的输入输出特性。在 M-P 模型中,f 定义为阶跳函数:=()= 1, 00, 02.1.3 神经网络结构神经网络的网络结构可以归为以下几类:l)前馈式网络: 该网络结构是分层排列的,每一层的神经元输出只与下一层神经元连接。2)输出反馈的前馈式网络: 该网络结构与前馈式网络的不同之处在于这种网络存在着一个从输出层到输入层的反馈回路。3)前
8、馈式内层互连网络: 该网络结构中,同一层之间存在着相互关联,神经元之间有相互的制约关系,但从层与层之间的关系来看仍然是前馈式的网络结构,许多自组织神经网络大多具有这种结构。4)反馈型全互连网络: 在该网络中,每个神经元的输出都和其他神经元相连,从而形成了动态的反馈关系,该网络结构具有关于能量函数的自寻优能力。5)反馈型局部互连网络: 该网络中,每个神经元只和其周围若干层的神经元发生互连关系,形成局部反馈,从整体上看是一种网状结构。2.1.4 神经网络的学习神经网络的学习也称为训练,指的是通过神经网络所在环境的刺激作用调整神经网络的自由参数,使神经网络以一种新的方式对外部环境做出反应的一个过程。
9、能够从环境中学习和在学习中提高自身性能是神经网络的最有意义的性质。神经网络经过反复学习对其环境更为了解。学习算法是指针对学习问题的明确规则集合。学习类型是由参数变化发生的形式决定的,不同的学习算法对神经元的突触权值调整的表达式有所不同。2.2 BP 神经网络2.2.1 Bp 神经网络的定义、特点及应用采用误差反向传播算法 (Bp:ErrorBack 一 propagationAlgorithm)的多层前馈人工神经网络(或称多层感知器,MLP :Multiuyerperceptron)称为 Bp 神经网络或 BP 神经网络模型。BP神经网络具有明显的特点:l)分布式的信息存储方式神经网络是以各个
10、处理器本身的状态和它们之间的连接形式存储信息的,一个信息不是存储在一个地方,而是按内容分布在整个网络上。网络上某一处不是只存储一个外部信息,而是存储了多个信息的部分内容。整个网络对多个信息加工后才存储到网络各处,因此,它是一种分布式存储方式。2)大规模并行处理BP 神经网络信息的存储与处理(计算) 是合二为一的,即信息的存储体现在神经元互连的分布上,并以大规模并行分布方式处理为主,比串行离散符号处理的现代数字计算机优越。3)自学习和自适应性BP 神经网络各层直接的连接权值具有一定的可调性,网络可以通过训练和学习来确定网络的权值,呈现出很强的对环境的自适应和对外界事物的自学习能力。4)较强的鲁棒
11、性和容错性BP 神经网络分布式的信息存储方式,使其具有较强的容错性和联想记忆功能,这样如果某一部分的信息丢失或损坏,网络仍能恢复出原来完整的信息,系统仍能运行。2.2.2 BP 神经网络结构BP 神经网络通常由输入层、隐含层和输出层组成,层与层之间全互连,每层节点之间不相连。它的输入层节点的个数通常取输入向量的维数,输出层节点的个数通常取输出向量的维数,隐层节点个数目前尚无确定的标准,需通过反复试凑的方法,然后得到最终结果。根据 Kolmogor。 、定瑾,具有一个隐层 (隐层节点足够多) 的三层 BP 神经网络能在闭集上以任意精度逼近任意非线性连续函数。BP 网络是一种多层前馈神经网络, 由
12、输入层、隐层和输出层组成。 层与层之间采用全互连方式, 同一层之间不存在相互连接 , 隐层可以有一个或多个。 构造一个 BP 网络需要确定其处理单元 神经元的特性和网络的拓扑结构。神经元是神经网络最基本的处理单元, 隐层中的神经元采用 S 型变换函数, 输出层的神经元可采用 S 型或线性型变换函数。图 1 为一个典型的三层 BP 网络的拓扑结构。神经网络学习采用改进 BP 算法, 学习过程由前向计算过程和误差反向传播过程组成。在前向计算过程中, 输入信息从输入层经隐层逐层计算 , 并传向输出层, 每层神经元的状态只影响下一层神经元的状态。 如输出层不能得到期望的输出, 则转入误差反向传播过程,
13、 误差信号沿原来的连接通路返回, 通过修改各层的神经元的权值, 使得网络系统误差最小。 最终网络的实际输出与各自所对应的期望输出逼近。3 MATLAB6.1 神经网络工具箱及其相关函数简介BP 神经网络设计时 , 需要确定网络的拓扑结构(隐层的层数及各层的神经元的数目) 及其神经元的变换函数,网络的初始化, 误差计算, 学习规则及网络训练 , 训练参数及训练样本的归一化处理等方面的工作, 在 MATLAB6.1 神经网络工具箱中 , 有对应的函数完成所涉及到的全部计算任务。3.1 设计 BP 网络的相关函数1)神经元变换函数: 线性变换函数 purelin、对数 S 型变换函数 logsin、
14、双曲线正切 S 型变换函数 tansig。2)BP 网络生成函数 newff:它是用来生成 BP 神经网络并进行初始化 , 可以确定网络层数 、每层中的神经元数和变换函数。 这个函数有六个输入参数, 分别是:输入向量的范围、网络结构、各层变换函数、训练算法函数、学习函数和性能函数。输出参数为所生成的 BP 神经网络名 net。 其语法为 :net=newff(PR, S1, S2, SN1 , TF1, TF2, TFN1 , BTF, BLF,PF)其中:PR 是一个由每个输入向量的最大最小值构成的 Rx2 矩阵, R 为输入神经元数目。Si 是第 i 层网络的神经元个数, 网络共有 N1
15、层。TFi 是第 i 层网络神经元的变换函数, 缺省为 tansig.BTF 是 BP 训练算法函数, 缺省为 trainlm.BLF 是学习函数, 缺省为 learngdm.PF 是性能函数, 缺省为 mse.newff 在确定网络结构后会自动调用初始化函数 init, 用缺省参数来初始化网络中各个权值和阈值 , 产生一个可训练的前馈网络, 即该函数的返回值 net。 在 MATLAB 中, 神经网络 net 当做对象 (object)处理, 其属性用结构来定义。3)初始化函数 init:它是对网络的连接权值和阈值进行初始化。 newff 在创建网络对象的同时, 自动调动初始化函数, 根据缺
16、省的参数对网络进行连接权值和阈值初始化。4)学习函数:提供多种学习函数 , 用来修正权值和阈值。基本的学习函数有:learngd、learngdm。5)性能函数:它是用来计算网络的输出误差 。 为训练提供判据, 包括:函数 mae, 计算网络的平均绝对误差; 函数 mse, 计算网络的均方误差;函数 msereg, 计算均方误差和权/ 阈值的加权;函数 sse, 计算网络的均方误差和。6)训练函数 train:BP 网络的训练初始化后, 可对它进行训练。 在 MATLAB 中训练网络有两类模式:逐变模式和批处理模式。在逐变模式中, 每输入一个学习样本就根据网络性能指标函数对连接权值和阈值更新一
17、次。在批处理模式中, 所有的学习样本都学习完成后, 连接权值和阈值才被更新一次。 使用批处理模式不需要为每一层的连接权值和阈值设定训练函数, 而只需为整个网络指定一个训练函数, 使用起来相对方便, 而且许多改进的快速训练算法只能采用批处理模式。训练网络的函数是 train 按设置的 net.trainFcn 和 net.trainParam 参数来训练网络, 采用批处理方式进行网络的权值和阈值修正, 最终达到设定的网络性能指标的要求。7)BP 训练算法函数:它是根据网络的输入、目标期望输出, 对由函数 newff 生成的 BP 网络进行计算, 修正其权值和阈值, 最终达到设定的网络性能指标的要
18、求。 不同的训练算法函数对应不同的训练算法, 如 traingd 对应最基本梯度下降法;traingdm 带有动量项的梯度下降法;traingdx 带有采用动量项的自适应算 法 ;用共轭梯度 法进行训练 的函数有:traincgf(采用 Fletcher -Reeves 搜索技术 )、traincgp(采用 Polak-Ribiers 搜索技术) 、traincgb(采用 Powell-Beale 搜索技术);trainbfg 是基于拟牛顿法的训练函数;trainlm 是用 Levenberg -Marquardt 数值优化法来实现误差反传算法的。 各算法的快慢及内存要求依问题的复杂程度、训练
19、集大小、网络的大小及误差要求的不同而有所不同。 一般来讲, 对于含有几百个权重的网络 , Levenberg -Marquardt 算法有最快的收敛速度。该算法需要大的内存, 可通过增大参数 mem-reduc 的值来减少内存的使用量。 需要注意的是:减少内存使用量实际是通过将雅可比矩阵分解为一个个小的亚矩阵来实现的, 每次只计算其中一个亚矩阵 , 这势必增加计算时间, 所以, 如果有足够的内存, 应该将 mem-reduc 参数设为 1, 即每次都计算整个雅可比矩阵。 拟牛顿算法的速度仅次于 Levenberg -Marquardt 算法而比共轭梯度法的速度快, 内存的需要量也介于这二者之间
20、。 在共轭梯度法中, traincgb 需要的内存数量最多, 但通常也能最快收敛。总地来讲, 基于共轭梯度法、拟牛顿算法和 Levenberg-Marquardt 法等数值优化算法的训练函数的效率比基于启发式算法的 traingd、traingdm 、traingdx 的效率高。 以上的训练算法函数均在网络生成函数 newff 中预先设置。8)仿真函数 sim:可以用来计算网络在给定输入下的输出。9)绘图函数 poltperf:可以用来计算网络性能曲线。3. 2 数据预处理如果对神经网络的输入和输出数据进行一定的预处理,可以加快网络的训练速度。MATLAB 提供的预处理方法有: 归一化处理(
21、将每组数据都变为-1 至 1 之间数, 所涉及的函数有 premnmx、 postmnmx、tramnmx)、标准化处理(将每组数据都为均值为 0, 方差为 1 的一组数据, 所涉及的函数有 prestd、poststd、trastd)和主成分分析(进行正交处理, 减少输入数据的维数, 所涉及的函数有 prepca、trapca)。下面以归一化处理为例说明其用法 , 对于输入矩阵 p 和输出矩阵 t 进行归一化处理的语句为: pn, minp, maxp, tn,mint, maxt = premnmx(p, t);训练时应该用归一化之后的数据, 即:net= train(net, pn, t
22、n);训练结束后还应对网络的输出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. 3 训练数据的导入方法要对 BP 网络进行训练, 必须准备训练样本。 对样本数据的获取, 有以下几种方法供选择, 具体采用那种方法, 取决于数据的多少, 数据文件的格式等。用元素列表方式直接输入数据。创建数据文件, 通过 M
23、ATLAB 提供的装载数据函数, 从数据文件中读取。函数 load 适合从 MAT 文件、ASCII 文件中 读取数据;MATLABI/O 函数适合从其它应用中的数据文件中读取数据;还可以通过数据输入向导(Import Wizard)从文件或剪贴板中读取数据 , 单击 File 菜单下的“ Import Data.”将出现“ImportWizard”窗口, 通过该窗口进行设置 , 该方法不适合从 M 文件中读取数据。4 BP 神经网络的 MATLAB 实现4.1 网络设计步骤在进行 BP 神经网络设计时, 需要考虑以下问题:网络的拓扑结构(隐层的层数及各层的神经元的数目); 神经元的变换函数选
24、取;网络的初始化(连接权值和阈值的初始化);训练参数设置; 训练样本的归一化处理;样本数据导入方式等。根据以上分析可知, 对于网络的实现有四个基本的步骤:网络建立 :通过函数 newff 实现, 它根据样本数据自动确定输入层 、输出层的神经 1元数目; 隐层神经元数目以及隐层的层数、隐层和输出层的变换函数、训练算法函数需由用户确定。初始化 ;通过函数 init 实现, 当 newff 在创建网络对象的同时 , 自动调动初始化函 2数 init, 根据缺省的参数对网络进行连接权值和阈值初始化。网络训练:通过函数 train 实现, 它根据样本的输入矢量 P、目标矢量 T;和预先已设 3置好的训练
25、函数的参数;对网络进行训练。网络仿真:通过函数 sim 实现 , 它根据已训练好的网络 , 对测试数据进行仿真计算。 44.2 设计实例利用 BP 神经网络来完成非线性函数的逼近任务样本数据如下:输入 X 输出 D 输入 X 输出 D 输入 X 输出 D0 0 4 4 8 21 1 5 3 9 32 2 6 2 10 43 3 7 1看到期望输出的范围超出,输出层神经元函数利用线性函数作为转移函数。程序如下:clear;clc;X=-1:0.1:1;D=-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609.0.1336 -0.2013 -0.4
26、344 -0.5000 -0.3930 -0.1647 -.0988.0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201;figure;plot(X,D,*); %绘制原始数据分布图(图 3)net = newff(-1 1,5 1,tansig,tansig);net.trainParam.epochs = 100; %训练的最大次数net.trainParam.goal = 0.005; %全局最小误差net = train(net,X,D);O = sim(net,X);figure;plot(X,D,*,X,O); %绘制最后得到的结果和误差曲线V = net.iw1,1%输入层到中间层权值theta1 = net.b1%中间层各神经元阀值W = net.lw2,1%中间层到输出层权值theta2 = net.b2%神经元各神经元阀值运行结果如下:图 3 原始数据分布图图 4 训练结果