第四章BP网络(2)4.6.1网络的层数4.6.2隐含层神经元数4.6.3初始权值的选取4.6.4学习速率4.6.5期望误差的选取4.6.6应用举例4.6.7局限性4.6网络设计理论上已经证明:具有偏差和至少一个S型隐含层加上一个线性输出层的网络,能够逼近任何有理函数定理:增加层数主要可以进一步的降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间。一般情况下应优先考虑增加隐含层中神经元数仅用具有非线性激活函数的单层网络来解决问题没有必要或效果不好线性问题非线性问题4.6.1网络的层数网络训练精度的提高,可以通过采用一个隐含层,而增加其神经元数的方法来获得。这在结构实现上,要比增加更多的隐含层简单得多定理:实现任意N个输入向量构成的任何布尔函数的前向网络所需权系数数目为在具体设计时,比较实际的做法是通过对不同神经元数进行训练对比,然后适当地加上一点余量4.6.2隐含层神经元数一般取初始权值在(-1,1)之间的随机数威得罗等人在分析了两层网络是如何对一个函数进行训练后,提出一种选定初始权值的策略选择权值的量级为在MATLAB工具箱中可采用函数nwlog.m或nwtan.m来初始化隐含层权值W1和B1。其方法仅使用在第一隐含层的初始值的选取上,后面层的初始值仍然采用随机取数4.6.3初始权值的选取学习速率决定每一次循环训练中所产生的权值变化量大的学习速率可能导致系统的不稳定小的学习速率导致较长的训练时间,可能收敛很慢,不过能保证网络的误差值不跳出误差表面的低谷而最终趋于最小误差值所以在一般情况下,倾向于选取较小的学习速率以保证系统的稳定性。学习速率的选取范围在0.01-0.8之间4.6.4学习速率在设计网络的训练过程中,期望误差值也应当通过对比训练后确定一个合适的值这个所谓的“合适”,是相对于所需要的隐含层的节点数来确定,因为较小的期望误差值是要靠增加隐含层的节点,以及训练时间来获得一般情况下,作为对比,可以同时对两个不同期望误差值的网络进行训练,最后通过综合因素的考虑来确定采用其中一个网络4.6.5期望误差值选取求解函数逼近问题有21组单输入矢量和相对应的目标矢量,试设计神经网络来实现这对数组的函数关系P=-1:0.1:1T=[-0.960.577-0.07290.3770.6410.660.4610.1336…-0.201-0.434-0.5-0.393-0.16470.09880.3072…0.3960.34490.1816-0.0312-0.2183-0.3201]测试集P2=-1:0.025:14.6.6应用举例目标矢量相对于输入矢量的图形初始网络的输出曲线4.6.6应用举例训练1000次2000次4.6.6应用举例训练3000次5000次4.6.6应用举例需要较长的训练时间完全不能训练选取较小的初始权值采用较小的学习速率,但同时又增加了训练时间局部极小值BP算法可以使网络权值收敛到一个解,但它并不能保证所求为误差超平面的全局最小解,很可能是一个局部极小解4.6.7限制与不足4.7.1目标4.7.2附加动量法4.7.3误差函数改进4.7.4自适应学习速率4.7BP网络的改进4.7.1目标加快训练速度避免陷入局部极小值4.7.2附加动量法利用附加动量的作用则有可能滑过局部极小值修正网络权值时,不仅考虑误差在梯度上的作用,而且考虑在误差曲面上变化趋势的影响,其作用如同一个低通滤波器,它允许网络忽略网络上微小变化特性该方法是在反向传播法的基础上在每一个权值的变化上加上一项正比于前次权值变化量的值,并根据反向传播法来产生新的权值变化4.7.2附加动量法带有附加动量因子的权值调节公式其中k为训练次数,mc为动量因子,一般取0.95左右附加动量法的实质是将最后一次权值变化的影响,通过一个动量因子来传递。当动量因子取值为零时,权值变化仅根据梯度下降法产生当动量因子取值为1时,新的权值变化则是设置为最后一次权值的变化,而依梯度法产生的变化部分则被忽略掉了促使权值的调节向着误差曲面底部的平均方向变化,当网络权值进入误差曲面底部的平坦区时,δi将变得很小,于是,Δwij(k+1)≈Δwij(k),从而防止了Δwij=0的出现,有助于使网络从误差曲面的局部极小值中跳出4.7.2附加动量法在MATLAB工具箱中,带有动量因子的权值修正法是用函数learnbpm.m来实现的trainbpm.m可以训练一层直至三层的带有附加动量因子的反向传播网络下面是对单层网络使用函数trainbpm.m的情形:[W,B,epochs,errors]=trainbpm(W,B,’F’,P,T,TP)4.7.3误差函数改进当ak趋向1时,E趋向一个常数,即处于E的平坦区,f’(n)→0,可能造成完全训练的麻痹现象当一个网络的误差曲面存在着平坦区时,可以选用别的误差函数f(tk,ak)来代替(tk-ak)2的形式,只要其函数在ak=tk时能达到最小值4.7.3误差函数改进包穆(Baum)等人于1988年提出一种误差函数为不会产生不能完全训练的麻痹现象4.7.3误差函数改进与常规的误差函数的情况δij=f’(n)(tk-ak)相比较,其中的f’(n)项消失了当n增大,进入激活函数的平坦区,使f’(n)→0时,不会产生不能完全训练的麻痹现象但由于失去了f’(n)对Δw的控制作用,过大的Δw又有可能导致网络过调或振荡1989年,范尔曼(S.Fahlman)提出一种折中的方案,即取δk=[f’(n)+0.1](tk-ak)一方面恢复了f’(n)的某些影响另一方面当|n|变大时,仍能保持δk有一定的大小,从而避免了麻痹现象的发生4.7.4自适应学习速率通常调节学习速率的准则是,检查权值的修正值是否真正降低了误差函数,如果确实如此,则说明所选取的学习速率值小了,可以对其增加一个量;否则可认为产生过调,应该减小学习速率的值一种自适应学习速率的调整公式MATLAB工具箱中带有自适应学习速率进行反向传播训练的函数为trainbpa.m可训练直至三层网络。使用方法[W,B,epochs,TE]=trainbpa(W,B,’F’,P,T,TP)可以将动量法和自适应学习速率结合起来以利用两方面的优点。这个技术已编入了函数trainbpx.m之中函数的调用和其他函数一样,只是需要更多的初始参数而已TP=[disp_freqmax_epocherror_goaletaeta_inceta_decmom_consterr_ratio];[W,B,epochs,[error;eta]]=trainbpx(W,B,F,P,T,TP)4.7.4自适应学习速率收敛速度问题局部极小点问题逃离/避开局部极小点:修改W、V的初值——并不是总有效。逃离——统计方法;[Wasserman,1986]将Cauchy训练与BP算法结合起来,可以在保证训练速度不被降低的情况下,找到全局极小点。4.8几个问题的讨论网络瘫痪问题在训练中,权可能变得很大,这会使神经元的网络输入变得很大,从而又使得其激活函数的导函数在此点上的取值很小。根据相应式子,此时的训练步长会变得非常小,进而将导致训练速度降得非常低,最终导致网络停止收敛稳定性问题用修改量的综合实施权的修改连续变化的环境,它将变成无效的4.8几个问题的讨论步长问题BP网络的收敛是基于无穷小的权修改量步长太小,收敛就非常慢步长太大,可能会导致网络的瘫痪和不稳定自适应步长,使得权修改量能随着网络的训练而不断变化。[1988年,Wasserman]4.8几个问题的讨论BP网络相关函数详解函数名称功能logsigLog-Sigmoid函数tansigTan-Sigmoid函数newff创建一个BP网络feedforwardnet创建一个BP网络(推荐使用)newcf创建级联的前向神经网络cascadeforwardnet创建级联的前向神经网络(推荐使用)newfftd创建前馈输入延迟的BP网络5.BP网络相关函数详解logsig——Log-Sigmoid传输函数Log-Sigmoid函数的特点是,范围的数据被映射到区间0,11logsig1nne可以使用下面的代码将神经网络节点的传输函数定义为Log-Sigmoid函数:net.layers{i}.transferFcn=’logsig’;5.BP网络相关函数详解tansig——Tan-Sigmoid传输函数tansig是双曲正切Sigmoid函数,调用形式与logsig函数相同。取值范围:1,122tansig11nnex=-4:.1:4;y=tansig(x);%Tag-Sigmoid函数plot(x,y,'^-r')title('Tan-sig函数')xlabel('x')ylabel('y')gridon5.BP网络相关函数详解dlogsig/dtansig——Sigmoid函数的导数21111111nnnnefnfnfneee11nfnex=-4:.1:4;y=logsig(x);%logsig函数dy=dlogsig(x,y);%logsig函数的导数subplot(211)plot(x,y);title('logsig')subplot(212);plot(x,dy);title('dlogsig')5.BP网络相关函数详解newff——创建一个BP网络:新版语法net=newff(P,T,S)P:R*Q1矩阵,表示创建的神经网络中,输入层有R个神经元。每行对应一个神经元输入数据的典型值,实际应用中常取其最大最小值。T:SN*Q2矩阵,表示创建的网络有SN个输出层节点,每行是输出值的典型值S:标量或向量,用于指定隐含层神经元个数,若隐含层多于一层,则写成行向量的形式。旧版语法格式net=newff(P,N,TF,BTF):P表示输入向量的典型值,N为各层神经元的个数,TF为表示传输函数的细胞数组,BTF为训练函数5.BP网络相关函数详解旧版newff默认训练函数为traingdx(学习率自适应并附加动量因子的最速下降法),新版默认训练函数为trainlm。新版速度更快,但更占用内存新版newff将输入的60%用于训练,20%用于检验,20%用于验证,采用了提前终止的策略,防止过拟合的情况发生。对于同一个问题,往往会出现新版最终训练误差大于旧版newff的情况。用newff逼近二次函数,新版的函数误差比旧版函数大example6_3.m5.BP网络相关函数详解feedforwardnet——创建一个BP网络feedforwardnet是新版神经网络工具箱中替代newff的函数feedforwardnet(hiddenSizes,trainFcn)hiddenSizes为隐含层的神经元节点个数,如果有多个隐含层,则hiddenSizes是一个行向量,缺省值为10。trainFcn为训练函数,缺省值为’trainlm’。[x,t]=simplefit_dataset;%MATLAB自带数据,x、t均为1*94向量net=feedforwardnet;view(net)net=train(net,x,t);view(net)y=net(x);perf=perform(net,y,t)5.BP网络相关函数详解newcf——级联的前向神经网络在新版中使用cascadeforwardnet函数代替5.BP网络相关函数详解net=newcf(P,T,[S1S2...S(N-1)])P:R*Q1矩阵,每行对应一个神经元输入数据的典型值。T:SN*Q2矩阵,表示创建的网络有SN个输出层节点,每行是输出值的典型值。Si:表示隐含层神经元