第五章自适应线性元件 自适应线性元件( Adaptive Linear- lement,简称 Adaline)也是早期神经网络模 型之一,它是由威德罗( Widrow)和霍夫(Hoff)首先提出的。它与感知器的主 要不同之处在于其神经元有一个线性激活函数,这允许输出可以是任意值,而不 仅仅只是像感知器中那样只能取0或1。另外,它采用的是W-H学习法则,也 称最小均方差(LMS)规则对权值进行训练,从而能够得到比感知器更快的收敛速 度和更高的精度。 自适应线性元件的主要用途是线性逼近一个函数式而进行模式联想。另外, 它还适用于信号处理滤波、预测、模型识别和控制。 5.1自适应线性神经元模型和结构 个线性的具有r个输人的自适应线性神经元模型如下图所示。这个神经元 有一个线性激活函数,被称为 Adaline如图5.1(a)所示。和感知器一样,偏差可 以用来作为网络的一个可调参数,提供额外可调的自由变量以获得期望的网络特 性。线性神经元可以训练学习一个与之对应的输入输出的函数关系,或线性逼近 任意一个非线性函数,但它不能产生任何非线性的计算特性。 n p P1 →②”团 P2 这“屠 2"团 (a) Adaline 图5.1自适应线性神经网络的结构 当自适应线性网络由s个神经元相并联形成一层网络,此自适应线性神经网 络又称为 Madaline如图5.1(b所示。 W-H规则仅能够训练单层网络,但这并不是什么严重问题。如前面所述
1 第五章 自适应线性元件 自适应线性元件(Adaptive Linear Element,简称 Adaline)也是早期神经网络模 型之一,它是由威德罗(Widrow)和霍夫(Hoff)首先提出的。它与感知器的主 要不同之处在于其神经元有一个线性激活函数,这允许输出可以是任意值,而不 仅仅只是像感知器中那样只能取 0 或 1。另外,它采用的是 W—H 学习法则,也 称最小均方差(LMS)规则对权值进行训练,从而能够得到比感知器更快的收敛速 度和更高的精度。 自适应线性元件的主要用途是线性逼近一个函数式而进行模式联想。另外, 它还适用于信号处理滤波、预测、模型识别和控制。 5.1 自适应线性神经元模型和结构 一个线性的具有 r 个输人的自适应线性神经元模型如下图所示。这个神经元 有一个线性激活函数,被称为 Adaline 如图 5.1(a)所示。和感知器一样,偏差可 以用来作为网络的一个可调参数,提供额外可调的自由变量以获得期望的网络特 性。线性神经元可以训练学习一个与之对应的输入输出的函数关系,或线性逼近 任意一个非线性函数,但它不能产生任何非线性的计算特性。 图 5. 1 自适应线性神经网络的结构 当自适应线性网络由 s 个神经元相并联形成一层网络,此自适应线性神经网 络又称为 Madallne 如图 5.1(b)所示。 W—H 规则仅能够训练单层网络,但这并不是什么严重问题。如前面所述
单层线性网络与多层线性网络具有同样的能力,即对于每一个多层线性网络,都 具有一个等效的单层线性网络与之对应。在反向传播法产生以后,威德罗又将其 自适应线性网络扩展成多层,甚至将激活函数也扩展成非线性的了。 5.2W一H学习规则 H学习规则是由威德罗和霍夫提出的用来修正权矢量的学习规则,所以 用他们两人姓氏的第一个字母来命名。采用W一H学习规则可以用来训练一定 网络的权值和偏差使之线性地逼近一个函数式而进行模式联想( Pattern Association) 定义一个线性网络的输出误差函数为 E(W,B)=[T-A]=T-WP] (5.1) I(5.1)式可以看出:线性网络具有抛物线型误差函数所形成的误差表面 所以只有一个误差最小值。通过W一H学习规则来计算权值和偏差的变化,并 使网络误差的平方和最小化,总能够训练一个网络的误差趋于这个最小值。另外 很显然,E(W,B)只取决于网络的权值及目标矢量。我们的目的是通过调节权矢 量,使E(W,B达到最小值。所以在给定E(W,B)后,利用W-H学习规则修 正权矢量和偏差矢量,使E(W,B)从误差空间的某一点开始,沿着E(W,B)的 斜面向下滑行。根据梯度下降法,权矢量的修正值正比于当前位置上E(W,B) 的梯度,对于第i个输出节点有 dE wij dw=n[=; lp (52) 或表示为 △w=n △b;=n6 (53) 这里δ定义为第i个输出节点的误差:
2 单层线性网络与多层线性网络具有同样的能力,即对于每一个多层线性网络,都 具有一个等效的单层线性网络与之对应。在反向传播法产生以后,威德罗又将其 自适应线性网络扩展成多层,甚至将激活函数也扩展成非线性的了。 5.2 W-H 学习规则 W—H 学习规则是由威德罗和霍夫提出的用来修正权矢量的学习规则,所以 用他们两人姓氏的第一个字母来命名。采用 W—H 学习规则可以用来训练一定 网 络 的 权值 和偏 差 使之 线 性地 逼 近一 个 函数 式而 进 行模 式 联想 (Pattern Association)。 定义一个线性网络的输出误差函数为: (5. 1) 由(5.1)式可以看出:线性网络具有抛物线型误差函数所形成的误差表面, 所以只有一个误差最小值。通过 W—H 学习规则来计算权值和偏差的变化,并 使网络误差的平方和最小化,总能够训练一个网络的误差趋于这个最小值。另外 很显然,E(W,B)只取决于网络的权值及目标矢量。我们的目的是通过调节权矢 量,使 E(W,B)达到最小值。所以在给定 E(W,B)后,利用 W—H 学习规则修 正权矢量和偏差矢量,使 E(W,B)从误差空间的某一点开始,沿着 E(W,B)的 斜面向下滑行。根据梯度下降法,权矢量的修正值正比于当前位置上 E(W,B) 的梯度,对于第 i 个输出节点有: (5.2) 或表示为: (5.3) 这里 定义为第 i 个输出节点的误差:
54) (53)式称为W一H学习规则,又叫δ规则,或为最小均方差算法(LMS)。 W-H学习规则的权值变化量正比于网络的输出误差及网络的输入矢量。它不需 求导数,所以算法简单,又具有收敛速度快和精度髙的优点 (5.3)式中的η为学习速率。在一般的实际运用中,实践表明,η通常取一 接近1的数,或取值为 门=0.99* max[det(P*P 这样的选择可以达到既快速又正确的结果。 学习速率的这一取法在神经网络工具箱中用函数 maxlinIrm来实现。(5.5) 式可实现为: Ir=0.99*maxlinlr(P, 1); 其中lr为学习速率 W-H学习规则的函数为: learnwh n来实现,另外,加上线性自适应网络 输出函数 purelin.m,可以写出W-H学习规则的计算公式为 pu E=T—A; Idw, dB]=learnwh(P, E, h); W=W十dW B=B十dB 采用W一H规则训练自适应线性元件使其能够得以收敛的必要条件是被训 练的输入矢量必须是线性独立的,且应适当地选择学习速率以防止产生振荡现 象 5.3网络训练 自适应线性元件的网络训练过程可以归纳为以下三个步骤:
3 (5.4) (5.3)式称为 W—H 学习规则,又叫δ规则,或为最小均方差算法(LMS)。 W—H 学习规则的权值变化量正比于网络的输出误差及网络的输入矢量。它不需 求导数,所以算法简单,又具有收敛速度快和精度高的优点。 (5.3)式中的η为学习速率。在一般的实际运用中,实践表明,η通常取一 接近 1 的数,或取值为: (5.5) 这样的选择可以达到既快速又正确的结果。 学习速率的这一取法在神经网络工具箱中用函数 maxlinlr.m 来实现。(5.5) 式可实现为: 其中 lr 为学习速率。 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 2检查:将网络输出误差的平方和与期望误差相比较,如果其值小于期望误 差,或训练已达到事先设定的最大训练次数,则停止训练;否则继续 3)学习:采用W一H学习规则计算新的权值和偏差,并返回到1)。 每进行一次上述三个步骤,被认为是完成一个训练循环次数 如果网络训练获得成功,那么当一个不在训练中的输入矢量输入到网络中 时,网络趋于产生一个与其相联想的输出矢量。这个特性被称为泛化,这在函数 逼近以及输入矢量分类的应用中是相当有用的。 如果经过训练,网络仍不能达到期望目标,可以有两种选择:或检查一下所 要解决的问题,是否适用于线性网络;或对网络进行进一步的训练。 虽然只适用于线性网络,W一H学习规则仍然是重要的,因为它展现了梯度 下降法是如何来训练一个网络的,此概念后来发展成反向传播法,使之可以训练 多层非线性网络。 采用 Matlab进行自适应线性元件网络的训练过程如下: %表达式 A=purelin(W",B); E=T-A SSE=sumsqr(e) %求误差平方和 for epoch=1: max epoch%循环训练 if Sse< err goal%比较误差 epoch=epoch--1 break %若满足期望误差要求,结束训练 dlw,dB]= learnwh(P,E,r);%修正权值 W=W十dW: B=B十dB A=purelin(W"P, B %网络输出 E=T-A
4 1)表达:计算训练的输出矢量 A=W*P 十 B,以及与期望输出之间的误差 E =T—A; 2)检查:将网络输出误差的平方和与期望误差相比较,如果其值小于期望误 差,或训练已达到事先设定的最大训练次数,则停止训练;否则继续; 3)学习:采用 W—H 学习规则计算新的权值和偏差,并返回到 1)。 每进行一次上述三个步骤,被认为是完成一个训练循环次数。 如果网络训练获得成功,那么当一个不在训练中的输入矢量输入到网络中 时,网络趋于产生一个与其相联想的输出矢量。这个特性被称为泛化,这在函数 逼近以及输入矢量分类的应用中是相当有用的。 如果经过训练,网络仍不能达到期望目标,可以有两种选择:或检查一下所 要解决的问题,是否适用于线性网络;或对网络进行进一步的训练。 虽然只适用于线性网络,W—H 学习规则仍然是重要的,因为它展现了梯度 下降法是如何来训练一个网络的,此概念后来发展成反向传播法,使之可以训练 多层非线性网络。 采用 Matlab 进行自适应线性元件网络的训练过程如下: %表达式 A=purelin(W*P,B); E=T-A; SSE=sumsqr(E); %求误差平方和 for epoch=1: max_epoch%循环训练 if SSE<err_goal %比较误差 epoch=epoch—1; break %若满足期望误差要求,结束训练 end [dlw,dB]=1earnwh(P,E,lr);%修正权值 W=W 十 dW; B=B 十 dB; A=purelin(W*P,B); %网络输出 E=T-A;
SSE=sumsqr(E); %计算网络误差平方和 end 同样,工具箱中设计了一个名为 trainwh m的函数可以替代上述整个训练过 如果仍用在输入空间作图法来解释自适应线性元件网络的功能,它可以解释 为用W*P十B=0的界面通过给出的输入矢量组成的空间(点或线),或线性地逼 近这些输入矢量 在5.4节中首先给出一些简单的例题来了解自适应线性元件的功能。 5.4例题与分析 「例5.订设计自适应线性网络实现从输入矢量到输出矢量的变换关系。其输 入矢量和输出矢量分别为 P=[0-1.2] T=[051.0] 解 用自适应线性网络求解问题时,设计者要确定期望误差值,以及最大循环次 数。对此题可分别选 err goal=0001; max epoch=20。自适应线性网络设计程 序可写为: %wilm P=[1-1.2]; T=[0.51 R,Q=size(P); TW, B]=rands(s, R) max epoch =20 %最大循环次数 err goal=0. 001 %期望误差 Ir=0.4*maxlinlr(P); %最佳学习速率 disp freq=1; %设置显示频率
5 SSE=sumsqr(E); %计算网络误差平方和 end 同样,工具箱中设计了一个名为 trainwh.m 的函数可以替代上述整个训练过 程。 如果仍用在输入空间作图法来解释自适应线性元件网络的功能,它可以解释 为用 W*P 十 B=0 的界面通过给出的输入矢量组成的空间(点或线),或线性地逼 近这些输入矢量。 在 5.4 节中首先给出一些简单的例题来了解自适应线性元件的功能。 5.4 例题与分析 [例 5.1]设计自适应线性网络实现从输入矢量到输出矢量的变换关系。其输 入矢量和输出矢量分别为: P=[1.0 -1.2] T=[0.5 1.0] 解: 用自适应线性网络求解问题时,设计者要确定期望误差值,以及最大循环次 数。对此题可分别选 err_goal=0.001;max_epoch=20。自适应线性网络设计程 序可写为: %wf1.m % P=[1 -1.2]; T=[0.5 1]; [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 freq max epoch err goal Ir;%设置参数变量TP W,B, epochs,eror]= trainwh(W,B,P,T,TP)%进行线性网络权值训 练 在随机初始值为:Wo=-0.9309;Bo=-0.8931的情况下,经过12次循环 训练后,网络的输出误差平方和达到0000949,网络的最终权值为 W=-0.2354;B=0.7066 实际上,对于[例51这个简单的例题,它存在一个精确解,且可以用解二元 次方程的方式将P和T值分别对应地代入方程T=W*P十B得: W+B=05 12W+B=10 可解出e=TA=0的解为 W=-0.2273;B=0.7273 由此看出,对于特别简单的问题,采用自适应线性网络的训练不一定能够得 到足够精确的解。因为当训练误差达到期望误差值后,训练即被终止, 对于具有零误差的自适应线性网络,即输入输出矢量对存在着严格的线性关 系,此时的自适应线性网络的设计可以采用工具箱中另外一个名为 solvelin. m的 函数。以例5.1为例,可简单用下面的命令: 》W,B]= solvelin(P,T 可立即得到精确解: W=-0.2273 B=0.7273 然后可用 simulinn函数来检测所设计的网络 》A= simulin(P,W,B) A= 0.500010000 还可以用 sumsqr m函数来求出误差平方和 》SSE= suman(TA) SSE 6
6 TP=[disp_freq max_epoch err_goal lr]; %设置参数变量 TP [W,B,epochs,error]=trainwh(W,B,P,T,TP) %进行线性网络权值训 练 end 在随机初始值为: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 的 函数。以[例 5.1]为例,可简单用下面的命令: 》[W,B]=solvelin(P,T) 可立即得到精确解: W=—0.2273 B=0.7273 然后可用 simulin.m 函数来检测所设计的网络: 》A=simulin(P,W,B) A= 0.5000 1.0000 还可以用 sumsqr.m 函数来求出误差平方和: 》SSE=sumsqr(T-A) SSE= 0
可见所设计网络的误差为零。 例5.2现在来考虑一个较大的多神经元网络的模式联想的设计问题。输入 矢量和目标矢量分别为 P=[11.51.2-03; 1230.5 21-1609]; T=[0.53-2.214; 1.1-121.7-04 302-1.804 0.1-1.00.6]; 解 由输入矢量和目标输出矢量可得:r=3,s=4,q=4。所以网络的结构如图 2所示 P P2 43 图52网络设计的结构图 这个问题的求解同样可以采用线性方程组求出,即对每一个输出节点写出输 入和输出之间的关系等式。对于网络每一个输出神经元都有4个变量(三个权值 加一个偏差),有四个限制方程(每组输入对应四个输出值)。这样由四个输出节点, 共产生16个方程,其方程数目与权值数目相等。所以只要输入矢量是线性独立 的,则同时满足这16个方程的权值存在且唯一。对应到网络上来说,则存在零 误差的精确权值
7 可见所设计网络的误差为零。 [例 5.2]现在来考虑一个较大的多神经元网络的模式联想的设计问题。输入 矢量和目标矢量分别为: 解: 由输入矢量和目标输出矢量可得:r=3,s=4,q=4。所以网络的结构如图 5.2 所示。 图 5.2 网络设计的结构图 这个问题的求解同样可以采用线性方程组求出,即对每一个输出节点写出输 入和输出之间的关系等式。对于网络每一个输出神经元都有 4 个变量(三个权值 加一个偏差),有四个限制方程(每组输入对应四个输出值)。这样由四个输出节点, 共产生 16 个方程,其方程数目与权值数目相等。所以只要输入矢量是线性独立 的,则同时满足这 16 个方程的权值存在且唯一。对应到网络上来说,则存在零 误差的精确权值
实际上要求出这16个方程的解是需要花费一定的时间的,甚至是不太容易 的。对于一些实际问题,常常并不需要求出其完美的零误差时的解。也就是说允 许存在一定的误差。在这种情况下,采用自适应线性网络求解就显示出它的优越 性:因为它可以很快地训练出满足一定要求的网络权值。对于有完美解的网络设 计,通过对期望误差平方和的选定,也能通过加长训练次数来获得 下面给出例5.2]的设计程序。为了便于对比,在程序中增加了以下几项 1)训练前由初始权值所得到的误差平方和 2)最终误差及训练次数的显示 3)整个训练过程中的网络误差的记录显示 4)最终权值。 %wf2. m P=[11.51.2-.3;-123-0.5;21-1609} T=0.53-2214;1.1-121.7-0.4;30.2-18-0.4;-10.1-100.6] disp freq=400 %中间不显示结果 max epoch=400 err goal=0.001 Ir=0.9* maxlinlr(P); W=[19978-0.5959-0.3517;1.55430.053311.3660 %初始权值 1.06720.3645-0.9227;-0.77471.3839-0.384] B=[0.0746;-0.0642;-0.4256;-0.6433] SSE=sumsqr(T-purelin(W"P,B)): %未训练前误差 fprintf(Before training, sum squared error= %g In, SSE %训练网络 flops(0) tp=[disp freq max epoch err goal Ir]: %设置参数变量t W, B, epochs, errors]=trainwh(W, B, P, t, tp); %进行线性网络权值训练 %显示最终训练权矢量 B %显示最终训练偏差矢量
8 实际上要求出这 16 个方程的解是需要花费一定的时间的,甚至是不太容易 的。对于一些实际问题,常常并不需要求出其完美的零误差时的解。也就是说允 许存在一定的误差。在这种情况下,采用自适应线性网络求解就显示出它的优越 性:因为它可以很快地训练出满足一定要求的网络权值。对于有完美解的网络设 计,通过对期望误差平方和的选定,也能通过加长训练次数来获得。 下面给出[例 5.2]的设计程序。为了便于对比,在程序中增加了以下几项: 1)训练前由初始权值所得到的误差平方和; 2)最终误差及训练次数的显示; 3)整个训练过程中的网络误差的记录显示; 4)最终权值。 %wf2.m % P=[1 1.5 1.2 –0.3; -1 2 3 –0.5; 2 1 –1.6 0.9]; T=[0.5 3 –2.2 1.4; 1.1 –1.2 1.7 –0.4; 3 0.2 –1.8 –0.4; -1 0.1 –1.0 0.6]; disp_freq=400; %中间不显示结果 max_epoch=400; err_goal=0.001; lr=0.9*maxlinlr(P); W=[1.9978 –0.5959 –0.3517; 1.5543 0.05331 1.3660; %初始权值 1.0672 0.3645 –0.9227; -0.7747 1.3839 –0.3384]; B=[0.0746; -0.0642; -0.4256; -0.6433]; SSE=sumsqr(T-purelin(W*P,B)); %未训练前误差 fprintf(‘Before trainihg, sum squared error=%g. \n’, SSE) %训练网络 flops(0) tp=[disp_freq max_epoch err_goal lr]; %设置参数变量 tp [W, B, epochs,errors]=trainwh(W, B, P, T, tp); %进行线性网络权值训练 W %显示最终训练权矢量 B %显示最终训练偏差矢量
SSE=sumsqr(T-purelin(W*P, b)); %最终误差 %显示结果并给出结论 plo oterr(errors) fprintf('n After%Of epochs, sum squared e error=%g. nIn', SsE) fprintf( Training took %. Of flops. n', flops) printf( Trained network operates: ) if sse <err goal disp('adequately') disp(inadequately. end end 运行w2m在训练274次循环后其误差平方和达到0.000993245,而初始误 差为144463。在整个训练过程中误差的变化走向如图5.3所示 训练后的网络权值为: W=[-2.46122.28433.1529; 2,1895-18132-2.0605 20821-1.260400480: 166150.97790.9928]; B=[-1.0440;12099;0.4448;0.3137;
9 SSE=sumsqr(T-purelin(W*P, B)); %最终误差 %显示结果并给出结论 ploterr(errors), fprintf (‘\n After%.0f epochs,sum squared e error=%g. \n\n’, SSE), fprintf (‘Training took %.0f flops. \n’, flops), fprintf (‘ Trained network operates:’); if SSE<err_goal disp(‘Adequately.’) else disp(‘Inadequately.’) end end 运行 wf2.m 在训练 274 次循环后其误差平方和达到 0.000993245,而初始误 差为 144.463。在整个训练过程中误差的变化走向如图 5.3 所示。 训练后的网络权值为:
0 10 10 100 200 图5.3网络训练过程中的误差记录 对于存在零误差的精确权值网络,若用函数 solvelin. m来求解,则更加简单 如下: %wf3. m P=[l1.51.2-0.3;-123-0.5;21-1.609 T=[053-2214;1.1-1.21.7-04;30.2-1.8-0.4-10.1-100.6] W, B=solvelin(P,T); A=simulin(P, W,B) IT-A) end 由此可得零误差的唯一精确解为:
10 图 5.3 网络训练过程中的误差记录 对于存在零误差的精确权值网络,若用函数 solvelin.m 来求解,则更加简单 如下: %wf3.m % P=[1 1.5 1.2 –0.3; -1 2 3 –0.5; 2 1 –1.6 0.9]; T=[0.5 3 –2.2 1.4; 1.1 –1.2 1.7 –0.4; 3 0.2 –1.8 -0.4; -1 0.1 –1.0 0.6]; [W,B]=solvelin(P,T); A=simulin (P, W, B); SSE=sumsqr (T-A) W B end 由此可得零误差的唯一精确解为: