1《智能优化方法》技术报告题目:基于BP算法的异或运算的解决班级:信科13-01班学号:08133367姓名:张谊坤任课教师:姚睿2目录一、摘要------------------------------------------------------3二、技术路线及实现方法2.1输入层和输出层神经元数目的选择----------------------32.2隐层层数和神经元数目选择--------------------------------32.3BP算法学习的四个阶段-------------------------------------4三、实验结果及分析--------------------------------------------5四、总结------------------------------------------------------5五、参考文献------------------------------------------------------5六、附录附录1:代码---------------------------------------------------6附录2:个人工作---------------------------------------------------83《摘要》利用BP函数训练计算机使其可以输出满足精度的逻辑异或运算结果。结合本课题的特点和网络训练的思想,通过深入分析选择合适的参数;接着构建BP网络,产生训练样本;选取最优结果作为本文的最终结果,并对输出结果和仿真结果进行分析。一、问题描述异或问题本质上是分类问题,要求将输入的样本组分为两类,一类样本经异或运算后结果为1,另一类经异或运算后结果为0。研究表明,BP网络特别是具有单隐层的BP网络具有较强的分类能力,能够解异或问题。二、技术路线及实现方法2.1输入层和输出层神经元数目的选择输入层神经元个数与输入样本维数相同,本实验输入样本为2维向量,所以输入层包含2个神经元。输出层神经元个数设计可根据设计者的需求设计,由于本文要解决的异或问题是单输出的0或1,所以输出层选择1个神经元。2.2隐层层数和神经元数目选择参考其他专家和学者的经验,了解到含有单隐层的BP网路能很好的解决异或问题。对于隐层神经元数目的选择前人总结出了一些经验规则,本文在借鉴前人经验的基础上,依靠测试得出较适合本课题的隐层神经元数是1至3个。由于隐层神经元越多,网络越复杂,每一步训练的计算量增大,时间增长,经测试发现1至3个隐层神经元都可以达到较高精度,为简化网络,最终确定隐层神经元数为2。根据以上分析,建立出的BP网络的结构示意图如图2-1所示:图2-1中,输入层神经元编号A、B,隐藏层神经元编号P、Q,输出层神经元编号为C。对异或问题进行非线性划分的BP神经网络采用3层网络结构,其中输入层和隐藏层各有2个处理单元,输出层有一个处理单元。对表2-1中的4个学习模式对轮流提供给网络,按照BP算法进行学习和训练,直至BP神经网络输出的全局误差满足要求为止。学习速率为0.6。首先给BP神经网络的各个连接权值及阈值赋予[-0.1,0.1]之间的随机值(具体如图2-1所示),AB0.0579-0.02910.05430.0999P=-0.0703Q=-0.0939C=-0.07030.08010.0605C图2-1BP网络结构示意图4此时,BP神经网络对应的4个输出模式产生的实际输出均为0.5左右,网络全局误差约为0.5。表2-1学习模式对输入期望输出实际输出全局误差AB0000.500110.50.51010.501100.502.3BP算法学习的四个阶段BP神经网络采用BP算法进行学习,其学习过程分为四个阶段:1.输入模式是由输入层经过隐藏层向输出层逐层传播的“模式顺传播”过程;2.网络的期望输出与实际输出之差,即误差信号,是由输出层经隐藏层向输入层逐层修正连接权值的“误差逆传播”过程。3.由“模式顺传播”过程和“误差逆传播”过称反复交替进行的网络“记忆训练”过成。4.网络趋向收敛,即网络的全局误差趋向极小值的“学习收敛”过程。调整隐含层到输出层之间的连接权值及输出层各个单元的阈调整隐含层到输出层之间的连接权值及输出层各个单元的阈调整隐含层到输出层之间的连接权值及输出层各个单元的阈值。开始连接权值及阈值初始化将学习模式对提供给网络计算隐藏层各单元的净输入与输出计算输出层各单元的净输入与输出计算输出层各单元的一般化误差计算输出层各单元的一般化误差调整隐含层到输出层之间的连接权值及输出层各个单元的阈值调整输入层到隐藏层之间的连接权值及隐藏层各个单元的阈值更新学习模式对更新学习次数误差ε或学习次数Nmax?全部学习模式训练完毕?学习结束Y调整隐含层到输出层之间的连Y调整隐含层到输出层之间的连接权值及输出层各个单N调整隐含层到输出层之间N调整隐含层到输出层之间的连接权值及输出层各图2-2BP学习算法流程图5三、实验结果与分析输出实际输出层c学写了15000次后,结果如图3-1运行结果所示:图3-1运行结果表3-1输出结果对比输入期望输出实际输出AB0000.01187080110.9874511010.9874351100.015573在精度满足之后,实际输出十分逼近期望输出,可以看到BP算法解决异或问题是成功的。四、总结BP网络具有很强的自学习、自组织、自适应能力,分类能力较强,收敛速度快,能较好的解决2个变量的异或问题,得到的结果较为理想。BP网络隐层和输出层激活函数(特别是输出层激活函数)的选择对具有规律性期望输出数据的问题的结果有显著影响,应结合网络训练思想对具体问题进行分析。本文在充分学习了解神经网络训练思想的基础上构建适合本课题的BP网络,通过大量次的训练,并在实验中修改参数,得到较为理想的结果。五、参考文献[1]韦巍,何衍,智能控制基础,北京:清华大学出版社,2008.11.[2]张良军,曹晶,蒋世忠,神经网络实用教程,机械工业出版社,2008.2.[3]陈晓波.仿生态神经网络算法研究及其在声信号车型识别中的应用[D].长春:东北师范大学,2008.5.[4]马锐,人工神经网络原理,机械工业出版社,2009.106附录1:代码#includeiostream#includecmathusingnamespacestd;//用bp解决异或的问题classBP{private:doublea[4]={0,0,1,1};//表中的A数据doubleb[4]={0,1,0,1};//表中的B数据doublep[4]={0};//用来存储p的值doubleq[4]={0};//用来存储q的值doubleSp[4];//f函数处理之前的p节点的值doubleSq[4];//f函数处理之前的q节点的值doublel[4];//f函数处理之前的c节点的值doubled[4];//全局误差doubleep[4];//隐藏层的误差doubleeq[4];//隐藏层的误差doubley[4]={0,1,1,0};//期望输出//权值[-0.1-0.1]之间的值doubleWap=0.0543;//节点a到节点p的权值doubleWaq=0.0579;//节点a到节点q的权值doubleWbp=-0.0291;//节点b到节点p的权值doubleWbq=0.0999;//节点b到节点q的权值doubleVpc=0.0801;//节点p到节点c的权值doubleVqc=0.0605;//节点q到节点c的权值//阈值doubleRp=-0.0703;//p节点的阈值doubleRq=-0.0939;//q节点的阈值doubleRc=-0.0109;//c节点的阈值doublem=0.6,n=0.6;//mn为学习速率public:doublec[4]={0};//用来存储c节点的值BP(){};doublef(doublea);//函数f,数学上是1/(1+e(-x));doublefl(doublea);//fl是f的微分函数voidbp();//bp算法函数};intmain(){BPb;b.bp();coutb.c[0]endl;coutb.c[1]endl;coutb.c[2]endl;coutb.c[3]endl;//输出c的值,因为c是实际输出7return0;}voidBP::bp(){for(intj=0;j15000;j++){//运行多次之后才能训练完成for(inti=0;i4;i++){//4组数据Sp[i]=a[i]*Wap+b[i]*Wbp+Rp;//节点p的净输入Sq[i]=a[i]*Waq+b[i]*Wbq+Rq;//节点q的经输入p[i]=f(Sp[i]);//节点p的输出q[i]=f(Sq[i]);//节点q的输出l[i]=p[i]*Vpc+q[i]*Vqc+Rc;//节点c的净输入c[i]=f(l[i]);//j节点c的输出,即bp的实际输出d[i]=(y[i]-c[i])*fl(l[i]);//输出层节点即c节点的校正误差ep[i]=(Vpc*d[i])*fl(Sp[i]);//隐藏层的p节点的校正误差eq[i]=(Vqc*d[i])*fl(Sq[i]);//隐藏层的q节点的校正误差Vpc=Vpc+m*d[i]*p[i];//修正隐藏层至输出层的连接权值Vqc=Vqc+m*d[i]*q[i]//修正隐藏层至输出层的连接权值;Rc=Rc+m*d[i];//修正输出层的阈值Wap=Wap+n*ep[i]*a[i];Waq=Waq+n*eq[i]*a[i];//修正输入层至隐藏层的连接权值Wbp=Wbp+n*ep[i]*b[i];Wbq=Wbq+n*eq[i]*b[i];//修正输入层至隐藏层的连接权值Rp=Rp+n*ep[i];//修正隐藏层的阈值Rq=Rq+n*eq[i];}}//修正隐藏层的阈值}doubleBP::f(doublea){return1/(1+exp(-a));}doubleBP::fl(doublea){returnf(a)-f(a)*f(a);}8附录2:个人工作一、我个人的主要工作是负责技术报告的撰写,技术报告中共有摘要、技术路线和实现方法、实验结果与分析、总结和参考文献五个部分,其中摘要、技术路线和实现方法、总结和参考文献等四个部分主要由我撰写。二、负责一小部分代码,BP类中一些初始化的工作,参照图2-1,根据BP神经网络的初始状态,对各节点的阈值,各节点之间的权值进行初始化。classBP{private:doublea[4]={0,0,1,1};//表中的A数据doubleb[4]={0,1,0,1};//表中的B数据doublep[4]={0};//用来存储p的值doubleq[4]={0};//用来存储q的值doubleSp[4];//f函数处理之前的p节点的值doubleSq[4];//f函数处理之前的q节点的值doublel[4];//f函数处理之前的c节点的值doubled[4];//全局误差doubleep[4];//隐藏层的误差doubleeq[4];//隐藏层的误差doubley[4]={0,1,1,0};//期望输出//权值[-0.10.1]之间的值doubleWap=0.0543;//节点a到节点p的权值doubleWaq=0.0579;//节点a到节点q的权值doubleWbp=-0.0291;//节点b到节点p的权值doubleWbq=0.0999;//节点b到节点q的权值doubleVpc=0.0801;//节点p到节点c的权值doubleVqc=0.0605;//节点q到节点c的权值//阈值AB0.0579-0.02910.05430.0999P=-0.0703Q=-0.0939C=-0.07030.08010.0605C图2-1BP网络结构示意图9doubleRp=-0.0703;//p节点的阈