单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,12,遗传神经网络,本章要点,遗传算法的概念,遗传算法优化神经网络的过程,遗传神经网络设计的根本方法及设计实例,12.1 遗传算法的概念,遗传算法(Genetic Algorithm,GA)是一种基于自然选择和基因遗传学原理的优化搜寻方法。它将“优胜劣态,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,依据确定的适配值函数及一系列遗传操作对各个体进展筛选,从而使适配值高的个体被保存下来,组成新的群体,新群体包含上一代的大量信息,并且引入了新的优于上一代的个体。这样周而复始,群体中各个体的适应度不断提高,直至满足确定的条件为止。,根本遗传算法大都包含如下四个操作:编码、选择、穿插和变异。,12.2 遗传算法优化神经网络,遗传算法编码,1.网络拓扑构造编码,二进制编码,网络拓扑构造的二进制编码图:,码串共分为3个局部,码串 表示隐含层数,其中,的值为1或0,码串表示第一层隐含层,12.2 遗传算法优化神经网络,节点数,码串表示其次层隐含层节点数,有 如下计算关系:,其中,表示隐含层节点数编码的长度,其值视具体问题而定。,12.2 遗传算法优化神经网络,整数编码,整数编码就是将隐含层数编码 ,隐含层节点数编码 、分别用某一范围内的整数来表示。也就是说 取整数值1或2,整数 、的取值范围视具体问题而定。,GA优化NN构造的算法步骤如下:,1设定网络隐含层数,以及每层节点数的范围,将隐含层个数、第一层、其次层等的节点数承受实数分别进展编码,随机产生 个这样编码的染色体。将 个染色体分别解码成相应的网络;,12.2 遗传算法优化神经网络,2利用多种不同的初始连接权值分别对每个网络进展训练;,3计算在每个对应码链下神经网络的误差函数,利用误差函数或其他策略(如网络的泛化力气或构造简洁度)确定每个个体的适应度函数;,4选择假设干适应度函数值最大的个体构成父本;,5利用穿插,变异等遗传操作算子对当前一代群体进展处理,产生新一代群体;,6重复上述2-5步骤,直到群体中的某个个体(对应一个网络构造)能满足要求为止。,12.2 遗传算法优化神经网络,2.网络参数编码,以BP神经网络为例。设其隐含层传递函数为Sigmoid函数:。则 为外形参数,,设 分别表示第一层与其次层,其次层与第三层,第三层与第四层节点的连接权值,设 分别为隐含层第一层和其次层节点以及输出层节点的阈值。,12.2 遗传算法优化神经网络,二进制编码,网络参数的二进制编码图:,12.2 遗传算法优化神经网络,实数编码,网络参数的实数编码图:,12.2 遗传算法优化神经网络,实数编码GA优化NN构造和参数的算法步骤如下:,1给定网络的输入、输出样本集;,对网络的参数进展编码构成染色体;,选择遗传操作,选择,穿插和变异及其运行参数;,设定种群规模并随机产生个染色体;,由输入样本经网络传输产生对应于个染色体的网络输出;,依据选择的适应度函数计算方式来计算每个染色体的适应度;,依据适应度在遗传空间进展选择操作;,进展穿插、变异操作产生新一代群体;,返回步骤5,直到满足性能要求,最终获得网络的参数。,12.2 遗传算法优化神经网络,遗传操作,在各种选择方法中除了排挤方法以外,其它选择方法对于实数编码GA都是适用的。如适应度比例方法、最正确个体保存方法等。实数编码GA通常承受算术穿插法。变异方式可依据所解决问题的特点进展合理选择。,适应度函数,目标函数可选为:,适应度函数形式:,:期望输出,:网络当前输出,12.3 遗传神经网络应用设计,遗传神经网络设计的根本方法,当利用NN解决某一问题时,首先要依据该问题的特点,选择适合的NN模型。确定好使用的网络模型后,接下来就要进展网络的设计。其设计局部主要包括:确定网络的拓扑构造、网络的连接权值及阈值等。利用GA 可以搜寻到以上问题的最优解。,遗传神经网络应用设计实例,设计一个遗传BP网络,来靠近非线性函数。函数的输入输出为:P=-1:.05:1,T=sin(pi*P)。,12.3 遗传神经网络应用设计,画出函数曲线:,figure(1);,P=-1:.05:1;,T=sin(pi*P);,plot(P,T);,%画出函数曲线,12.3 遗传神经网络应用设计,首先要利用GA优化该BP网络的拓扑构造,承受二进制编码,Matlab代码如下:,clc;,clear all;,tic%计算程序运行时间,和toc连用,tic表示开头,toc表示完毕,NIND=40;%种群规模,MAXGEN=100;%最大运行代数,GGAP=0.9;%代沟,trace=zeros(1,MAXGEN);%用于存储训练误差,Chrom=crtbp(NIND,10);%创立初始种群,gen=0;%代计数器,ObjV=(objv2s(Chrom,40)”;,while genMAXGEN,FitnV=ranking(ObjV);,SelCh=select(”sus”,Chrom,FitnV,GGAP);,12.3 遗传神经网络应用设计,SelCh=recombin(”xovsp”,SelCh,0.7);,SelCh=mut(SelCh);,ObjVSel=(objv2s(SelCh,36)”;,Chrom ObjV=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);,gen=gen+1;,Jm index=min(ObjV);%记录最优目标函数值的变化,trace(gen,1)=Jm;,if(gen=1),t(gen,1)=toc;,else,t(gen,1)=toc+t(gen-1,1);,end,end,Ly=Chrom(index,:);%训练完毕后,记录最优个体,figure(2);,plot(1:100,trace);%画出训练误差变化曲线,12.3 遗传神经网络应用设计,下面为被调用函数。将每个染色体解码成一个网络构造,分别计算在该构造下,网络的测试输出与期望输出的误差值,该组误差值被返回到主程序中,用以衡量每个染色体性能的好坏,从而选出性能优良的染色体,经过GA的不断进化,最终获得网络拓扑构造。,function Ye=objvs(Chr,m),P=-1:.05:1;,T=sin(pi*P);,for k=1:m,if(Chr(k,1)=0)&(Chr(k,2)=0)%只有一个隐含层,x1=23*Chr(k,6)+22*Chr(k,5)+21*Chr(k,4)+20*Chr(k,3);,%该隐含层神经元个数,if x1=0,x1=10;,end,12.3 遗传神经网络应用设计,net=newff(minmax(P),x1,1,tansig,purelin);%创立BP网络,else,x1=23*Chr(k,6)+22*Chr(k,5)+21*Chr(k,4)+20*Chr(k,3);,x2=23*Chr(k,10)+22*Chr(k,9)+21*Chr(k,8)+20*Chr(k,7);,if x1=0,x1=10;,end,if x2=0,x2=8;,end,net=newff(minmax(P),x1,x2,1,purelin,tansig,purelin);,%创立BP网络,end,Y(k,:)=sim(net,P);,Ye(k)=sum(Y(k,:)-T).2);,k=k+1;,end,12.3 遗传神经网络应用设计,运行100代的误差下降曲线,12.3 遗传神经网络应用设计,优化完毕后,Ly中保存获得的最优解。在matlab命令窗口中输入Ly,按回车键的如下结果:,Ly=,0 0 1 1 0 0 0 1 0 0,Ly中前两位是网络层数的编码,由前面的规定可知,隐含层数为1,则Ly中的第3到第第六位表示该隐含层的节点数,为:。由此便获得了网络的拓扑构造。,12.3 遗传神经网络应用设计,利用GA优化该BP网络的权值和阈值,传递函数分别为tansig和purelin,所以不需要优化外形参数。承受实数编码,Matlab代码如下:,clc;,clear all;,FieldDR=-20-20-20-20-20-20-20-20-20-20-20-20-1-1-1-1-1-1-1-1-1-1-1-1-20-20-20-20-20-20-20-20-20-20-20-20-1;20 20 20 20 20 20 20 20 20 20 20 20 1 1 1 1 1 1 1 1 1 1 1 1 20 20 20 20 20 20 20 20 20 20 20 20 1;%权值和阈值的取值范围,Chrom=crtrp(40,FieldDR);%产生40个初始群体,MAXGEN=200;%最大运行代数,GGAP=0.9;%代勾,gen=0;%代计数器,Jm=1;,tracec=zeros(MAXGEN,1);%用于存储训练误差,ObjV=objv2b(Chrom,40);%调用obj2b函数计算当前群体的目标函数值,12.3 遗传神经网络应用设计,while(gen0),tic,FitnV=ranking(ObjV);,maxfit index=max(FitnV);,Selch=select(sus,Chrom,FitnV,GGAP);,%代勾是0,9,Chrom经选择后 是36个个体,Selch=recombin(”reclin”,Selch,0.7);%进展算术穿插,Selch=mutate(”mutbga”,Selch,FieldDR,0.01);%变异,ObjVSel=objv2b(Selch,36);%求目标函数值,Chrom ObjV=reins(Chrom,Selch,1,1,ObjV,ObjVSel);%重构组成40个个体,gen=gen+1;,Jm index=min(ObjV);%记录最优目标函数值的变化,tracec(gen,1)=Jm;,if(gen=1),t(gen,1)=toc;,else,t(gen,1)=toc+t(gen-1,1);,end,end,12.3 遗传神经网络应用设计,plot(1:200,tracec,”k-.”);,P=-1:.05:1;,T=sin(pi*P);,net=newff(minmax(P),12,1,”tansig”,”purelin”);%创立BP网络,net.IW1,1=(Chrom(index,1:12)”;%获得网络权值,net.IW2,1=;,net.LW1,1=;,net.LW1,2=;,net.LW2,2=;,net.LW2,1=(Chrom(index,13:24);,net.b1,1=(Chrom(index,25:36)”;%获得网络阈值,net.b2,1=Chrom(index,37);,y=sim(net,P);%利用优化获得的权值和阈值进展网络仿真测试,figure(2),plot(P,y,”k-”);,hold on;,plot(P,T,”-”);,xlabel(”时间”);,12.3 遗传神经网络应用设计,ylabel(”输出-目标”);,title(”网络输出和系统实际输出”);,figure(3),e=y-T;,plot(P,e,min(P)max(P),0 0,”:r”);,AXIS(-1 1-2 2),xlabel(”时间”);,ylabel(”误差”);,title(”误差信号”);,下面为被调用函数。将每个染色体中的实数分别解码为网络的权值和阈值,来计算网络的测试输出与期望输出的误差值,该组误差值被返回到主程序中,用以衡量每个染色体性能的好坏,从而选出性能优良的染色体,经过GA的不断进化,最终获得网络权值和阈值结果。,12.3 遗传神经网络应用设计,function ys=objv2b(Chr,m),P=-1:.05:1;,T=sin(pi*P);,ne