BP神经网络用MATLAB逼近非线性函数及其泛化能力的分析.
- 格式:ppt
- 大小:300.50 KB
- 文档页数:37
应用BP 神经网络逼近非线性函一、实验要求1、逼近的非线性函数选取为y=sin(x 1)+cos(x 2) ,其中有两个自变量即x1,x2,一个因变量即y。
2、逼近误差<5% ,即:应用测试数据对网络进行测试时,神经网络的输出与期望值的最大误差的绝对值小于期望值的5% 。
3、学习方法为经典的BP 算法或改进形式的BP 算法,鼓励采用改进形式的BP 算法。
4、不允许采用matlab 中现有的关于神经网络建立、学习、仿真的任何函数及命令。
二、实验基本原理2.1神经网络概述BP 神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传播,误差反向传播。
在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层。
每一层的神经元状态只影响下一层神经元状态。
如果输出层得不到期望输出,则转入反向传播,根据预判误差调整网络权值和阈值,从而使BP 神经网络预测输出不断逼近期望输出。
BP 神经网络的拓扑结构如图所示。
2.2BP 神经网络训练步骤BP 神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。
BP 神经网络的训练过程包括以下几个步骤。
步骤 1 :网络初始化。
根据系统输入输出序列(X,Y) 确定网络输入层节点数n 、隐含层节点数l、输出层节点数m ,初始化输入层、隐含层和输出层神经元之间的连接权值ωij,ωjk ,初始化隐含层阈值a,输出层阈值 b ,给定学习速率和神经元激励函数。
步骤 2 :隐含层输出计算。
根据输入变量X,输入层和隐含层间连接权值ω ij 以及隐含层阈值a,计算隐含层输出H 。
2.3 附加动量法经典 BP 神经网络采用梯度修正法作为权值和阈值的学习算法, 从网络预测误差的负梯 度方向修正权值和阈值, 没有考虑以前经验的积累,学习过程收敛缓慢。
对于这个问题,可 以采用附加动量法来解决,带附加动量的算法学习公式为(k) (k 1) (k) a (k 1) (k 2)式中,ω (k),ω(k-1) ,ω(k-2)分别为 k ,k-1,k-2 时刻的权值; a 为动量学习率,一般取值 为 0.95 。
3、 试用BP 神经网络逼近非线性函数f(u) =)5.0u (9.1e+-sin(10u) 其中,u ∈[-0.5,0.5](1)解题步骤:①网络建立:使用“net=newff(minmax(x), [20, 1], {'tansig ’,’ purelin' });,语句建立个前馈BP 神经网络。
该BP 神经网络只含个隐含层,且神经元的个数为20。
隐含层和输出层神经元的传递函数分别为tansig 和pure-lin 。
其他参数默认。
②网络训练:使用“net=train (net, x , y) ;”语句训练建立好的BP 神经网络。
当然在网络训练之前必须设置好训练参数。
如设定训练时间为50个单位时间,训练目标的误差小于0.01,用“net.trainParam.epochs=50; net.train-Param.goal=0.01;”,语句实现。
其他参数默认。
③网络仿真:使用“y1=sim(net, x); y2=sim(net, x};”语句仿真训练前后的BP 神经网络。
(2)程序如下:clear all ;x=[-0.5:0.01:0.5];y=exp(-1.9*(0.5+x)).*sin(10*x);net=newff(minmax(x),[20,1],{'tansig' 'purelin'});y1=sim(net,x); %未训练网络的仿真结果 net.trainParam.epochs=50;net.trainParam.goal=0.01;net=train(net,x,y);y2=sim(net,x); %训练后网络的仿真结果 figure;plot(x,y,'-',x,y1,'-',x,y2,'--')title('原函数与网络训练前后的仿真结果比较');xlabel('x');ylabel('y');legend('y','y1','y2');grid on(3)仿真结果如图:图1图1为原函数y与网络训练前后(y1,y2)的仿真结果比较图。
控制系统仿真与模型处理设计报告(采用BP神经网络完成非线性函数的逼近)1、题目要求:(1)确定一种神经网络、网络结构参数和学习算法。
(2)选择适当的训练样本和检验样本,给出选取方法。
(3)训练网络使学习目标误差函数达到0.01,写出学习结束后的网络各参数,并绘制学习之前、第100次学习和学习结束后各期望输出曲线、实际输出曲线。
绘制网络训练过程的目标误差函数曲线。
(4)验证网络的泛化能力,给出网络的泛化误差。
绘制网络检验样本的期望输出曲线和网络输出曲线。
(5)分别改变神经网络的中间节点个数、改变网络的层数、改变学习算法进行比较实验,讨论系统的逼近情况,给出你自己的结论和看法。
2、设计方案:在MATLAB中建立M文件下输入如下命令:x=[0:0.01:1];y=2.2*power(x-0.25,2)+sin(5*pi*x);plot(x,y)xlabel('x');ylabel('y');title('非线性函数');得到如下图形,即所给的非线性函数曲线图:构造一个1-7-1的BP神经网络,第一层为输入层,节点个数为1;第二层为隐层,节点个数为7;变换函数选正切s型函数(tansig);第三层为输出层,节点个数为1,输出层神经元传递函数为purelin函数。
并且选Levenberg-Marquardt算法(trainlm)为BP网络的学习算法。
对于该初始网络,我们选用sim()函数观察网络输出。
继续在M函数中如下输入。
net=newff(minmax(x),[1,7,1],{'tansig','tansig','purelin'},'trainlm'); y1=sim(net,x);figure;plot(x,y,'b',x,y1,'r')title('期望输出与实际输出比较');xlabel('t');则得到以下所示训练的BP网络期望输出与实际输出曲线比较:应用函数train()对网络进行训练之前,需要预先设置训练参数。
基于Matlab 实现函数逼近曾德惠(湖北民族学院理学院 湖北恩施 445000)摘 要:为满足工程应用中对数据处理的需要,讨论基于Mat lab 实现函数逼近的三种方法:插值、拟合和神经网络逼近。
在介绍基本原理的基础上,利用Matlab 的插值和拟合函数,结合实例对分段线性插值、Her mite 、三次样条插值及最小二乘曲线拟合法的Matlab 实现方法进行研究。
设计非线性函数逼近的BP 神经网络,通过网络训练、仿真达到了预期的效果。
所有结果表明,采用不同的逼近方法,利用Mat lab 编程可以简单、有效地实现函数逼近。
关键词:Mat lab;函数逼近;插值;拟合;神经网络中图分类号:T P391.9;O241 文献标识码:A 文章编号:10042373X(2009)182141203Realization of Function Approximation Based on MatlabZENG Dehui(School of S cience ,H ubei Instit ut e for Nat i onalit i es,Enshi,445000,China )A bstra ct :Thr ee means to r ea lize function appr oach such as the inter polation approach,f itting approach as well as the neu 2r al networ k approach ar e discussed based on Matlab t o meet the demand of data processing in engineering application.Based on basic principle of the introduction,realization methods to piecewise linea r inter polation,H ermite interpolation,cubic spline in 2ter polat ion and least squares cur ve fitting method are r esear ched using inter polation funct ion and fitting function in Matlab with example.BP neural network to proximate nonlinear functions is designed,desired efect is achieved through the tr aining and simulation of net work.All r esults indicate that different methods ar e adopted according to specific problems,and function approach is realized simply and effectively in Matlab.Keywords :Matlab;function approximat ion;inter polation;fitting;neura l network收稿日期:20092032030 引 言在工程分析和科学研究中,常需要根据一些测试数据求得自变量和因变量的近似函数关系式,来完成其他设计计算。
BP神经网络实验详解(MATLAB实现)BP(Back Propagation)神经网络是一种常用的人工神经网络结构,用于解决分类和回归问题。
在本文中,将详细介绍如何使用MATLAB实现BP神经网络的实验。
首先,需要准备一个数据集来训练和测试BP神经网络。
数据集可以是一个CSV文件,每一行代表一个样本,每一列代表一个特征。
一般来说,数据集应该被分成训练集和测试集,用于训练和测试模型的性能。
在MATLAB中,可以使用`csvread`函数来读取CSV文件,并将数据集划分为输入和输出。
假设数据集的前几列是输入特征,最后一列是输出。
可以使用以下代码来实现:```matlabdata = csvread('dataset.csv');input = data(:, 1:end-1);output = data(:, end);```然后,需要创建一个BP神经网络模型。
可以使用MATLAB的`patternnet`函数来创建一个全连接的神经网络模型。
该函数的输入参数为每个隐藏层的神经元数量。
下面的代码创建了一个具有10个隐藏神经元的单隐藏层BP神经网络:```matlabhidden_neurons = 10;net = patternnet(hidden_neurons);```接下来,需要对BP神经网络进行训练。
可以使用`train`函数来训练模型。
该函数的输入参数包括训练集的输入和输出,以及其他可选参数,如最大训练次数和停止条件。
下面的代码展示了如何使用`train`函数来训练模型:```matlabnet = train(net, input_train, output_train);```训练完成后,可以使用训练好的BP神经网络进行预测。
可以使用`net`模型的`sim`函数来进行预测。
下面的代码展示了如何使用`sim`函数预测测试集的输出:```matlaboutput_pred = sim(net, input_test);```最后,可以使用各种性能指标来评估预测的准确性。
利⽤BP 神经⽹络求解⾮线性⽅程组利⽤BP 神经⽹络求解⾮线性⽅程组待求解问题:思路我们将坐标对应的函数值作为输⼊向量,⽽将坐标作为⽬标向量,去初值点附近多个坐标对应的函数值向量作为输⼊,训练神经⽹络。
将作为输⼊输⼊到训练好的神经⽹络中,就可以得到该线性⽅程组的⼀个近似解matlab 代码function u=u(x)u = 3*x(1)-cos(x(2)*x(3))-0.5;function v=v(x)v = x(1)^2 -81 * (x(2)+0.1)^2+sin(x(3))+1.06;function w=w(x)w = exp(-x(1)*x(2))+20*x(3)+(10*pi - 3) / 3;主程序(x ,x ,x )123[u (x ,x ,x ),v (x ,x ,x ),w (x ,x ,x )]123123123(x ,x ,x )123x 0[0,0,0]x ,x ,x 1∗2∗3∗u (x ,x ,x )123v (x ,x ,x )123w (x ,x ,x )123% ----------------------------------% 使⽤神经⽹络求解⾮线性⽅程组% 以坐标(x,y,z)为⽬标向量% 坐标(x,y,z)对应的各个⾮线性函数的值(u(x,y,z), v(x,y,z), w(x,y,z))为输⼊向量% 训练⽹络后,输⼊(0,0,0)对应的输出即⾮线性⽅程组的⼀个近似解% -----------------------------------x0 = [0.1 0.1 -0.1]; %初值x = ones(200,3); % 根据初值得到200个点for i = 1:200x(i,:) = x0 + (i - 100) * 0.01;endP = zeros(3,200); % 输⼊样本矩阵,每列为⼀个样本for i = 1:200P(:,i) = [u(x(i,:)) v(x(i,:)) w(x(i,:))];endT = x'; % ⽬标矩阵,每列为⼀个⽬标向量net = newff([-100,100; -100,100; -100,100;],[3 3],{'tansig','logsig'},'traingd'); % 输⼊3,输出3(注意⽹络输⼊与⽬标向量的维数对应) net.trainParam.epochs = 15000; % 迭代15000次net.trainParam.goal = 0.01; % 误差LP.lr = 0.1; % 学习率% 训练⽹络net = train(net, P, T);% 给出⾮线性⽅程的近似解res = sim(net, [0;0;0])求解结果为:此时,解和真实解还是有误差,可以调整输⼊样本来得到更好的近似解。
p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络=net newff PR S S SNl TF TF TFNl BTF BLF PF(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。
S S SNl:各层的神经元个数。
[ 1 2...]{ 1 2...}TF TF TFNl:各层的神经元传递函数。
BTF:训练用函数的名称。
(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV(3)网络仿真=[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T{'tansig','purelin'},'trainrp'2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
MATLAB 实例:BP 神经⽹络⽤于回归任务MATLAB 实例:BP 神经⽹络⽤于回归(⾮线性拟合)任务作者:凯鲁嘎吉 - 博客园问题描述给定多元(多维)数据X ,有真实结果Y ,对这些数据进⾏拟合(回归),得到拟合函数的参数,进⽽得到拟合函数,现在进来⼀些新样本,对这些新样本进⾏预测出相应地Y 值。
通常的最⼩⼆乘法进⾏线性拟合并不适⽤于所有数据,对于⼤多数数据⽽⾔,他们的拟合函数是⾮线性的,⼈为构造拟合函数相当困难,没有⼀定的经验积累很难完美的构造出符合条件的拟合函数。
因此神经⽹络在这⾥被应⽤来做回归(拟合)任务,进⼀步⽤来预测。
神经⽹络是很强⼤的拟合⼯具,虽然数学可解释性差,但拟合效果好,因⽽得到⼴泛应⽤。
BP 神经⽹络是最基础的⽹络结构,输⼊层,隐层,输出层,三层结构。
如下图所⽰。
整体的⽬标函数就是均⽅误差L =||f (X )−Y ||22其中(激活函数可以⾃⾏设定)f (X )=purelin W 2⋅tan sig (W 1⋅X +b 1)+b 2N : 输⼊数据的个数D : 输⼊数据的维度D 1: 隐层节点的个数X : 输⼊数据(D *N )Y : 真实输出(1*N )W 1: 输⼊层到隐层的权值(D 1*D )b 1: 隐层的偏置(D 1*1)W 2: 输⼊层到隐层的权值(1*D 1)b 2: 隐层的偏置(1*1)通过给定训练数据与训练标签来训练⽹络的权值与偏置,进⼀步得到拟合函数f (X )。
这样,来了新数据后,直接将新数据X 代⼊函数f (X ),即可得到预测的结果。
y = tansig(x) = 2/(1+exp(-2*x))-1;y = purelin(x) = x ;()MATLAB程序⽤到的数据为UCI数据库的housing数据:输⼊数据,最后⼀列是真实的输出结果,将数据打乱顺序,95%的作为训练集,剩下的作为测试集。
这⾥隐层节点数为20。
BP_kailugaji.mfunction errorsum=BP_kailugaji(data_load, NodeNum, ratio)% Author:凯鲁嘎吉 https:///kailugaji/% Input:% data_load: 最后⼀列真实输出结果% NodeNum: 隐层节点个数% ratio: 训练集占总体样本的⽐率[Num, ~]=size(data_load);data=data_load(:, 1:end-1);real_label=data_load(:, end);k=rand(1,Num);[~,n]=sort(k);kk=floor(Num*ratio);%找出训练数据和预测数据input_train=data(n(1:kk),:)';output_train=real_label(n(1:kk))';input_test=data(n(kk+1:Num),:)';output_test=real_label(n(kk+1:Num))';%选连样本输⼊输出数据归⼀化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);%% BP⽹络训练% %初始化⽹络结构net=newff(inputn, outputn, NodeNum);net.trainParam.epochs=100; % 最⼤迭代次数net.trainParam.lr=0.01; % 步长net.trainParam.goal=1e-5; % 迭代终⽌条件% net.divideFcn = '';%⽹络训练net=train(net,inputn,outputn);W1=net.iw{1, 1};b1=net.b{1};W2=net.lw{2, 1};b2=net.b{2};fun1=yers{1}.transferFcn;fun2=yers{2}.transferFcn;%% BP⽹络预测%预测数据归⼀化inputn_test=mapminmax('apply',input_test,inputps);%⽹络预测输出an=sim(net,inputn_test);%⽹络输出反归⼀化BPoutput=mapminmax('reverse',an,outputps);%% 结果分析figure(1)plot(BPoutput,'-.or')hold onplot(output_test,'-*b');legend('预测输出','期望输出')xlim([1 (Num-kk)]);title('BP⽹络预测输出','fontsize',12)ylabel('函数输出','fontsize',12)xlabel('样本','fontsize',12)saveas(gcf,sprintf('BP⽹络预测输出.jpg'),'bmp');%预测误差error=BPoutput-output_test;errorsum=sum(mse(error));% 保留参数save BP_parameter W1 b1 W2 b2 fun1 fun2 net inputps outputpsdemo.mclear;clc;close alldata_load=dlmread('housing.data');NodeNum=20;ratio=0.95;errorsum=BP_kailugaji(data_load, NodeNum, ratio);fprintf('测试集总体均⽅误差为:%f\n', errorsum);%%% 验证原来的或者预测新的数据num=1; % 验证第num⾏数据load('BP_parameter.mat');data=data_load(:, 1:end-1);real_label=data_load(:, end);X=data(num, :);X=X';Y=real_label(num, :);%% BP⽹络预测%预测数据归⼀化X=mapminmax('apply',X,inputps);%⽹络预测输出Y_pre=sim(net,X);%⽹络输出反归⼀化Y_pre=mapminmax('reverse',Y_pre,outputps);error=Y_pre-Y';errorsum=sum(mse(error));fprintf('第%d⾏数据的均⽅误差为:%f\n', num, errorsum);结果测试集总体均⽅误差为:5.184424第1⾏数据的均⽅误差为:3.258243注意:隐层节点个数,激活函数,迭代终⽌条件等等参数需要根据具体数据进⾏调整。
1、基于BP网络的分类(1)问题的提出:在平直直角坐标系A 区域中 = x,y :x∈−4 ,0 ,y∈−4 ,0随机生成1000个点,令B 区域中的点为一类:B= x,y :x∈(−2.5 ,1) ,y∈(−2.5 ,1)A 区域的其他点为一类,现在利用BP神经网络学习这个分类,并用测试集C 中的点C= x k,y k: x k=−4+0.05k ,y k=−4+0.05k ,k=0,1,…,80测试C 中位于B 区域中的点能否被识别。
(2)网络的结构:net=newff([-4 0;-4 0],[n 2],{'logsig' 'logsig'},'trainlm','learngdm');(3)网络训练(采用不同的隐单元个数,使用常数及自适应学习率,加动量项,数值优化算法)采用不同的隐单元个数:隐层节点个数为n,本次实验取n=8和n=14并对其进行比较。
使用常数及自适应学习率:常数:net.trainParam.lr=0.1。
自适应学习率:'trainlm' 这个位置替换为'traingda' (在分类中并不能换)加动量项:'trainlm' 这个位置替换为'traingdm'(在分类中并不能换)数值优化算法:'trainlm' 这个位置替换为'traingdx'(在分类中并不能换)(4)网络测试与结果分析:①条件:隐层节点个数n=8 + 学习率常数net.trainParam.lr=0.1 + 梯度下降训练'trainglm'clear all;clc%给定训练点及目标值x=(rand(1,1000)*(-0.4))*10;y=(rand(1,1000)*(-0.4))*10;x=[x;y];T=zeros(2,size(x,2));for i=1:size(x,2);if abs(x(1,i)) < 2.5 && abs(x(1,i)) > 1 && abs(x(2,i)) < 2.5 && abs(x(2,i)) > 1 T(1,i)=1;endendfor i = 1:size(x,2);if T(1,i) == 1T(2,i) = 0;else T(2,i) = 1;endendinputs = x;targets = T;% 创建网络n = 8;net=newff([-4 0;-4 0],[n 2],{'logsig' 'logsig'},'trainlm','learngdm'); %Levenberg-Marquardtnet.inputs{1}.processFcns = {'removeconstantrows','mapminmax'}; %数据归一化net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'}; %数据归一化%% 训练参数net.trainParam.epochs = 2000;net.trainParam.goal = 1e-4;net.trainParam.lr = 0.1;% 训练网络[net,tr] = train(net,inputs,targets);% 测试网络outputs = net(inputs);errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs);%% 训练集合绘图figure(1);hold onfor i=1:size(x,2)if T(1,i)==1plot(x(1,i),x(2,i),'b*');endif T(2,i)==1plot(x(1,i),x(2,i),'r*');endend%% 模拟绘图figure(2);test=-4:0.05:0;output=[];[A,B]=meshgrid(test,test);C=[];v=size(test,2);for i=1:vC(1,1+(i-1)*v:i*v)=A(i,:);C(2,1+(i-1)*v:i*v)=B(i,:);endoutput=abs(net(C));N=zeros(1,v*v);for i=1:v*vif output(1,i)>=output(2,i)N(1,i)=1;endendplot3(C(1,:),C(2,:),N,'o');结果分析:说明8个隐藏层节点太少了,没有达到精度就到了最大迭代次数。
思维进化算法在BP神经网络拟合非线性函数中的应用研究刘俊【摘要】直接使用BP神经网络拟合非线性函数,具有预测精度差、收敛速度慢等缺点。
该文提出利用极强全局搜索能力的思维进化算法来优化BP神经网络。
首先根据BP神经网络拓扑结构构建思维进化算法模型,然后用思维进化算法得到的最优解作为BP神经网络的初始权值和阈值,最后利用MATLAB软件对多个非线性函数进行拟合仿真实验,比较思维进化算法优化BP神经网络和单纯使用BP神经网络的预测结果。
数据表明,优化后的BP神经网络具有更高的拟合精度和更短的网络训练时间。
%Owing to the poor accuracy,slow convergence speed and other shortcomings after the direct appli-cation of BP neural network in the fitting of nonlinear functions,this paper proposed that BP neural network can be optimized by mind evolutionary algorithm,which enjoys strong global search ability. Firstly,the mind evolu-tionary algorithm model is constructed based on neural network topology;then,it is used to get the optimal solu-tions,which is served as initial weights and the threshold value of BP neural network;lastly,the MATLAB soft-ware is used to simulate multiple nonlinear function fitting,comparing the different results between optimized BP neural network and simply application of the BP neural network. Statistics indicate that the optimized BP neural network enjoys higher accuracy and shorter training time.【期刊名称】《绵阳师范学院学报》【年(卷),期】2015(000)002【总页数】5页(P79-83)【关键词】思维进化算法;BP神经网络;函数拟合【作者】刘俊【作者单位】商洛学院电子信息与电气工程学院,陕西商洛 726000【正文语种】中文【中图分类】TP183在工程应用领域中,经常需要对大量采集的历史数据进行函数拟合.然而这些数据常常是复杂、多元的非线性关系,传统的最小二乘、多项式回归等拟合方法无法满足拟合精度要求.人工神经网络具有良好的非线性并行处理能力,强大的学习和泛化能力,为非线性函数拟合提供了有效途径.张宝堃等[1]利用非线性映射能力较强的BP 神经网络拟合了一组单输入单输出非线性函数,但该方法存在局部最优问题等缺点[2,3].徐富强等[4]采用遗传算法优化BP 神经网络的初始权值和阈值,并用于非线性函数拟合,该方法全局搜索能力较强,但误差依然较大.沈学利等[5]将粒子群优化算法应用于BP神经网络的参数训练,对非线性函数拟合有一定的效果,但存在精度较差,容易陷入局部最优等[6]缺点.本文提出了思维进化算法与BP 神经网络结合的算法,利用思维进化算法优化BP 神经网络的初始权值和阈值,通过多个非线性函数拟合实验验证了该算法的强拟合能力和有效性.1 思维进化算法1.1 思维进化算法概述思维进化算法(Mind Evolutionary Algorithm,简称MEA)由孙承意等[7]研究者于1998年提出,该算法是针对遗传算法的缺陷[8]而提出的一种新型进化算法,其思想来源于模仿人类思维进化过程.思维进化算法继承了遗传算法的“群体”和“进化”的思想,提出了新的操作算子——“趋同”和“异化”,这两种操作相互协调,其中任一操作改进都可以提高算法的整体搜索效率.由于思维进化算法具有良好的扩充性、移植性和极强的全局优化能力,已经成功应用于图像处理、自动控制、经济预测等领域[9-13]1.2 思维进化算法基本思想思维进化算法是一种通过趋同、异化等操作,不断迭代进行优化学习的方法,基本的进化过程如下:(1)群体生成.在解空间中随机生成P 个个体,所有个体组成一个群体.根据适应度函数计算出每个个体的得分.(2)子群体生成.得分最高的前M 个个体作为优胜个体,前第M+1 到第M+N 共N 个个体作为临时个体.以所选优胜个体和临时个体为中心,生成M 个优胜子群体和N 个临时子群体,每个子群体的个体数目为P/(N+M).(3)趋同操作.各子群体内部个体为成为胜者而进行局部竞争,此过程为趋同过程.若一个子群体不在产生新的胜者(即子群体成熟),则竞争结束,该子群体的得分就是子群体中最优个体的得分,并把得分张贴在全局公告板上.直到所有子群体全部成熟,趋同过程结束.(4)异化操作.成熟后的子群体之间为成为胜者而进行全局竞争,不断探索新的解空间,此过程为异化操作.从全局公告板上,比较优胜子群体和临时子群体的得分高低,完成子群体间的替换、废弃、个体释放的过程,最后得到全局最优个体及其得分.(5)迭代操作.异化结束后,被释放的个体重新被新的临时子群体补充,重复(3)-(4)过程,直到最优个体的得分不再提高或迭代结束,则认为运算收敛,输出最优个体.思维进化算法框图如图1 所示:图1 思维进化算法框图Fig.1 Block diagram of mind evolutionary algorithm 2 BP 神经网络BP(Back Propagation)神经网络一种误差反向传播的多层前馈神经网络,由Rumelhart 和McCelland 等学者在1986年提出.BP 神经网络由三层网络--输入层、隐含层和输出层组成,隐含层可以有一层或多层.输入信号经输入层逐层传输到各隐含层,最后传向输出层.隐含层和输出层根据相应神经元的权值和阈值完成数据计算工作.若输出结果不满足期望值,误差信号反向逐层传到各隐含层和输入层,利用梯度最速下降法,调整各神经元的权值和阈值.输入正向传播和误差反向传播反复迭代,直到输出误差最小或输出达到期望值,计算结束.利用BP 神经网络拟合非线性函数的一般过程如下:(1)构建BP 神经网络.根据需要拟合的非线性函数特征,确定隐含层层数,选择各层网络节点数目和隐含层、输出层传输函数等.(2)训练BP 神经网络.初始化连接权值和阈值,设定学习速率和训练目标;依次计算隐含层输出、输出层输出和输出误差;根据误差信号,依次更新各层神经元间的权值和阈值;反复迭代,直到输出误差最小或满足期望值,训练结束.(3)BP 神经网络预测.用训练好的BP 网络预测非线性函数输出,然后分析预测结果. BP 神经网络具有较强的非线性映射能力,拟合函数具有一定的效果,但拟合精度较低,且容易陷入局部极值点.为了提高精度,实现全局优化,本文采用思维进化算法来优化BP 神经网络,实现非线性函数的高精度拟合.3 MEA-BP 神经网络拟合非线性函数的算法实现思维进化算法在BP 神经网络拟合非线性函数的算法实现,首先根据拟合函数的输入输出参数确定BP 神经网络拓扑结构,进而得到思维进化算法个体的编码长度,并构建优化算法模型.然后,用思维进化算法对BP 神经网络的初始权值和阈值进行优化,选取训练数据的均方误差的倒数作为各个种群和个体的得分函数,经过不断趋同、异化、迭代,输出最优个体.最后解析最优个体,得到BP 神经网络的初始权值和阈值,再利用训练数据样本训练BP 神经网络,利用测试数据样本预测网络性能.优化算法实现流程图如图2 所示.图2 算法流程图Fig.2 Flow chart of mind evolutionary algorithm4 仿真实验为了验证思维进化算法优化BP 神经网络后的预测精度,选择非线性函数式(1)进行拟合.采用MATLAB 软件编程实现BP 神经网络拟合算法和思维进化算法优化BP 神经网络拟合算法,并对这两种算法的预测精度进行比较.拟合的非线性函数如下:4.1 参数设置拟合函数为两个输入,一个输出,设定BP 网络拓扑结构为2-10-1,即输入层、隐含层和输出层的节点数分别为2个、10 个和1 个.网络学习速率为0.1,训练次数1000 次,训练目标10-6.隐含层和输出层的传输函数都选择S 型正切函数‘tansig’;网络训练函数选择L-M 算法函数‘trainlm’;权值学习函数选择梯度下降动量学习函数‘learngdm’.思维进化算法种群大小设定为400,优胜子种群和临时子种群个数全部为5,子种群大小为40,个体编码长度为21,迭代次数20,适应度函数为均方误差的倒数.根据式(1)随机产生2000 组数据,任取1950 组用于训练网络,其余50 组用于预测网络.4.2 结果分析为了清晰观察网络优化后的预测结果,首先利用1950 组数据分别训练BP 神经网络和思维进化算法优化后的BP 神经网络,然后利用训练后的两个网络预测其余50 组数据,最后分析比较这两种算法的预测误差和误差百分比参数.预测误差及误差百分比如图3 和图4 所示.图3 BP 神经网络与MEA-BP 神经网络预测误差比较Fig.3 Prediction errors between BP neural network and MEA-BP neural network图4 BP 神经网络与MEA-BP 神经网络预测误差百分比Fig.4 Percentage of prediction errors between BP neural network and MEA-BP neural network 从图3 和图4 可以清楚看到,对于非线性函数,BP 神经网络具有一定的拟合能力,但预测精度仍然较差,但是,经过思维进化算法优化后的BP 神经网络预测误差明显减小,且误差相对稳定.其他预测参数比较如表1 所示.表1 BP 神经网络与MEA-BP 神经网络预测结果比较Tab.1 Prediction results of BP neural network and MEA-BP neural network从表1 可以看到,MEA-BP 神经网络预测误差远小于BP 神经网络的预测误差,且网络训练时间也较短,可见MEA-BP 神经网络具有更高的拟合性能.4.3 其他函数的拟合按照同样的参数设定和拟合方法,对其他非线性函数进行拟合实验,实验函数如式(2)、(3)和(4).通过网络训练和预测,得到两种算法的实验结果,如表2 所示.表2 实验结果比较Tab.2 Comparison of experimental consequences从表2 中可以看出,对非线性函数拟合,经过思维进化算法优化后的BP 神经网络的预测精度高于直接使用BP 神经网络,且网络训练时间相对较短,也可以看出优化后的BP 神经网络泛化性能得到进一步提高.5 结语本文采用全局搜索能力极强的思维进化算法对BP 神经网络进行优化.该算法的基本思想是在训练BP 神经网络前,利用思维进化算法对BP 神经网络的初始权值和阈值进行优化,以提高网络的准确性.从多个非线性函数拟合实验结果分析比较得到,思维进化算法优化BP 神经网络的性能明显优于BP神经网络,非线性函数拟合精度更高.本文研究方法在工程和实验的数据拟合方面具有重要意义,也为研究和改进神经网络提供了一种新的思路,为解决其他实际问题提供了新的手段.参考文献:[1]张宝堃,张宝一.基于BP 神经网络的非线性函数拟合[J].电脑知识与技术,2012,8(27):6579-6583.[2]Li Song,Liu Lijun,Huo Man.Prediction for short-term traffic flow based on modified PSO optimized BP neural network[J].Systems Engineering-Theory & Practice,2012,32(9):2045-2049.[3]Xu Yishan,Zeng Bi,Yin Xiuwen,et al.BP neural network and its applications based on improved PSO[J].Computer Engineering and Applications,2009,45(35):233-235.[4]徐富强,钱云,刘相国.GA-BP 神经网络的非线性函数拟合[J].微计算机信息,2012,28(7):148-150.[5]沈学利,张红岩,张纪锁.改进粒子群算法对BP 神经网络的优化[J].计算机系统应用,2012,19(2):57-61.[6]乔冰琴,常晓明.改进粒子群算法在BP 神经网络拟合非线性函数方面的应用[J].太原理工大学学报,2012,43(5):558-559.[7]Chengyi Sun.Mind-Evolution-Based Machine Learning:Frameworkand the Implementation of Optimization[A].In:Proceedings of IEEE International Conference on Intelligent Engineering Systems[C].1998,355-359.[8]谢刚.免疫思维进化算法及其工程应用[D].太原:太原理工大学,2006,27-28.[9]Sun Yan,Sun Yu,Sun Chengyi.Clustering and Reconstruction of Color images Using MEBML[A].In:Proceedings of International Conference on Neural Networks & Brain[C].Beijing,China,1998,361-365.[10]Cheng Mingqi.Gray image segmentation on MEBML frame [J].Intelligent Control and Automation,2000,1:135-137.[11]Chengyi Sun,Yan Sun,Yu Sun.Economic prediction system using double models[J].Systems,Man,and Cyberntics,2000,3:1978-1983. [12]韩晓霞,谢克明.基于思维进化算法的模糊自寻优控制[J].太原理工大学学报,2004,35(5):523-525.[13]Keming Xie,Changhua Mou,Gang Xie.The multi-parameter combination mind-evolutionary-based machine learning and its application[J].Systems,Man,and Cybernetics,2000,1:183-187.。