第06讲反向传播网络 给定任意E>0和任意La函数f:[0,1∈R→Rm,存在一个三层BP网络,可以在 任意E平方误差精度内逼近∫ 实现任意N个输入向量构成的任何布尔函数的前向网络所需权系数数目为 1+log, N 我们前面讲到的感知器神经网络和线性神经元网络均为单层网络结构,其传递函数都十 分简单,感知器为单边符号函数,线性神经网络为纯线性函数。在此,我们将上面网络结构 进行推广,推广到多层网络,并且将传递函数变为非线性可微分函数,这就是BP网络。 反向传播网络( Back-Propagation Network,简称BP网络)是将W-H学习规则一般化, 对非线性可微分函数进行权值训练的多层网络。 由于感知器神经网络中神经元的变换函数采用符号函数,其输出为二值量,因此它主要 用于模式分类。BP网络是一种多层前向反馈神经网络,其神经元的变换函数是S型函数, 因此输出量为0到1之间的连续量,它可以实现从输入到输出的任意的非线性映射。由于其 权值的调整采用反向传播( Backpropagation)的学习算法,因此被称为BP网络 BP网络主要用于 1)函数逼近:用输入矢量和相应的输出矢量训练一个网络逼近一个函数 2)模式识别:用一个特定的输出矢量将它与输入矢量联系起来 3)分类:把输入矢量以所定义的合适方式进行分类 4)数据压缩:减少输出矢量维数以便于传输或存储。 在人工神经网络的实际应用中,80%~90%的人工神经网络模型是采用BP网络或它的 变化形式,它也是前向网络的核心部分,体现了人工神经网络最精华的部分。在人们掌握反 向传播网络的设计之前,感知器和自适应线性元件都只能适用于对单层网络模型的训练,只 是后来才得到了进一步拓展
1 第 06 讲 反向传播网络 给定任意 0 和任意 L2 函数 :[0,1]n n m f R R → ,存在一个三层 BP 网络,可以在 任意 平方误差精度内逼近 f 。 实现任意 N 个输入向量构成的任何布尔函数的前向网络所需权系数数目为: 2 1 log N W N + 我们前面讲到的感知器神经网络和线性神经元网络均为单层网络结构,其传递函数都十 分简单,感知器为单边符号函数,线性神经网络为纯线性函数。在此,我们将上面网络结构 进行推广,推广到多层网络,并且将传递函数变为非线性可微分函数,这就是 BP 网络。 反向传播网络(Back—Propagation Network,简称 BP 网络)是将 W—H 学习规则一般化, 对非线性可微分函数进行权值训练的多层网络。 由于感知器神经网络中神经元的变换函数采用符号函数,其输出为二值量,因此它主要 用于模式分类。BP 网络是一种多层前向反馈神经网络,其神经元的变换函数是 S 型函数, 因此输出量为 0 到 1 之间的连续量,它可以实现从输入到输出的任意的非线性映射。由于其 权值的调整采用反向传播(Backpropagation)的学习算法,因此被称为 BP 网络。 BP 网络主要用于: 1)函数逼近:用输入矢量和相应的输出矢量训练一个网络逼近—个函数; 2)模式识别:用一个特定的输出矢量将它与输入矢量联系起来; 3)分类:把输入矢量以所定义的合适方式进行分类; 4)数据压缩:减少输出矢量维数以便于传输或存储。 在人工神经网络的实际应用中,80%~90%的人工神经网络模型是采用 BP 网络或它的 变化形式,它也是前向网络的核心部分,体现了人工神经网络最精华的部分。在人们掌握反 向传播网络的设计之前,感知器和自适应线性元件都只能适用于对单层网络模型的训练,只 是后来才得到了进一步拓展
6.1BP网络模型与结构 一个具有r个输入和一个隐含层的神经网络模型结构如图6.1所示 SIrr ,网 k A2 l q [2 sIxl 2 i=1,2,…,s1;k=l,2,…,s2; j=l,2,…,r 图6.1具有一个隐含层的神经网络模型结构图 感知器和自适应线性元件的主要差别在激活函数上:前者是二值型的,后者是线性的。 BP网络具有一层或多层隐含层,除了在多层网络上与前面已介绍过的模型有不同外,其主 要差别也表现在激活函数上。BP网络的激活函数必须是处处可微的,所以它就不能采用二 值型的阀值函数{0,1}或符号函数{—1,1},BP网络经常使用的是S型的对数或正切激活 函数和线性函数 图6.2所示的是S型激活函数的图形。可以看到f()是一个连续可微的函数,其 阶导数存在。对于多层网络,这种激活函数所划分的区域不再是线性划分,而是由一个非线 性的超平面组成的区域。它是比较柔和、光滑的任意界面,因而它的分类比线性划分精确 合理,这种网络的容错性较好。另外一个重要的特点是由于激活函数是连续可微的,它可以 严格利用梯度法进行推算,它的权值修正的解析式十分明确,其算法被称为误差反向传播法, 也简称BP算法,这种网络也称为BP网络
2 6.1 BP 网络模型与结构 一个具有 r 个输入和一个隐含层的神经网络模型结构如图 6.1 所示。 图 6.1 具有一个隐含层的神经网络模型结构图 感知器和自适应线性元件的主要差别在激活函数上:前者是二值型的,后者是线性的。 BP 网络具有一层或多层隐含层,除了在多层网络上与前面已介绍过的模型有不同外,其主 要差别也表现在激活函数上。BP 网络的激活函数必须是处处可微的,所以它就不能采用二 值型的阀值函数{0,1}或符号函数{—1,1},BP 网络经常使用的是 S 型的对数或正切激活 函数和线性函数。 图 6.2 所示的是 S 型激活函数的图形。可以看到 f(·)是一个连续可微的函数,其一 阶导数存在。对于多层网络,这种激活函数所划分的区域不再是线性划分,而是由一个非线 性的超平面组成的区域。它是比较柔和、光滑的任意界面,因而它的分类比线性划分精确、 合理,这种网络的容错性较好。另外一个重要的特点是由于激活函数是连续可微的,它可以 严格利用梯度法进行推算,它的权值修正的解析式十分明确,其算法被称为误差反向传播法, 也简称 BP 算法,这种网络也称为 BP 网络
图6.2BP网络S型激活函数 因为S型函数具有非线性放大系数功能,它可以把输入从负无穷大到正无穷大的信号, 变换成-1到1之间输出,对较大的输入信号,放大系数较小;而对较小的输入信号,放大系 数则较大,所以采用S型激活函数可以去处理和逼近非线性的输入输出关系。不过,如果 在输出层采用S型函数,输出则被限制到一个很小的范围了,若采用线性激活函数,则可 使网络输出任何值。所以只有当希望对网络的输出进行限制,如限制在0和1之间,那么在 输出层应当包含S型激活函数,在一般情况下,均是在隐含层采用S型激活函数,而输出 层采用线性激活函数 BP网络的特点 输入和输出是并行的模拟量 2、网络的输入输出关系是各层连接的权因子决定,没有固定的算法; 3、权因子是通过学习信号调节的,这样学习越多,网络越聪明 4、隐含层越多,网络输出精度越高,且个别权因子的损坏不会对网络输出产生大的影 6.2BP学习规则 BP网络的产生归功于BP算法的获得。BP算法属于δ算法,是一种监督式的学习算法。 其主要思想为:对于q个输入学习样本:P,P2,P,已知与其对应的输出样本为:T T2,T。学习的目的是用网络的实际输出A,A2,…A,与目标矢量T,T2,T, 之间的误差来修改其权值,使A,(=l,2…,q)与期望的T尽可能地接近;即:使网络输 出层的误差平方和达到最小。它是通过连续不断地在相对于误差函数斜率下降的方向上计算 网络权值和偏差的变化而逐渐逼近目标的。每一次权值和偏差的变化都与网络误差的影响成
3 图 6. 2 BP 网络 S 型激活函数 因为 S 型函数具有非线性放大系数功能,它可以把输入从负无穷大到正无穷大的信号, 变换成-1 到 l 之间输出,对较大的输入信号,放大系数较小;而对较小的输入信号,放大系 数则较大,所以采用 S 型激活函数可以去处理和逼近非线性的输入/输出关系。不过,如果 在输出层采用 S 型函数,输出则被限制到一个很小的范围了,若采用线性激活函数,则可 使网络输出任何值。所以只有当希望对网络的输出进行限制,如限制在 0 和 1 之间,那么在 输出层应当包含 S 型激活函数,在一般情况下,均是在隐含层采用 S 型激活函数,而输出 层采用线性激活函数。 BP 网络的特点: 1、 输入和输出是并行的模拟量; 2、 网络的输入输出关系是各层连接的权因子决定,没有固定的算法; 3、 权因子是通过学习信号调节的,这样学习越多,网络越聪明; 4、 隐含层越多,网络输出精度越高,且个别权因子的损坏不会对网络输出产生大的影 响。 6.2 BP 学习规则 BP 网络的产生归功于 BP 算法的获得。BP 算法属于δ算法,是一种监督式的学习算法。 其主要思想为:对于 q 个输入学习样本:P 1,P 2,……P q,已知与其对应的输出样本为:T 1, T 2,……T q。学习的目的是用网络的实际输出 A1,A2,……Aq,与目标矢量 T 1,T 2,……T q, 之间的误差来修改其权值,使 Al,(l=l,2…,q)与期望的 T l 尽可能地接近;即:使网络输 出层的误差平方和达到最小。它是通过连续不断地在相对于误差函数斜率下降的方向上计算 网络权值和偏差的变化而逐渐逼近目标的。每一次权值和偏差的变化都与网络误差的影响成
正比,并以反向传播的方式传递到每一层的 BP算法是由两部分组成:信息的正向传递与误差的反向传播。在正向传播过程中,输 入信息从输入经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状 态。如果在输出层没有得到期望的输出,则计算输出层的误差变化值,然后转向反向传播, 通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标。 为了明确起见,现以图6.1所示两层网络为例进行BP算法推导,其简化图如图6.3 所 w2 ki k k=l,2,,s2;i=1,2,…,sl, j=l,2,…,F 图6.3具有一个隐含层的简化网络图 设输入为P,输入神经元有r个,隐含层内有sl个神经元,激活函数为F1,输出层内 有s2个神经元,对应的激活函数为F2,输出为A,目标矢量为T 6.2.1信息的正向传递 1)隐含层中第i个神经元的输出为: nl2=∫1(∑w1j+b1),i=1,2,…,.l (6.1) 2)输出层第k个神经元的输出为
4 正比,并以反向传播的方式传递到每一层的。 BP 算法是由两部分组成:信息的正向传递与误差的反向传播。在正向传播过程中,输 入信息从输入经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状 态。如果在输出层没有得到期望的输出,则计算输出层的误差变化值,然后转向反向传播, 通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标。 为了明确起见,现以图 6.1 所示两层网络为例进行 BP 算法推导,其简化图如图 6.3 所。 图 6.3 具有一个隐含层的简化网络图 设输入为 P,输入神经元有 r 个,隐含层内有 s1 个神经元,激活函数为 F1,输出层内 有 s2 个神经元,对应的激活函数为 F2,输出为 A,目标矢量为 T。 6.2.1 信息的正向传递 1)隐含层中第 i 个神经元的输出为: (6.1) 2)输出层第 k 个神经元的输出为:
2 k=f2(>w2kiali +b2k),k=1, = 3)定义误差函数为: EW,B)=∑(tk-a2k) 6.2.2利用梯度下降法求权值变化及误差的反向传播 (1)输出层的权值变化 对从第i个输入到第k个输出的权值有: dE de da2 2k=-n n ki k ki η(t ali sn o kia 其中 6=(tk-a2)=ek2 (6.5)(6.6) 同理可得: E dE 12k △b2ki=-n 0b2 n k da2k a62 ki m(tk-a2k)·f2′=n·8k (2)隐含层权值变化 对从第j个输入到第i个输出的权值,有: E E dwi dali dwi ∑ k)·∫2′·w2kif1′·pj=η·8i·pj 其中
5 (6.2) 3)定义误差函数为: (6.3) 6.2.2 利用梯度下降法求权值变化及误差的反向传播 (1)输出层的权值变化 对从第 i 个输入到第 k 个输出的权值有: (6.4) 其中: (6.5)(6.6) 同理可得: (6.7) (2)隐含层权值变化 对从第 j 个输入到第 i 个输出的权值,有: (6.8) 其中:
δi=er·f1’,eit ∑ kiw∠ki (69) 同理可得 i=no ij (6.10) 在 MATLAB工具箱中,上述公式的计算均已编成函数的形式,通过简单的书写调用即 可方便地获得结果。具体有 1)对于(6.1)式所表示的隐含层输出,若采用对数S型激活函数,则用函数 logsig.m 若采用双曲正切S型激活函数,则用函数 tansig n 2)对于(6.2)式所表示的输出层输出,若采用线性激活函数有 purelin. m与之对应; 3)对于(6.3)式所表示的误差函数,可用函数 summar. m求之 4)有 learnbp. m函数专门求(6.4)、(6.T、(6.8)和6.10)式所表示的输出层以及隐含 层中权值与偏差的变化量; 5)由(65)和(69)式所表示的误差的变化有函数 deltalin. m、 deltatan. m、 deltalog. m来解决 它们分别用于线性层、双曲正切层和对数层 6.2.3误差反向传播的流程图与图形解释 误差反向传播过程实际上是通过计算输出层的误差ek,然后将其与输出层激活函数的 阶导数n2相乘来求得δ。由于隐含层中没有直接给出目标矢量,所以利用输出层的δk反 e=∑δxw2 向传递来求出隐含层权值的变化量△w2。然后计算k=1 ,并同样通过将e 与该层激活函数的一阶导数f’相乘,而求得δ,以此求出前层权值的变化量△wli。如果 前面还有隐含层,沿用上述同样方法依此类推,一直将输出误差ek一层一层的反推算到第 层为止。图6.4给出了形象的解释 6
6 (6.9) 同理可得: (6.10) 在 MATLAB 工具箱中,上述公式的计算均已编成函数的形式,通过简单的书写调用即 可方便地获得结果。具体有: 1)对于(6.1)式所表示的隐含层输出,若采用对数 S 型激活函数,则用函数 logsig.m; 若采用双曲正切 S 型激活函数,则用函数 tansig.m; 2)对于(6.2)式所表示的输出层输出,若采用线性激活函数有 purelin.m 与之对应; 3)对于(6.3)式所表示的误差函数,可用函数 sumsqr.m 求之; 4)有 learnbp.m 函数专门求(6.4)、(6.7)、(6.8)和(6.10)式所表示的输出层以及隐含 层中权值与偏差的变化量; 5)由(6.5)和(6.9)式所表示的误差的变化有函数 deltalin.m、deltatan.m、deltalog.m 来解决。 它们分别用于线性层、双曲正切层和对数层。 6.2.3 误差反向传播的流程图与图形解释 误差反向传播过程实际上是通过计算输出层的误差 ek,然后将其与输出层激活函数的一 阶导数 f2’相乘来求得δki。由于隐含层中没有直接给出目标矢量,所以利用输出层的δki 反 向传递来求出隐含层权值的变化量Δw2ki。然后计算 ,并同样通过将 ei 与该层激活函数的一阶导数 f1’相乘,而求得δij,以此求出前层权值的变化量Δw1ij。如果 前面还有隐含层,沿用上述同样方法依此类推,一直将输出误差 ek 一层一层的反推算到第 一层为止。图 6.4 给出了形象的解释
k=1,2,…,s2;i=1,2,…,sl j=l,2,…,F 图6.4误差反向传播法的图形解释 BP算法要用到各层激活函数的一阶导数,所以要求其激活函数处处可微。对于对数S f(m)= 型激活函数 1+e 其导数为: f(n)= 0-eh(-1) (1 n2(+e (1+e +e (1 -)=f(n)[1-f(n) +e 1+e 对于线性函数的导数有 f′(m)=n′=l 所以对于具有一个S型函数的隐含层,输出层为线性函数的网络,有: 几2′=1,n′=a(1-a) 63BP网络的训练过程 为了训练一个BP网络,需要计算网络加权输入矢量以及网络输出和误差矢量,然后求 得误差平方和。当所训练矢量的误差平方和小于误差目标,训练则停止,否则在输出层计算 误差变化,且采用反向传播学习规则来调整权值,并重复此过程。当网络完成训练后,对网 络输入一个不是训练集合中的矢量,网络将以泛化方式给出输出结果 在动手编写网络的程序设计之前,必须首先根据具体的问题给出的输入矢量P与目标 矢量T,并选定所要设计的神经网络的结构,其中包括以下内容:
7 图 6.4 误差反向传播法的图形解释 BP 算法要用到各层激活函数的一阶导数,所以要求其激活函数处处可微。对于对数 S 型激活函数 ,其导数为: 对于线性函数的导数有: 所以对于具有一个 S 型函数的隐含层,输出层为线性函数的网络,有: 6.3 BP 网络的训练过程 为了训练一个 BP 网络,需要计算网络加权输入矢量以及网络输出和误差矢量,然后求 得误差平方和。当所训练矢量的误差平方和小于误差目标,训练则停止,否则在输出层计算 误差变化,且采用反向传播学习规则来调整权值,并重复此过程。当网络完成训练后,对网 络输入一个不是训练集合中的矢量,网络将以泛化方式给出输出结果。 在动手编写网络的程序设计之前,必须首先根据具体的问题给出的输入矢量 P 与目标 矢量 T,并选定所要设计的神经网络的结构,其中包括以下内容:
①网络的层数:②每层的神经元数:③每层的激活函数 由于BP网络的层数较多且每层神经元也较多,加上输入矢量的组数庞大,往往使得采 用一般的程序设计出现循环套循环的复杂嵌套程序,从而使得程序编得既费时,又不易调通, 浪费了大量的时间在编程中而无暇顾及如何设计出具有更好性能的网络来。在这点上 MatLAB工具箱充分展示出其神到之处。它的全部运算均采用矩阵形式,使其训练既简单, 又明了快速。为了能够较好地掌握BP网络的训练过程,下面我们仍用两层网络为例来叙述 BP网络的训练步骤 1)用小的随机数对每一层的权值W和偏差B初始化,以保证网络不被大的加权输入饱 和;并进行以下参数的设定或初始化: a)期望误差最小值 error goal b)最大循环次数max_ epoch c)修正权值的学习速率Ir,一般情况下k=0.0l-0.7 d从1开始的循环训练: for epoch=1:max_ epoch; 2)计算网络各层输出矢量A1和A2以及网络误差E nsig(W1"P, Bl): A2=purelin(W2 Al, B2) 3)计算各层反传的误差变化D2和D1并计算各层权值的修正值以及新权值 D2=deltalin(A2, E): DI=deltatan(Al, D2, W2) Idiwl, dBl]=learnbp(P, DI, Ir); Idw2, dB2]=learnbp(Al, D2, Ir): Wl=W1+dW1:Bl=B1十dBl W2=W2十dW2:B2=B2+dB2 4)再次计算权值修正后误差平方和 SSE=sumsqr(T-purelin( W2*tansig(WI*P, Bl),B2)) 5)检査SSE是否小于 err goal,若是,训练结束;否则继续 以上就是BP网络在 MATLAB中的训练过程。可以看出其程序是相当简单明了的。即 使如此,以上所有的学习规则与训练的全过程,仍然可以用函数 trainbp. m来完成。它的使 用同样只需要定义有关参数:显示间隔次数,最大循环次数,目标误差,以及学习速率,而
8 ①网络的层数;②每层的神经元数;③每层的激活函数。 由于 BP 网络的层数较多且每层神经元也较多,加上输入矢量的组数庞大,往往使得采 用一般的程序设计出现循环套循环的复杂嵌套程序,从而使得程序编得既费时,又不易调通, 浪费了大量的时间在编程中而无暇顾及如何设计出具有更好性能的网络来。在这点上 MatLAB 工具箱充分展示出其神到之处。它的全部运算均采用矩阵形式,使其训练既简单, 又明了快速。为了能够较好地掌握 BP 网络的训练过程,下面我们仍用两层网络为例来叙述 BP 网络的训练步骤。 1)用小的随机数对每一层的权值 W 和偏差 B 初始化,以保证网络不被大的加权输入饱 和;并进行以下参数的设定或初始化: a)期望误差最小值 error_goal; b)最大循环次数 max_epoch; c)修正权值的学习速率 1r,一般情况下 k=0.0l~0.7; d)从 1 开始的循环训练: for epoch=1:max_epoch; 2)计算网络各层输出矢量 A1 和 A2 以及网络误差 E: A1=tansig(W1*P,B1); A2=purelin(W2*A1,B2); E=T-A; 3)计算各层反传的误差变化 D2 和 D1 并计算各层权值的修正值以及新权值: D2=deltalin(A2,E); D1=deltatan(A1,D2,W2); [dlWl,dBl]=learnbp(P,D1,lr); [dW2,dB2]=1earnbp(A1,D2,1r); W1=W1 十 dW1;B1=B1 十 dBl; W2=W2 十 dW2;B2=B2 十 dB2; 4)再次计算权值修正后误差平方和: SSE=sumsqr(T-purelin(W2*tansig(W1*P,B1),B2)); 5)检查 SSE 是否小于 err_goal,若是,训练结束;否则继续。 以上就是 BP 网络在 MATLAB 中的训练过程。可以看出其程序是相当简单明了的。即 使如此,以上所有的学习规则与训练的全过程,仍然可以用函数 trainbp.m 来完成。它的使 用同样只需要定义有关参数:显示间隔次数,最大循环次数,目标误差,以及学习速率,而
调用后返回训练后权值,循环总数和最终误差 TP=[disp freq max epoch err goal Ir] IW, B, epochs, errors]=trainbp(W, B,'F,, P, T, TP): 函数右端的F为网络的激活函数名称 当网络为两层时,可从第一层开始,顺序写出每一层的权值初始值,激活函数名,最后 加上输入、目标输出以及TP,即: TWI, Bl, W2, B2, W3, B3, epochs, errors]=trainbp(WI, Bl,'Fl, W2, B2,F2 W3, B3, 'F3,P, T, TP 神经网络工具箱中提供了两层和三层的BP训练程序,其函数名是相同的,都是 trainbpm,用户可以根据层数来选取不同的参数 例6.1]用于函数逼近的BP网络的设计 一个神经网络最强大的用处之一是在函数逼近上。它可以用在诸如被控对象的模型辨识 中,即将过程看成一个黑箱子,通过测量其输入输出特性,然后利用所得实际过程的输入输 出数据训练一个神经网络,使其输出对输入的响应特性具有与被辨识过程相同的外部特性。 下面给出一个典型的用来进行函数逼近的两层结构的神经网络,它具有一个双曲正切型 的激活函数隐含层,其输出层采用线性函数 这里有21组单输入矢量和相对应的目标矢量,试设计神经网络来实现这对数组的函数 关系。 P=1:0.1:1 T=0.960.577-0.07290.3770.6410.660.4610.1336 0.434-0.5-0.393-0.16470.09880.3072 0.3960.34490.1816-0.0312-0.2183-0.3201 为此,我们选择隐含层神经元为5。较复杂的函数需要较多的隐含层神经元,这可以根 据试验或经验来确定 图6.5给出了目标矢量相对于输入矢量的图形。一般在测试中常取多于训练用的输入 矢量来对所设计网络的响应特性进行测试。在函数逼近的过程中,画出网络输出相对于输入 矢量的图形,可以观察到网络在训练过程中的变化过程。为了达到这一目的,我们定义一个 密度较大的第二个输入矢量: P2=10.025:1; 首先对网络进行初始化:
9 调用后返回训练后权值,循环总数和最终误差: TP=[disp_freq max_epoch err_goal 1r]; [W,B,epochs,errors]=trainbp(W,B,’F’,P,T,TP); 函数右端的’F’为网络的激活函数名称。 当网络为两层时,可从第一层开始,顺序写出每一层的权值初始值,激活函数名,最后 加上输入、目标输出以及 TP,即: [W1,B1,W2,B2,W3,B3,epochs,errors]=trainbp(W1,B1,’F1’,W2,B2,’F2’, W3,B3,’F3’,P,T,TP); 神经网络工具箱中提供了两层和三层的 BP 训练程序,其函数名是相同的,都是 trainbp.m,用户可以根据层数来选取不同的参数。 [例 6.1]用于函数逼近的 BP 网络的设计。 一个神经网络最强大的用处之一是在函数逼近上。它可以用在诸如被控对象的模型辨识 中,即将过程看成一个黑箱子,通过测量其输入输出特性,然后利用所得实际过程的输入输 出数据训练一个神经网络,使其输出对输入的响应特性具有与被辨识过程相同的外部特性。 下面给出一个典型的用来进行函数逼近的两层结构的神经网络,它具有一个双曲正切型 的激活函数隐含层,其输出层采用线性函数。 这里有 21 组单输入矢量和相对应的目标矢量,试设计神经网络来实现这对数组的函数 关系。 P=-1:0.1:1; T=[-0.96 0.577 -0.0729 0.377 0.641 0.66 0.461 0.1336 … -0.201 -0.434 -0.5 -0.393 -0.1647 0.0988 0.3072 … 0.396 0.3449 0.1816 -0.0312 -0.2183 -0.3201]; 为此,我们选择隐含层神经元为 5。较复杂的函数需要较多的隐含层神经元,这可以根 据试验或经验来确定。 图 6.5 给出了目标矢量相对于输入矢量的图形。一般在测试中常取多于训练用的输入 矢量来对所设计网络的响应特性进行测试。在函数逼近的过程中,画出网络输出相对于输入 矢量的图形,可以观察到网络在训练过程中的变化过程。为了达到这一目的,我们定义一个 密度较大的第二个输入矢量: P2=-1:0.025:1; 首先对网络进行初始化:
R,Q=size(P): [ S2, Q=size(D): S1=5 TW2, B2]=rands(S2, S1) 通过测试,用输入矢量P2来计算网络的输出: A2=purelin( W2*tansig(WI*P2, Bl), B2) 可以画出结果来观察初始网络是如何接近所期望训练的输入输出关系,如图6.6所示。 其中,初始网络的输出值用实线给出 + 图6.5以目标矢量相对于输入矢量的图形图6.6初始网络的输出曲线 网络训练前的误差平方和为11.9115,其初始值为: W0=[0.7770.5336-0.38740.29800.0265 Bl0=[0.1822:0.6920:-0.1758:0.6830;-0.4614] W20=[-0.16920.0746-0.0642-0.4256-0.6433 B20=[-0.6926] 下面定义训练参数并进行训练 disp freq=10: max epoch=8000: error goal =0.02: Ir=0.01: TP=disp freq max epoch error goal Ir]: trainbp(Wl, Bl, tansig, W2, B2,purelin,, P, T, TP) 由此可以返回训练后的权值、训练次数和偏差。 图67至图6.⑩0给出了网络输出值随训练次数的增加而变化的过程。每个图中标出了循 环数目以及当时的误差平方和 图6.11给出了6801次循环训练后的最终网络结果,网络的误差平方和落在所设定的 0.02以内(00199968)
10 [R,Q]=size(P); [S2,Q]=size(T); S1=5; [Wl,B1]=rands(S1,R); [W2,B2]=rands(S2,S1); 通过测试,用输入矢量 P2 来计算网络的输出: A2=purelin(W2*tansig(W1*P2,B1),B2); 可以画出结果来观察初始网络是如何接近所期望训练的输入输出关系,如图 6.6 所示。 其中,初始网络的输出值用实线给出。 图 6.5 以目标矢量相对于输入矢量的图形 图 6.6 初始网络的输出曲线 网络训练前的误差平方和为 11.9115,其初始值为: W10=[0.7771 0.5336 -0.3874 0.2980 0.0265]; B10=[0.1822;0.6920;-0.1758;0.6830;-0.4614]; W20=[-0.1692 0.0746 -0.0642 -0.4256 -0.6433]; B20=[-0.6926]; 下面定义训练参数并进行训练 disp_freq=10; max_epoch=8000;error_goal=0.02; lr=0.01; TP=[disp_freq max_epoch error_goal lr]; trainbp(W1,B1,‘tansig’,W2, B2,’purelin’,P,T,TP) 由此可以返回训练后的权值、训练次数和偏差。 图 6.7 至图 6.10 给出了网络输出值随训练次数的增加而变化的过程。每个图中标出了循 环数目以及当时的误差平方和。 图 6.11 给出了 6801 次循环训练后的最终网络结果,网络的误差平方和落在所设定的 0.02 以内(0.0199968)