1、1蠓虫的分类问题摘要本文根据已知的测量数据(9 支 的数据和 6 支 的数据)制定一种AfApf分类方法,类别是已经给定的( 或 ) ,采用了人工神经网络中的多层前p馈网络模型。首先,根据人工神经元模型与前馈网络的结合建立一个多层网络模型;接着,利用向后传播算法求得一组恰当的权值,使网络具有特定的分类功能;同时为了求得向后传播算法中实际输出与理想输出的差异的极小点与极小值,使用了迭代算法中的最速下降法。(得到的结果是什么?)关键词:人工神经元模型 多层前馈网络 向后传播算法 最速下降法一、问题重述两种蠓虫 和 已由生物学家 W.L.Grogon 和 W.W.Wirth(1981)根据Afp它们
2、的触角长度、翅膀长度加以区分. 现测得 只 和 只 的触长、翅膀6Apf9f长的数据如下: pf1.4,781.,961.20,81.2,01.28,01.3,96A2374364339470.9,.5,8.5,问题一:如何根据以上数据,制定一种方法正确区分两种蠓虫?(需要用结果,即正确率去说明你所使用的方法的正确性,并在摘要中写出来)问题二:用问题一采用的方法的方法对触长、翅长分别为的 个样本进行识别。(需要在结果中体现,即1.24,80.,14.0,23给出你的结论,并在摘要中写出来)二、问题分析本问题要求根据已知资料(9 支 的数据和 6 支 的数据)制定一种分类AfApf方法,类别是已
3、经给定的( 或 ) 。今后,我们将 9 支 及 6 支 的pApf数据集合称之为学习样本。问题一:基于已知的资料可以建立多层前馈网络模型对蠕虫进行分类,利用已知的测量数据该模型可以进行学习过程,得到一组恰当的权值,使网络具有特定的分类功能;2问题二:可以利用问题一建立的多层前馈网络模型对给定的 3 个样本进行分类。三、符号说明:表示一个确定的已知样品标号 s:当第 个样品的原始数据输入网络时,相应的输出单元状态iO:当第 个样品的原始数据输入网络时,相应的隐单元状态sjH:当第 个样品的原始数据输入网络时,相应的输入单元状态skI:从中间层到输出层的权ijw:从输入层到中间层的权jk四、模型的
4、建立与求解 4.1 模型的建立4.1.1 人工神经元模型图 1 表示出了作为人工神经网络(artificial neural network ,以下简称 )N的基本单元的神经元模型,它有三个基本要素: 图 1 神经元模型 (i)一组连接(对应于生物神经元的突触) ,连接强度由各连接上的权值表示,权值为正表示激活,为负表示抑制。 (ii)一个求和单元,用于求取各输入信号的加权和(线性组合) 。 (iii )一个非线性激活函数,起非线性映射作用并将神经元输出幅度限制在一定范围内(一般限制在(0,1)或(-1,1)之间) 。此外还有一个阈值 (或偏置 ) 。kkb3以上作用可分别以数学式表达出来:
5、1,()pkkjkkkkjuwxvuyv式中 为输入信号, 为神经元 权值, 为线性组合结果,12,px 12,kkpw ku为阈值, 为激活函数, 为神经元 的输出。 ky若把输入的维数增加一维,则可把阈值 包括进去。例如 k1,()pkkjkkjvwxyu此处增加了一个新的连接,其输入为 ,权值为 (或 ) ,如01+或 0kwkb图 2 所示。 图 2 神经元模型激活函数 可以有以下几种: ()(i)阈值函数 1,0() (1)v即阶梯函数。这时相应的输出 为 ky1,0kkv其中 ,常称此种神经元为 模型。 1pkkjjvwxMP(ii)分段线性函数 41,1() (2)20,vv它类
6、似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器放大系数趋于无穷大时变成一个阈值单元。 (iii)sigmoid 函数 最常用的函数形式为 1() (3)exp()参数 可控制其斜率。另一种常用的是双曲正切函数 01exp()()tanh (4)2vv这类函数具有平滑和渐近性,并保持单调性。双曲正弦函数: ;双曲余弦函数: ;sinh2xecosh2xe双曲正切函数: ;双曲余切函数: ;taxetxe4.1.2 网络结构及工作方式 除单元特性外,网络的拓扑结构也是 的一个重要特性。从连接方式看N主要有两种。 N(i)前馈型网络 各神经元接受前一层的输入,并输出给下一
7、层,没有反馈。结点分为两类,即输入单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多个其它结点作为其输入)。通常前馈网络可分为不同的层,第 i层的输入只与第 层输出相连,输入和输出结点与外界相连,而其它中间层1i则称为隐层。 (ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不变,各连5线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络按对能量函数的极
8、小点的利用来分类有两种:第一类是能量函数的所有极小点都起作用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解最优化问题。4.1.3 多层前馈网络图 3 多层前馈网络 为解决上述问题,考虑一个其结构如图 3 所示的人工神经网络,激活函数由 1()exp()来决定。图中最下面单元,即由 所示的一层称为输入层,用以输入已知测量值。在本问题中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。中间一层称为处理层或隐单元层,单元个数适当选取,在本问题中,取三个就足够了。最上面一层称为输出层,在本问题中只包含二个单元,用以输出与每一组输入数据相对应的分类信息任何一个中间
9、层单元接受所有输入单元传来的信号,并把处理后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络结构,其中只有中间层及输出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工。在蠓虫分类问题中, 分别表示学习样本中的 15 个样品;当将1,25sL第 个样品的原始数据输入网络时,相应的输出单元状态为 ,隐单s (1,2)siO元状态为 ,输入单元取值为 。如果 , 均已给定,(,3)sjH(1,2)skIijwjk那么,对应于任何一组确定的输入 ,网络中所有单元的取值不难确定。12,s6事
10、实上,对样品 而言,隐单元 的输入是 sj21 (5)ssjjkhwI相应的输出状态是 21() (6)sssjjjkHI由此,输出单元 所接收到的迭加信号是 i332111()(7)ss siijijjkjjhwwI网络的最终输出是 332111()()(8)sss siiij ijjkj jOHI这里,没有考虑阈值,正如前面已经说明的那样,这一点是无关紧要的。还应指出的是,对于任何一组确定的输入,输出是所有权 的函数。,ijkw如果我们能够选定一组适当的权值 ,使得对应于学习样本中任何,ijk一组 Af 样品的输入 ,输出 ,对应于 Apf 的输入数据,输12,sI12(0)sO出为 那么
11、蠓虫分类问题实际上就解决了。因为,对于任何一个未知类别0,1的样品,只要将其触角及翅膀长度输入网络,视其输出模式靠近 亦或0,1,就可能判断其归属。当然,有可能出现介于中间无法判断的情况。现,在的问题是,如何找到一组适当的权值,实现上面所设想的网络功能。4.1.4 向后传播算法如前所述,我们希望对应于学习样本中 Af 样品的输出是 ,对应于 1,0Apf 的输出是 ,这样的输出称之为理想输出。实际上要精确地作到这一点0,1是不可能的,只能希望实际输出尽可能地接近理想输出。为清楚起见,把对应于样品 的理想输出记为 ,那么 ssiT2152,1()()()(9)2s sii iii iEWOTO度
12、量了在一组给定的权下,实际输出与理想输出的差异,由此,寻找一组恰当的权的问题,自然地归结为求适当 的值,使 达到极小的问题。这里,()EW7。 1213231212312,TWwww将式(8 )代入(9 ) ,有 322,11()()(10)s siijjkjEWTI易知,对每一个变量 或 而言,这是一个连续可微的非线性函数,为了求ijwjk得其极小点与极小值,最为方便的就是使用最速下降法。4.1.5 最速下降法最速下降法是一种迭代算法,为求出 的(局部)极小,它从一个任取的()EW初始点 出发, 计算在0W 0000001213231212312,Twww点的负梯度方向,这001213223
13、1212312(),TWEEEE 是函数在该点下降最快的方向;只要 ,就可沿该方向移动一小段距0()W离,达到一个新的点 , 是一个参数,只要 足够小,定能保10E证 。不断重复这一过程,一定能达到 的一个(局部)极小10()EW ()E点。这一算法的具体形式如下:对于隐单元到输出单元的权 而言,最速下降法给出的每一步的修正量是ijw() (1)sssij iiijijijETOhH此处令() 12sssiiihT对输入单元到隐单元的权 jkw8 , ()() (13)sssjkiiijjkjksssijjjkEwTOhwIhII此处 ()sssjjijhw由(11)和(13)式可以看出,所有
14、权的修正量都有如下形式,即(14)spqpqv指标 对应于两个单元中输出信号的一端, 对应于输入信号的一端, 或者代p s表 或者代表 。HI利用这一迭代算法,最终生成在一定精度内满足要求的 的过程,称为,ijkw人工神经网络的学习过程。可以看出,这里所提供的学习机制是元与元之间权的不断调整,学习样本中任何一个样品所提供的信息,最终将包含在网络的每一个权之中。参数 的大小则反映了学习效率。 这里要啰嗦一下: 001000000012123132212323001 31(),TWTWEwwww05151515515000000, , , , , ,112233222323151515150000
15、, , ,112222 TWsssssswHwHwHwHwHwHssssIII 051500, ,3131232TWssIII 其中;32 0011()(),12;,15sss ssiiiijjkiijhTOwITOL。22 0 000111()() ,3;,2sssssssjjijjij jkijhIws 9通过上述公式的计算可得 的值为1W 11111123232232,Twww下面利用 的值计算 的值.公式如下:12 112111111122332223231111311(),TWTWEwwww 155515515, , , , , ,11212313222323155515111, ,
16、 ,22212 TWsssssswHwHwHwHwHwHssssIII 15151, ,331232TWssIII 其中;32 11()(),12;,15sss ssiiiijjkiijhTOwITOL222 1 111()() ,3;,2sssssssjjijjij jkijhIws 如此下去,便有序列 满足: .由0nW012()()()0nEWEL单调有界定理得:极限 存在.注意到: 表示连接权重向量,所以序limnn列 是有界序列,于是 有收敛子列 ,记 ,从而0n 00jlimjnjW%有 。易见, 。这表明: 是序列()li()jnjE%(),1nE%L的最小值点。这时, 我们便认
17、定 是 局部极小值点。0nW W()E上述理论分析告诉我们:使用最速下降法可以在一定精度内获得满足要求的 .这意味着人工神经网络训练结束,我们已经建立了可以应用的人工,ijkw神经网络。理论分析也告诉我们:(1) 的值依赖于初始值 ;(2) 的值未必是%0W%10全局最优解;(3)序列 收敛于 的速度很慢,从而需要迭代很多次,0nW%原因在于学习效率 的值要确保 严格单调递减,从而不能取得太大。1()nE4.2 模型的求解对上述模型,编写的 Matlab 程序如下: clear allclose allclcp1=1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;
18、1.38,1.90; 1.40,1.70;1.49,1.82;1.54,1.82;1.56,2.08; p2=1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.00; 1.28,2.00;1.30,1.96; p=p1;p2; pr=minmax(p); goal=ones(1,9),zeros(1,6);zeros(1,9),ones(1,6); plotpv(p,goal(1,:)%plot(p1(:,1),p1(:,2),h,p2(:,1),p2(:,2),o) net=newff(pr,3,2,logsig,logsig); net.trainParam.sho
19、w = 10; net.trainParam.lr = 0.05; net.trainParam.goal = 1e-10; net.trainParam.epochs = 50000; net = train(net,p,goal); x=1.24 1.80;1.28 1.84;1.40 2.04; y0=sim(net,p) y=sim(net,x)11最优初始值和阀值:X=-0.26735 -0.36217 0.0034213 0.36022 -0.413 0.045455 -0.49804 0.093353 0.36217 -0.018084 0.073803 0.49511 -0.4
20、1496 -0.023949 0.11486 -0.099218 -0.037634最小误差 err=0.0108291.使用随机权值与阀值测试样本预测的结果:测试样本的仿真误差:1.1547训练样本的仿真误差:22.使用优化后的权值与阀值测试样本预测的结果:测试样本的仿真误差:0.010829训练样本的仿真误差:0.16384使用优化后的权值与阀值对三个样本预测的结果:0.95826 0.96249 0.25830.058425 0.051903 0.87343由此可见, 属于 类; 属于 类。1.24,801.2,84与 Af1.40,2Apf请陈述模型的求解的结果,-准确率如何?4.3
21、模型的优缺点?五、参考文献1 司守奎主编,数学建模算法与程序12评价如下(1)摘要应当包括用了什么方法,干了什么事情,得到什么样的结果,此外还可以包括概括解决问题的步骤,方法优缺点等.你的摘要说的很清楚,但没有结果的陈述.请补充结果再发过来;(2)你对人工神经网络的基本理论很清楚,说明你的基本功扎实,自学能力很强,以后要加强创造性学习,比如写些小论文;(3)排版非常很漂亮;(4)最好使用两种方法进行对比(比如判别分析与人工神经网络) ,这样效果更好;(5)引用文献太少,且没有对引用的内容注明出处。附录:程序清单(1)GABPMain_mengchongfenlei.mclcclear allc
22、lose all%加载神经网络的训练样本,测试样本每一列一个样本,输入 P,输出 Tp1=1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.49,1.82;1.54,1.82;1.56,2.08;p2=1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96;n1=randperm(size(p1,1);n2=randperm(size(p2,1);P1=p1(n1(1:6),:);P2=p2(n2(1:3),:);P=P1;P2;t1=ones(1,9);z
23、eros(1,9);t2=zeros(1,6);ones(1,6);T1=t1(:,n1(1:6);T2=t2(:,n2(1:3);T=T1,T2;P3=p1(n1(7:9),:);P4=p1(n2(4:6),:);P_test=P3;P4;T3=t1(:,n1(7:9);T4=t1(:,n2(4:6);T_test=T3,T4;hiddennum=3;%初始隐含层神经元个数inputnum=size(P,1);%输入层神经元个数outputnum=size(T,1);%输入层神经元个数w1num=inputnum*hiddennum;%输入层到隐含层的权值的个数w2num=outputnum
24、*hiddennum;%隐含层到输出层的权值的个数13N=w1num+hiddennum+w2num+outputnum;%待优化的变量的个数%定义遗传参数NIND=40;%种群大小MAXGEN=50;%最大遗传代数PRECI=10;%个体长度GGAP=0.95;%代沟px=0.7;%交叉概率pm=0.01;%变异概率trace=zeros(N+1,MAXGEN);%寻优结果的初始值FieldD=repmat(PRECI,1,N);repmat(-.5;.5,1,N);repmat(1;0;1;1,1,N);%区域描述器Chrom=crtbp(NIND,PRECI*N);%创建任意离散随机种群
25、%优化gen=0;%代计数器X=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换ObjV=Objfun(X,P,T,hiddennum,P_test,T_test);%计算目标函数值while genMAXGENfprintf(%dn,gen);FitnV=ranking(ObjV);%分配适应度值SelCh=select(sus,Chrom,FitnV,GGAP);%选择SelCh=recombin(xovsp,SelCh,px);%重组SelCh=mut(SelCh,pm);%变异X=bs2rv(SelCh,FieldD);ObjVSel=Objfun(X,P,T,hid
26、dennum,P_test,T_test);%计算子代的目标函数值Chrom,ObjV=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%将子代插入到父代,得到新种群X=bs2rv(Chrom,FieldD);gen=gen+1;%代计数器增加Y,I=min(ObjV);%获取每一代的最优值及其序号,Y 为最优解,I 为个体的序号trace(1:N,gen)=X(I,:);%记下每一代的最优值trace(end,gen)=Y;%记下每一代的最优值end%画进化图figure(1);plot(1:MAXGEN,trace(end,:);grid onxlabel(遗传代数
27、);ylabel(误差变化);title(进化过程);bestX=trace(1:end-1,end);bestErr=trace(end,end);fprintf(最优初始值和阀值: nX=,num2str(bestX),n 最小误差 14err=,num2str(bestErr),n)(2)Objfun.mfunction Obj= Objfun(X,P,T,hiddennum,P_test,T_test)%用来分别求解种群中各个个体的目标值%输入%X:所有个体的初始权值和阀值%P:训练样本输入%T:训练样本输出%hiddennum:隐含层神经元数目%P_test:测试样本输入%T_tes
28、t:测试样本期望输出%Obj:所有个体预测样本预测误差的范数M,N=size(X);Obj=zeros(M,1);for i=1:MObj(i)=Bpfun(X(i,:),P,T,hiddennum,P_test,T_test);end(3)Bpfun.mfunction err=Bpfun(x,P,T,hiddennum,P_test,T_test)%训练与测试 BP 网络%输入%x:一个个体的初始权值和阀值%P:训练样本输入%T:训练样本输出%hiddennum:隐含层神经元数目%P_test:测试样本输入%T_test:测试样本期望输出%输出%err:预测样本的预测误差的范数inputn
29、um=size(P,1);%输入层神经元个数outputnum=size(T,1);%输出层神经元个数%新建 BP 网络net=newff(minmax(P),hiddennum,outputnum,tansig,logsig,trainlm);%设置网络参数:训练次数为 1000,训练目标为 0.01,学习速率为 0.1net.trainParam.epochs=1000;net.trainParam.goal=0.01;LP.lr=0.1;net.trainParam.show=NaN;%BP 神经网络初始权值与阀值w1num=inputnum*hiddennum;%输入层到隐含层的权值个
30、数w2num=outputnum*hiddennum;%隐含层到输出层的权值个数w1=x(1:w1num);%初始输入层到隐含层的权值15B1=x(w1num+1:w1num+hiddennum);%隐含层神经元阀值w2=x(w1num+hiddennum+1:w1num+hiddennum+w2num);%初始隐含层到输出层的权值B2=x(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum);%输出层神经元阀值net.iw1,1=reshape(w1,hiddennum,inputnum);net.lw2,1=reshape(w2,
31、outputnum,hiddennum);net.b1=reshape(B1,hiddennum,1);net.b2=reshape(B2,outputnum,1);%训练网络net=train(net,P,T);%测试网络Y=sim(net,P_test);err=norm(Y-T_test);(4)yichuan_youhua_mengchongfenlei.m%使用优优化后的权值与阀值outputnum=size(T,1);%输出层神经元个数%新建 BP 网络net=newff(minmax(P),hiddennum,outputnum,tansig,logsig,trainlm);%设
32、置网络参数:训练次数为 1000,训练目标为 0.01,学习速率为 0.1net.trainParam.epochs=1000;net.trainParam.goal=0.01;LP.lr=0.1;net.trainParam.show=NaN;%BP 神经网络初始权值与阀值w1num=inputnum*hiddennum;%输入层到隐含层的权值个数w2num=outputnum*hiddennum;%隐含层到输出层的权值个数w1=bestX(1:w1num);%初始输入层到隐含层的权值B1=bestX(w1num+1:w1num+hiddennum);%隐含层神经元阀值w2=bestX(w1
33、num+hiddennum+1:w1num+hiddennum+w2num);%初始隐含层到输出层的权值B2=bestX(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum);%输出层神经元阀值net.iw1,1=reshape(w1,hiddennum,inputnum);net.lw2,1=reshape(w2,outputnum,hiddennum);net.b1=reshape(B1,hiddennum,1);net.b2=reshape(B2,outputnum,1);%训练网络net=train(net,P,T);%测试网
34、络disp(2.使用优化后的权值与阀值 )disp(测试样本预测的结果:)Y2=sim(net,P_test);16err2=norm(Y2-T_test);err21=norm(sim(net,P)-T);disp(测试样本的仿真误差: ,num2str(err2)disp(训练样本的仿真误差: ,num2str(err21)(5)weiyichuan_youhua_mengchongfenlei_bpnet.mclcclear allclose all%加载神经网络的训练样本,测试样本每一列一个样本,输入 P,输出 Tp1=1.24,1.72;1.36,1.74;1.38,1.64;1.3
35、8,1.82;1.38,1.90;1.40,1.70;1.49,1.82;1.54,1.82;1.56,2.08;p2=1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96;n1=randperm(size(p1,1);n2=randperm(size(p2,1);P1=p1(n1(1:6),:);P2=p2(n2(1:3),:);P=P1;P2;t1=ones(1,9);zeros(1,9);t2=zeros(1,6);ones(1,6);T1=t1(:,n1(1:6);T2=t2(:,n2(1:3);T=T1,T2;P3=p
36、1(n1(7:9),:);P4=p1(n2(4:6),:);P_test=P3;P4;T3=t1(:,n1(7:9);T4=t1(:,n2(4:6);T_test=T3,T4;hiddennum=3;%初始隐含层神经元个数inputnum=size(P,1);%输入层神经元个数outputnum=size(T,1);%输出层神经元个数%新建 BP 网络net=newff(minmax(P),hiddennum,outputnum,tansig,logsig,trainlm);%设置网络参数:训练次数为 1000,训练目标为 0.01,学习速率为 0.1net.trainParam.epochs
37、=1000;net.trainParam.goal=0.01;LP.lr=0.1;net.trainParam.show=NaN;%训练网络net=train(net,P,T);%测试网络disp(1.使用随机权值与阀值 )17disp(测试样本预测的结果:)Y1=sim(net,P_test);err1=norm(Y1-T_test);err11=norm(sim(net,P)-T);disp(测试样本的仿真误差: ,num2str(err1)disp(训练样本的仿真误差: ,num2str(err11)(6)yichuan_youhua_three_bpnet.m%使用优优化后的权值与阀值
38、inputnum=size(P,1);%输入层神经元个数%使用优优化后的权值与阀值inputnum=size(P,1);%输入层神经元个数outputnum=size(T,1);%输出层神经元个数%新建 BP 网络net=newff(minmax(P),hiddennum,outputnum,tansig,logsig,trainlm);%设置网络参数:训练次数为 1000,训练目标为 0.01,学习速率为 0.1net.trainParam.epochs=1000;net.trainParam.goal=0.01;LP.lr=0.1;net.trainParam.show=NaN;%BP 神
39、经网络初始权值与阀值w1num=inputnum*hiddennum;%输入层到隐含层的权值个数w2num=outputnum*hiddennum;%隐含层到输出层的权值个数w1=bestX(1:w1num);%初始输入层到隐含层的权值B1=bestX(w1num+1:w1num+hiddennum);%隐含层神经元阀值w2=bestX(w1num+hiddennum+1:w1num+hiddennum+w2num);%初始隐含层到输出层的权值B2=bestX(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum);%输出层神经元阀值net.iw1,1=reshape(w1,hiddennum,inputnum);net.lw2,1=reshape(w2,outputnum,hiddennum);net.b1=reshape(B1,hiddennum,1);net.b2=reshape(B2,outputnum,1);%训练网络net=train(net,P,T);%对三个蠓虫的预测x=1.24 1.80;1.28 1.84;1.40 2.04;disp(使用优化后的权值与阀值对三个样本预测的结果:)Y_three=sim(net,x);disp(num2str(Y_three)