《BP处理异或问题分析》由会员分享,可在线阅读,更多相关《BP处理异或问题分析(8页珍藏版)》请在金锄头文库上搜索。
1、BP 神经网络实现“异或逻辑”分析舒小健 S201305025摘要:本文采用 matlab 神经网络工具箱中的 BP 网络处理“异或逻辑”。通过使用不同的网络结构、核函数、学习算法,讨论其均方差误差达到 0.001 时,所需要的迭代次数。结果表明二层神经网络以(L,P)组合训练结果最佳,三层神经网络以(L,P,P)训练结果最佳,且后者的训练速度比前者要快一倍左右;隐含层神经元数个数设置为 5 个就能达到较快的训练速度;使用 LM 算法为学习算法将大大提高网络的训练速度,平均迭代次数为 3 次左右即能达到目标误差。关键词:异或逻辑 BP 神经网络 优化模型引言:BP 神经网络是一种由非线性变化单
2、元组成的前馈网络,以sigmoid 对数函数、双曲正切函数、线性函数等为核函数,通过误差的反向传导对网络进行训练,以得到期望的输出值,其中 BP 网络的设计,训练算法的选取对模型的收敛速度有较大的影响。本报告通过构建两层和三层 BP 神经网络模型,选取不同的核函数、学习算法,不同个数的神经元讨论“异或逻辑”的实现效率,着重对其收敛速度进行对比分析,以得到实现“异或逻辑”较优的 BP 网络设计。1 问题描述“异或逻辑”,可用计算机语言表述为当输入值为就(0,0 ) ,(1,1) , (1,0) , (0,1 )时,期望输出分别为 0,0,1,1 。采用matlab 自带的神经网络工具箱函数分别从
3、隐含层层数,隐含层神经元个数,核函数,学习算法等方面进行分析。讨论其输出值的均方差误减少到 0.001 所需要的迭代次数,或者在迭代次数达到设定最大次数 10000 次时,所输出的均方差误差值的大小,具体分析见下文。2 结果与分析2.1 不同隐含层层数,核函数选取Matlab 神经网络工具箱提供核函数有 sigmoid 函数 logsig,线性函数 purelin,双曲正切函数 tansig 等。由于 sigmoid 函数与双曲正切函数同属于非线性函数,因此本文核函数仅限于非线性和线性函数进行讨论,选取 logsig 和 purelin 函数为讨论函数,在下文中将二者简称为 L 和 P。设置学
4、习效率为 0.01,最大训练次数为 10000 次,期望均方差误差为 0.001,将隐含层的细胞数限定为 4 个,分别对二层4,1和三层4,4,1神经网络设置不同的核函数进行讨论,学习函数为标准 BP 算法 traingd,由于工具箱函数的各层的初始权重是随机分配的,所以对每种核函数设置都进行 10 次重复试验取平均值进行讨论,其中表中小数表示训练均方差误差,即训练次数达到最大训练次数 10000次时的训练误差;整数表示迭代次数,即训练达到训练目标误差时所对应的训练次数。训练结果如表 1 和表 2 所示:表 1 网络设置为4,1隐含层和输出层不同的激活函数选取实验结果对比核函数设置 1 2 3
5、 4 5 6 7 8 9 10平均值(L,L) 0.37 0.07 0.02 0.07 0.14 0.08 0.02 0.04 0.14 0.26 0.12 (L,P) 2194 4637 4175 1695 3227 3644 1630 2644 4650 2435 3093(P,L) 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 (P,P) 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 由表 1 可以看出隐含层核函数的设置很重要,当隐含层核函数设置为 sigmoi
6、d 函数时,其均方差误差普遍小于设置为线性函数的误差;而且在其输出层的核函数设置为线性函数时,能在最大限定训练次数内达到训练目标误差 0.001。由表 2 可以看出,当网络隐含层设置成两层时,情况就变得复杂多样,当只有一层隐含层神经网络不能在规定的训练次数内达到目标误差时,通过增加隐含层并设置适宜的核函数可以达到增快训练速度的目的。如表 1 中( P,P)不能达到精度,但通过增加隐含层 P在规定最大训练次数内达到目标精度。但如果网络函数设定不当,会使得训练结果变得更糟,从表 2 中可以看出最好的训练核函数组合为(L,P,P) ,该组能够在迭代次数为 1000 次左右达到训练精度。总体上来说,以
7、 sigmoid 函数 L 为输出层函数的网络组合普遍比线性函数 P 为输出函数的训练速度慢。表 2 网络设置为4,4,1两个隐含层和输出层不同的激活函数选取实验结果对比核函数设置 1 2 3 4 5 6 7 8 9 10平均值(P,P,P) 2349 2157 1915 4818 4263 8018 2847 3555 3067 960 3395(L,P,P) 701 2205 641 1531 455 602 1405 747 3945 529 1276(L,L,P) 5559 2722 1862 10000 2143 2461 10000 3090 2975 3112 4392(L,L,
8、L) 0.049 0.033 0.240 0.031 0.042 0.139 0.129 0.251 0.141 0.154 0.121 (P,L,L) 0.017 0.022 0.015 0.080 0.153 0.017 0.020 0.018 0.171 0.025 0.054 (P,P,L) 计算梯度很快降到 1e-5 以下,误差只能收敛到 0.25,不能达到要求(L,P,L) 0.002 0.002 0.003 0.003 0.001 0.002 0.002 0.002 0.002 0.003 0.002 (P,L,P) 3065 10000 3296 10000 3239 2334
9、 6349 9571 1890 3970 5371由上述分析可知,二层神经网络以(L,P)组合训练结果最佳,三层神经网络以(L,P,P)训练结果最佳,且后者的训练速度比前者要快一倍左右。故采用适宜的神经网络设计方案,就异或问题而言,三层的网络比二层网络训练速度快。2.2 神经元个数对网络的影响就神经元个数对网络影响的讨论,为简洁起见,以二层神经网络分析为例,网络训练参数均采用 2.1 中设置方式,隐含层的核函数设置为 sigmoid 函数,输出层函数设置为线性函数,通过设置不同的神经元个数,分别对网络训练效果进行讨论,得到了如表 3 所示的结果。从表中可以看出,隐含层神经元的个数的变化对训练效
10、果的影响,随着神经元个数的增多,达到目标误差的平均训练次数之减少,在神经元个数小于 5 个时,训练速度的提升比较的明显,产生较少训练次数的几率也随着神经元个数的增多而增大,但到 5 个之后,这种影响就变得不那么显著。实际上随着神经元个数的增加,所占用的计算机资源也随之增大,所以神经元个数的选择不宜太大,故解决异或问题隐含层使用 5 个神经元较为合理。表 3 隐含层不同神经元个数的设置对网络训练效果的影响隐含层神经元设置 1 2 3 4 5 6 7 8 9 10 平均2,1 10000 10000 10000 10000 3387 10000 10000 6968 3650 10000 8400
11、 3,1 5041 10000 10000 2219 1489 2479 4498 4539 10000 9513 5978 4,1 10000 1303 1495 9698 4160 3614 1704 4064 1998 2172 4021 5,1 2800 2859 1505 1633 2079 1542 1189 1466 1191 889 1715 6,1 2205 3416 1077 1337 1525 1680 1348 770 1081 918 1536 7,1 3271 1013 864 714 1031 888 1005 939 793 881 1140 8,1 275 6
12、42 1416 600 1028 827 763 589 802 545 749 2.3 对学习函数的讨论Matlab 的 BP 神经网络工具箱提供了标准 BP 算法 traingd,动量梯度下降算法 traingdm,共轭梯度算法 traincgf,LM 算法 trainlm 等学习函数,引用 2.1,2.2 的结论,设计三层结构5,5,1,核函数为L,P,P的神经网络模型,其它参数同 2.1,训练结果如表 4 所示。从表中可以看出,学习函数对达到训练目标需要的迭代次数影响非常明显,不同的学习函数的迭代次数相差很大,标准 BP 平均需要1000 次左右,共轭算法平均需要 20 次,而 LM
13、算法平均仅仅需要 3次,说明好的学习函数对训练速度起相当重要的作用。表 4 不同学习算法使用后达到训练目标的迭代次数学习算法 1 2 3 4 5 6 7 8 9 10 平均traingd 1298 1702 743 999 988 1273 628 409 900 4509 1344traingdm 562 6117 1388 999 2214 1344 2301 5021 1066 1465 2247traincgd 20 9 10 9 5 10 39 40 10 37 19trainlm 2 2 2 2 3 2 2 3 2 3 2通过绘制四种学习函数对网络的训练过程,清晰展现出神经网络的训
14、练速度随迭代次数之间的关系,如图 1 所示,标准 BP 算法训练呈 S 型,一开始收敛梯度较大,但经过一定的迭代次数之后计算梯度变小,使得到达目标误差的迭代次数较多;动量梯度算法有所改善,依然需要较多的迭代次数;共轭梯度算法对训练有了很大的改进,大大增加了每次迭代的梯度;LM 算法更是收敛梯度极大,很快收敛到目标误差。充分说明将 LM 算法应用于处理异或问题可以极大提高 BP 神经网络的收敛速度。0 500 1000 1500 2000 2500 3000 3500 4000 450010-410-310-210-1100 Best Training Performance is 0.0009
15、9758 at epoch 4509MeanSquared Error (mse)4509 Epochs TrainBestGoal0 200 400 600 800 1000 1200 1400 1600 180010-410-310-210-1100101 Best Training Performance is 0.00099866 at epoch 1860MeanSquared Error (mse)1860 Epochs TrainBestGoalA:traingd B:traingdm0 5 10 15 20 25 30 3510-410-310-210-1100101 Best
16、 Training Performance is 0.00096282 at epoch 37MeanSquared Error (mse)37 Epochs TrainBestGoal0 0.5 1 1.5 2 2.5 310-410-310-210-1100101 Best Training Performance is 0.00011179 at epoch 3MeanSquared Error (mse)3 Epochs TrainBestGoalC:traincgd D:trainlm图 1 A 表示标准 BP 算法训练结果,B 表示动量梯度下降算法训练结果; C 表示共轭梯度算法训练结果,D 表示 LM 算法训练结果3 结论通过使用 matlab 的 BP 神经网络工具箱实现异或逻辑,对其神经网络结构参数、核函数、学习函数进行讨论,进一步的了解不同参数对 BP