第05章自适应线性元件zoujiang@public.wh.hb.cn邹江自适应线性元件(AdaptiveLinearElement,简称Adaline)由威德罗(Widrow)和霍夫(Hoff)首先提出的它与感知器的主要不同之处在于其神经元有一个线性激活函数,这允许输出可以是任意值,而不仅仅只是像感知器中那样只能取0或1。它采用的是W—H学习法则,也称最小均方差(LMS)规则对权值进行训练自适应线性元件的主要用途是线性逼近一个函数式而进行模式联想。5.1自适应线性神经元模型和结构图5.1自适应线性神经网络的结构5.2W-H学习规则W—H学习规则是由威德罗和霍夫提出的用来修正权矢量的学习规则采用W—H学习规则可以用来训练一定网络的权值和偏差使之线性地逼近一个函数式而进行模式联想(PatternAssociation)。定义一个线性网络的输出误差函数为:我们的目的是通过调节权矢量,使E(W,B)达到最小值。所以在给定E(W,B)后,利用W—H学习规则修正权矢量和偏差矢量,使E(W,B)从误差空间的某一点开始,沿着E(W,B)的斜面向下滑行。根据梯度下降法,权矢量的修正值正比于当前位置上E(W,B)的梯度,对于第i个输出节点有:或表示为:(5.3)η为学习速率。在一般的实际运用中,实践表明,η通常取一接近1的数,或取值为:(5.5)学习速率的这一取法在神经网络工具箱中用函数maxlinlr.m来实现。(5.5)式可实现为:W—H学习规则的函数为:learnwh.m来实现,加上线性自适应网络输出函数purelin.m,可以写出W—H学习规则的计算公式为:A=purelin(W*P);E=T—A;[dW,dB]=learnwh(P,E,h);W=W十dW;B=B十dB;采用W—H规则训练自适应线性元件使其能够得以收敛的必要条件是被训练的输入矢量必须是线性独立的,且应适当地选择学习速率以防止产生振荡现象。5.3网络训练自适应线性元件的网络训练过程可以归纳为以下三个步骤:1)表达:计算训练的输出矢量A=W*P十B,以及与期望输出之间的误差E=T—A;2)检查:将网络输出误差的平方和与期望误差相比较,如果其值小于期望误差,或训练已达到事先设定的最大训练次数,则停止训练;否则继续;3)学习:采用W—H学习规则计算新的权值和偏差,并返回到1)。采用Matlab进行自适应线性元件网络的训练过程如下:trainwh.m%表达式A=purelin(W*P,B);E=T-A;SSE=sumsqr(E);%求误差平方和forepoch=1:max_epoch%循环训练ifSSE<err_goal%比较误差epoch=epoch—1;break%若满足期望误差要求,结束训练end[dW,dB]=1earnwh(P,E,lr);%修正权值W=W十dW;B=B十dB;A=purelin(W*P,B);%网络输出E=T-A;SSE=sumsqr(E);%计算网络误差平方和end5.4例题与分析[例5.1]设计自适应线性网络实现从输入矢量到输出矢量的变换关系。其输入矢量和输出矢量分别为:P=[1.0-1.2]T=[0.51.0]%wf1.m%P=[1-1.2];T=[0.51];[R,Q]=size(P);[S,Q]=size(T);[W,B]=rands(S,R);max_epoch=20;%最大循环次数err_goal=0.001;%期望误差1r=0.4*maxlinlr(P);%最佳学习速率disp_freq=1;%设置显示频率TP=[disp_freqmax_epocherr_goallr];%设置参数变量TP[W,B,epochs,error]=trainwh(W,B,P,T,TP)%进行线性网络权值训练在随机初始值为:W0=—0.9309;B0=—0.8931的情况下,经过12次循环训练后,网络的输出误差平方和达到0.000949,网络的最终权值为:W=-0.2354;B=0.7066实际上,对于[例5.1]这个简单的例题,它存在一个精确解,且可以用解二元一次方程的方式将P和T值分别对应地代入方程T=W*P十B得:可解出e=T-A=0的解为:W=-0.2273;B=0.7273由此看出,对于特别简单的问题,采用自适应线性网络的训练不一定能够得到足够精确的解。因为当训练误差达到期望误差值后,训练即被终止。对于具有零误差的自适应线性网络,即输入/输出矢量对存在着严格的线性关系,此时的自适应线性网络的设计可以采用工具箱中另外一个名为solvelin.m的函数。[W,B]=solvelin(P,T)然后可用simulin.m函数来检测所设计的网络:A=simulin(P,W,B)还可以用sumsqr.m函数来求出误差平方和:SSE=sumsqr(T-A)[例5.2]现在来考虑一个较大的多神经元网络的模式联想的设计问题。输入矢量和目标矢量分别为:解:由输入矢量和目标输出矢量可得:r=3,s=4,q=4。所以网络的结构如图5.2所示。这个问题的求解同样可以采用线性方程组求出,即对每一个输出节点写出输入和输出之间的关系等式。实际上要求出这16个方程的解是需要花费一定的时间的,甚至是不太容易的。对于一些实际问题,常常并不需要求出其完美的零误差时的解。也就是说允许存在一定的误差。在这种情况下,采用自适应线性网络求解就显示出它的优越性:因为它可以很快地训练出满足一定要求的网络权值。%wf2.m%P=[11.51.2–0.3;-123–0.5;21–1.60.9];T=[0.53–2.21.4;1.1–1.21.7–0.4;30.2–1.8–0.4;-10.1–1.00.6];disp_freq=400;%中间不显示结果max_epoch=400;err_goal=0.001;lr=0.9*maxlinlr(P);W=[1.9978–0.5959–0.3517;1.55430.053311.3660;%初始权值1.06720.3645–0.9227;-0.77471.3839–0.3384];B=[0.0746;-0.0642;-0.4256;-0.6433];SSE=sumsqr(T-purelin(W*P,B));%未训练前误差fprintf(‘Beforetrainihg,sumsquarederror=%g.\n’,SSE)%训练网络flops(0)tp=[disp_freqmax_epocherr_goallr];%设置参数变量tp[W,B,epochs,errors]=trainwh(W,B,P,T,tp);%进行线性网络权值训练W%显示最终训练权矢量B%显示最终训练偏差矢量SSE=sumsqr(T-purelin(W*P,B));%最终误差%显示结果并给出结论ploterr(errors),fprintf(‘\nAfter%.0fepochs,sumsquaredeerror=%g.\n\n’,SSE),fprintf(‘Trainingtook%.0fflops.\n’,flops),fprintf(‘Trainednetworkoperates:’);ifSSE<err_goaldisp(‘Adequately.’)elsedisp(‘Inadequately.’)endend训练后的网络权值为:网络训练过程中的误差记录对于存在零误差的精确权值网络,若用函数solvelin.m来求解,则更加简单如下:%wf3.m%P=[11.51.2–0.3;-123–0.5;21–1.60.9];T=[0.53–2.21.4;1.1–1.21.7–0.4;30.2–1.8-0.4;-10.1–1.00.6];[W,B]=solvelin(P,T);A=simulin(P,W,B);SSE=sumsqr(T-A)WBend由此可得零误差的唯一精确解为:[例5.3]设计训练一个线性网络实现下列从输人矢量到目标矢量的变换:所给出的输入矢量元素之间是线性相关的:第三组元素等于第二组元素的两倍减去第一组:P3=2P2-P1。由于输入矢量的奇异性,用函数solvelin.m来设计时网络会产生问题。只有在能够线性地解出问题的情况下,用函数solvelin.m才比较准确。只要将前面已编写的wf2.m程序中的输入与目标矢量改变一下,并给出(—l,1)之间的随机初始值,即可运行看到本例的结果。其最终误差在1.04左右,这就是本例题下的最小误差平方和,而当采用完全线性函数的设计solvelin.m去求解网络权值时,所得到的误差是4.25。采用W—H算法训练出的误差是它的1/4,由此可见其算法的优越性。[例5.4]现在假定在[例5.1]的输入/输出矢量中增加两组元素,使其变为P=[1.01.53.0-1.2]T=[0.51.13.0-1.0]本例题的目的是在于了解自适应线性网络的线性逼近求解的能力。图5.4给出了输入输出对的位置以及网络求解的结果。对于所设置的err_goal=0.001,在循环训练了50次后所得的误差平方和仍然为:SSE=0.289。这个值即是本题所能达到的最小误差平方和的值。当采用线性自适应线性网络求解问题所得到的误差特别大时,可以认为此问题不适宜用线性网络来解决。图5.4网络训练结果图自适应线性网络还有另一个潜在的困难,当学习速率取得较大时,可导致训练过程的不稳定。[例5.5]输入/目标矢量与[例5.1]相同。我们将以不同的学习速率训练两次网络以展现两种不希望的学习速率带来的影响。以例5.1为样本,1)对于第一个尝试,学习速率lr取:1r=1.7*maxlinlr(P);2)第二个尝试是选用更大学习速率:1r=2.5*maxlinlr(P);5.5对比与分析感知器和自适应线性网络(1)网络模型结构上感知器和自适应线性网络而言,结构上的主要区别在于激活函数:一个是二值型的,一个线性的。当把偏差与权值考虑成一体时,自适应线性网络的输入与输出之间的关系可以写成A=W*P。如果P是满秩的话,则可以写成AP-1=W,或W=A/P。(2)学习算法感知器的算法是最早提出的可收敛的算法,它的自适应思想被威德罗和霍夫发展成使其误差最小的梯度下降法。最后又在BP算法中得到进一步的推广,它们属于同一类算法。(3)适用性与局限性感知器仅能够进行简单的分类。从前面的例题中已经看出,感知器可以将输入分成两类或四类等。它的局限性是仅能对线性可分的输入进行分类。自适应线性网络除了像感知器一样可以进行线性分类外,又多了线性逼近,这仅是由于其激活函数可以连续取值而不同于感知器的仅能取0或1的缘故。作业设计一个有三个输入的单层线性网络:P={232.4-0.6;-246-1;42-3.21.8}T={16-4.42.8;2.2-2.43.4-0.8;60.4-3.6-0.8;-20.2-21.2}5.6本章小结1)自适应线性网络仅可以学习输入输出矢量之间的线性关系,可用于模式联想及函数的线性逼近。网络结构的设计完全由所要解决的问题所限制,网络的输入数目和输出层中神经元数目,由问题所限制;2)多层线性网络不产生更强大的功能,从这个观点上看,单层线性网络不比多层线性网络有局限性;3)输入和输出之间的非线性关系不能用一个线性网络精确地设计出,但线性网络可以产生一个具有误差平方和最小的线性逼近。