1、2019/1/2,神经网络原理(第二章1),1,常用神经网络原理 及学习算法,1、感知器网络(Perceptron) 2、线性神经网络 3、 BP网络,2019/1/2,神经网络原理(第二章1),2,6、基于二阶收敛阶的学习算法 7、 对角回归神经网络及其学习算法 8、 辐射基函数神经网络 9、 Hopfield 神经网络 10、自组织竞争(SOFM),2019/1/2,神经网络原理(第二章1),3,感知器网络,1、感知器模型 2、学习训练算法 3、学习算法的收敛性 4、例题 5、讨论,2019/1/2,神经网络原理(第二章1),4,Perceptron 应用举例,水果分类 Matlab 演示
2、 nnd3pc.m,2019/1/2,神经网络原理(第二章1),5,感知器神经元模型,感知器模型如图Fig2.2.1 I/O关系图2.2.1,2019/1/2,神经网络原理(第二章1),6,单层感知器模型如图2.2.2定义加权系数 wij为第i个神经元到第j个神经元之间的连接值,2019/1/2,神经网络原理(第二章1),7,感知器神经网络模型,图2.2.2,2019/1/2,神经网络原理(第二章1),8,图形解释对n=2的情况分平面为两部分 WX+B与W正交,2019/1/2,神经网络原理(第二章1),9,图形解释,由直线W*P+b=0将由输入矢量P1和P2组成的平面分为两个区域,此线与权值
3、矢量W正交,可根据偏差b进行左右平移。 直线上部的输入矢量使阀值函数的输入大于0,所以使感知器神经元的输出为1; 直线下部的输入矢量使感知器神经元的输出为0;。 分割线可以根据所选的权值和偏差上下左右移动到期望划分输入平面的地方。,2019/1/2,神经网络原理(第二章1),10,学习训练算法,2019/1/2,神经网络原理(第二章1),11,训练步骤1)对于所要解决的问题,确定输入向量 X,目标向量T,由此确定维数及网络结构参数,n,m; 2) 参数初始化; 3)设定最大循环次数; 4)计算网络输出; 5)检查输出矢量Y与目标矢量T是否相同,如果时,或以达最大循环次数,训练结束,否则转入6)
4、; 6)学习并返回4)。,2019/1/2,神经网络原理(第二章1),12,上述的整个训练过程我们可以用MATLAB工具箱中的函数train.m来完成。其调用方式如下: net,tr=train(net,P,T,Pi,Ai),2019/1/2,神经网络原理(第二章1),13,例题,例2.1 采用单一感知器神经元解决一个简单的分类问题:将四个输入输入矢量分为两类,其中两个矢量对应的目标值为1,另两个矢量对应的目标值为0,即输入矢量: P=-0.5 0.5 0.3 0.0;-0.5 0.5 -0.5 1.0目标分类矢量: T=1.0 1.0 0.0 0.0,2019/1/2,神经网络原理(第二章1
5、),14,解 首先定义输入矢量及相应的目标矢量:P=-0.5 0.5 0.3 0.0;-0.5 0.5 -0.5 1.0;T=1.0 1.0 0.0 0.0;输入矢量可以用图/来描述, 对应于目标值0的输入矢量用符 号0表示,对应于目标值1的输 入矢量符号+表示。输入矢量图,2019/1/2,神经网络原理(第二章1),15,训练结束后得到如图所示的分类结果,分类线将两类输入矢量分开,其相应的训练误差的变化如图所示。这说明经过4步训练后,就达到了误差指标的要求。 分类结果 误差变化曲线,2019/1/2,神经网络原理(第二章1),16,下面给出本例的MATLAB程序,% Example pre.
6、m % clf reset figure(gcf) setfsize(300,300); echo on%NEWP 建立一个感知器神经元 %INIT 对感知器神经元初始化 %TRAIN 训练感知器神经元 %SIM 对感知器神经元仿真 pause % 敲任意键继续 clc,% P为输入矢量 P = -0.5 -0.5 +0.3 +0.0;-0.5 +0.5 -0.5 1.0; % T为目标矢量 T = 1 1 0 0; pause % 绘制输入矢量图 plotpv(P,T); pause % 定义感知器神经元并对其初始化 net=newp(-0.5 0.5;-0.5 1,1); net.init
7、Fcn=initlay; net.layers1.initFcn=initwb;,2019/1/2,神经网络原理(第二章1),17,net.layerWeights1,1.initFcn=rands; net.biases1.initFcn=rands; net=init(net); echo off k = pickic; if k = 2net.iw1,1 = -0.8161 0.3078;net.b1 = -0.1680; end echo on plotpc(net.iw1,1,net.b1) pause,% 训练感知器神经元 net=train(net,P,T); pause % 绘
8、制结果分类曲线 plotpv(P,T) plotpc(net.iw1,1,net.b1); pause % 利用训练完的感知器神经元分类 p = -0.5; 0; a = sim(net,p) echo off,2019/1/2,神经网络原理(第二章1),18,学习算法的收敛性,可证:在训练样本XP,p=1,2,K是线性可分时,采用上式的学习方法,在有限次迭代后,必能归到正确解。,2019/1/2,神经网络原理(第二章1),19,假设,A1: 输入样本 X1, X2, Xk 归一化; A2: 最优加权|W*|=1;A3: 令tq=0对应的样本XB取反向。这样,W*TXW*TX0,问题简化为对所
9、有的XP,训练后可以得到W*,W*TX0,2019/1/2,神经网络原理(第二章1),20,证明: 因为K个样本线性可分,所以存在W*,对任意K,W*TXpd,d0,权值向量W和最优权值向量W*之间的余弦角cos为(2.5) 由学习律可得 W(k+1)=W(k)+X(k) , =2neq (2.6) 式(2.6)左乘W*可得 W*W(k+1)=W* W(k)+X(k) W*W(k)+d 从k=0迭代, 可得 W*W(k) W*W(0)+kd (2.7),2019/1/2,神经网络原理(第二章1),21,选择W(0)XP,满足W*XP0,此时有 W*W(k) kd (2.8) 在W(k)未达到W
10、*时,W(k)X(k)0,所以(2.9) 迭代可得:(2.10) 所以,(2.11) 当W(k)=W*时,S(k)=1,我们有 这说明在和d选定后,可以在有限的次数k达到最优加权W*。,2019/1/2,神经网络原理(第二章1),22,求解得到,2019/1/2,神经网络原理(第二章1),23,讨论局限性,1)由于激活函数为阀值函数,输出矢量只能取0,1,说已仅可以解决简单的分类问题; 2)输入矢量线性可分时,学习在有限次数内收敛; 3)输入矢量的奇异性导致较慢的收敛。比如当输入/输出矢量分别为:P=-0.5 0.5 +0.3 0.1 80-0.5 +0.5 0.5 +1.0 100;T=1
11、1 0 0 1; 时,必然导致训练的困难; 4)异或问题不可解。(matlab 演示 线性不可分例 demop6.m),2019/1/2,神经网络原理(第二章1),24,修正方法,规一化规则在神经网络工具箱中提供了归一化感知器学习规则的函数learnpn.m。 归一化感知器学习规则相对于原始的感知器学习规则,训练时间较长,但是对于含有奇异样本的输入矢量时,归一化感知器学习规则可谓得心应手,2019/1/2,神经网络原理(第二章1),25,感知器网络小结,本节讨论了神经网络的最初模型感知器网络。可得出以下结论: 1. 单层感知器网络用于线性问题的分类是有效的。其学习算法在一定条件下是收敛性的;
12、2. 输入向量含有奇异向量时,感知器学习算法可采用规一化学习算法; 3. 单层感知器对于非线性分类问题能力有限。 感知器网络在神经网络的研究中有着重要意义和地位,其学习算法的自组织、自适应思想,是神经网络学习算法的基础。,2019/1/2,神经网络原理(第二章1),26,线性神经网络,1、线性神经元模型 2、学习训练算法 3、例题与分析,2019/1/2,神经网络原理(第二章1),27,线性神经元模型,线性神经元模型如图2.3.1所示: I/O关系a=purelin(W*P+b)图 2.3.1,2019/1/2,神经网络原理(第二章1),28,W-H学习算法,2019/1/2,神经网络原理(第
13、二章1),29,2019/1/2,神经网络原理(第二章1),30,训练步骤: (1)表达:计算训练的输出矢量A=W*P+B,以及与期望输出之间的误差E=T-A;(2)检查:将网络输出误差的平方和与期望误差相比较,如果其值小于期望误差,或训练以达到事先设定的最大训练次数,这停止训练;否则继续: (3)学习:采用W-H学习规则计算性的权值和偏差,并返回到(1)。,2019/1/2,神经网络原理(第二章1),31,例题与分析,例2.2 设计一个简单的单层线性神经元。 解 首先,定义输入样本矢量和目标矢量P=+1.0 -1.2;T=+0.5 +1.0; 然后,利用函数newlind设计一个线性层作为单
14、层线性神经元。 最后,利用函数sim对网络进行检验。 下面是本例的MATLAB程序。(demolin2),2019/1/2,神经网络原理(第二章1),32,% Example 3.8 % clf; figure(gcf) setfsize(500,200); echo on clc%NEWLIND 建立一个线性神经网络 %SIM 对线性神经网络仿真 pause clc P = 1.0 -1.2; T = 0.5 1.0; pause %绘制误差曲面 w_range = -1:0.1:1; b_range = -1:0.1:1;,2019/1/2,神经网络原理(第二章1),33,ES = err
15、surf(P,T,w_range,b_range,purelin); plotes(w_range,b_range,ES); pause %设计一个线性神经网络 net=newlind(P,T); W=net.iw1,1 b=net.b1 pause %计算输出误差 A = sim(net,P); E = T - A; SSE = sumsqr(E) %在误差曲面上绘制权和偏差的位置 plotep(W,b,SSE)p = -1.2; a = sim(net,p) echo off,2019/1/2,神经网络原理(第二章1),34,复习,感知器网络: Y1=W*P+BYhardlim(Y1) 学
16、习算法: ETY(1,0,1)dWlr*E*P dB=lr*E线性网络: Y=W*P+B 学习算法: ETY (连续)dWlr*E*PdB=lr*E,2019/1/2,神经网络原理(第二章1),35,具体示例,P = +1.0 +1.5 +1.2 -0.3-1.0 +2.0 +3.0 -0.5+2.0 +1.0 -1.6 +0.9; T = +0.5 +3.0 -2.2 +1.4+1.1 -1.2 +1.7 -0.4+3.0 +0.2 -1.8 -0.4-1.0 +0.1 -1.0 +0.6; 试用ADALINE解决模式联想问题,比较学习速率,初始权值得影响。 目标:0.0001,2019/1
17、/2,神经网络原理(第二章1),36,随机初始权值 学习速率 0.01,w0 =-0.1168 -0.9959 -0.7931-0.0339 0.5804 -0.68530.2162 0.0272 -0.1850-0.6480 -0.5735 -0.1845 b0 =0.27800.33800.5442-0.2404,2019/1/2,神经网络原理(第二章1),37,训练结果,2019/1/2,神经网络原理(第二章1),38,误差E=T-sim(net,P),TRAINB, Epoch 1281/2000, MSE 9.95209e-005/0.0001 E =-0.0177 0.0155 -
18、0.0115 0.01090.0132 -0.0115 0.0086 -0.00820.0079 -0.0069 0.0051 -0.0049-0.0084 0.0073 -0.0054 0.0052,2019/1/2,神经网络原理(第二章1),39,误差分布图,2019/1/2,神经网络原理(第二章1),40,确定性权值 lr=0.01,w0 =1.9978 -0.5959 -0.35171.5543 0.0531 1.3660-1.0672 0.3645 -0.9227-0.7747 1.3839 -0.3384 b0 =0.0746-0.0642-0.4256-0.6433,2019/1
19、/2,神经网络原理(第二章1),41,训练过程,2019/1/2,神经网络原理(第二章1),42,E=T-sim(net,P),TRAINB, Epoch 1334/2000, MSE 9.98962e-005/0.0001 E =-0.0208 0.0182 -0.0135 0.01290.0106 -0.0093 0.0069 -0.00660.0081 -0.0071 0.0053 -0.0050-0.0033 0.0029 -0.0021 0.0020,2019/1/2,神经网络原理(第二章1),43,误差分布图,2019/1/2,神经网络原理(第二章1),44,Lr=0.1(随机加权
20、值),TRAINB, Epoch 130/2000, MSE 9.4461e-005/0.0001.E =-0.0145 0.0112 -0.0138 0.01010.0142 -0.0132 0.0069 -0.00820.0084 -0.0102 -0.0036 -0.0028-0.0082 0.0064 -0.0075 0.0057,2019/1/2,神经网络原理(第二章1),45,讨论,1)收敛性 修正的 学习规则,P(K)标么化 W(k+1)=W(k)+e(k)P(k)/|P(k)|2 |P(k)|2 P 2 i(k) e(k)=t(k)-PT(k)W(k) e(k)= t(k)-
21、PT(k)W(k)= PT(k)W(k) 代入 e(k)e(k) PT(k)P(k)/|P(k)|2=e(k) 即:e(k+1)-e(k)= e(k),2019/1/2,神经网络原理(第二章1),46,收敛性(2),当00(0,2) 实际取值范围(0.1,1) 2) 可以取接近1的数。或者照以下公式 =0.99*1/max(detP(k)PT(k) Matlab 中函数lr=0.99*maxlinlr(P,1); *注意:对P非归一化时, 范围与P相关0 2/(读出输入的均方值之和),2019/1/2,神经网络原理(第二章1),47,3)matlab 相关学习函数 Learnwh.m 4)2种
22、改进学习算法 i) 收敛性结论同前 e(k+1)=(1- )e(k) ii)高收敛阶算法,2019/1/2,神经网络原理(第二章1),48,取f()不同形式,可以得到不同的收敛阶次 E(k+1)=e(k)e(k+1) 1.618 E(k+1)= e(k)2 2 E(k+1)= e(k)3 3 注意问题 收敛区域不同,2019/1/2,神经网络原理(第二章1),49,注意问题 收敛区域不同大范围 其余 必须|e(k)|max1否则 不收敛,e(k+1)=(1- )e(k),2019/1/2,神经网络原理(第二章1),50,线性网络的应用,线性分类 Matlab 例 nnd101c.m 自适应信号
23、去除 例 demolin8.m 自适应飞机噪声去除 例 nnd10nc.m,2019/1/2,神经网络原理(第二章1),51,存在问题的讨论,线性相关系统的拟和 demolin6.m 非线性系统的拟和 demolin4.m 过大的学习率 demolin7.m所有的源代码在nnetnndemos,2019/1/2,神经网络原理(第二章1),52,线性神经网络小结,由于该网络采用线性作用函数,可以处理连续输入模式。网络可用于模式联想和函数的线性逼近,线性系统的建模和滤波等; 网络采用WH学习规则,该方法在满足条件学习率0a2时可保证训练过程是收敛的。 adaline网络结构的设计完全由所要解决的问
24、题所限制,网络的输入数目和输出层中的神经元个数,由问题所限制。在采用线性作用函数时,多层adaline网络并不具有更强大的功能; 输入、输出之间的非线性关系不能用一个线性网络精确地表示,但线性网络可以产生一个具有误差平方和最小的线性逼近。,2019/1/2,神经网络原理(第二章1),53,BP 网络,感知器网络和Adaline,都存在一定缺点。 单层感知器:硬限幅函数 为作用函数,只能解决简单的分类问题。硬限幅函数的不可微分特性,使其扩展到多层感知器时带来权值修正的困难。 Adaline网络采用线性作用函数,处理复杂非线性问题的能力相对较弱。 线性函数 可微分函数,学习算法 线性优化。 采用线
25、性作用函数的多层网络等效为一个单层线性网络,因此,简单地从结构上扩展adaline 并不能加强它处理非线性问题的能力。,2019/1/2,神经网络原理(第二章1),54,BP 网络(2),结合二者的长处。将感知器网络结构扩展到多层,其作用函数采用一种可微分的函数,这就形成了功能比较强大的多层前向网络。由于多层前向网络采用反向传播学习算法(Back Propagation),通常人们将其称为BP网络。,2019/1/2,神经网络原理(第二章1),55,主要用途,BP网络主要用于: (1)函数逼近:用输入矢量和相应的输出矢量训练网络逼近某个函数; (2)模式识别:用一个特定的输出矢量将它与输入矢量
26、联系起来; (3)分类:把输入矢量以所定义的合适的方法进行分类; (4)数据压缩:减少输出矢量维数以便于传输或存储。 在人工神经网络的实际工程应用中,特别在自动控制领域中,大多数神经网络模型是采用BP网络或它的变化形式,它也是前向网络的核心部分,体现了人工神经网络最精华的部分。,2019/1/2,神经网络原理(第二章1),56,BP网络主要内容,1、BP网络模型 2、学习训练算法 3、对应的MATLAB训练函数 4、例题 5、BP网络设计问题 6、限制与不足 7、BP算法改进,2019/1/2,神经网络原理(第二章1),57,1. BP网络模型,BP网络模型如图2.4所示:,2019/1/2,
27、神经网络原理(第二章1),58,Matlab形式,Nnd11nf.m 描述输出与加权系数的关系 nndemos(chap11 demo1)network function,2019/1/2,神经网络原理(第二章1),59,I/O 关系,I-H a 1 = tansig (IW 1,1 p 1 +b 1 )tansig(x)=tanh(x)=(ex-e-x)/(ex+e-x) H-O a 2 = purelin (LW 2,1 a 1 +b 2 ) 输入层神经元个数 n 隐含层神经元个数 s1 输出层神经元个数 s2,2019/1/2,神经网络原理(第二章1),60,Review,线性网络(AD
28、ALINE)学习过程收敛范围0lr2 (采用输入归一化时)线性网络用途 自适应分类 自适应去噪 线性系统动态建模,2019/1/2,神经网络原理(第二章1),61,Matlab形式,Nnd11nf.m 描述输出与加权系数的关系 nndemos(chap11 demo1)network function,2019/1/2,神经网络原理(第二章1),62,示例,221网络 XOR功能 初始值 W11(1 1) b1=(1 w2=(1 b2=1(-1 0) 1) -1) 输入 p(1,0) 计算输出 a 1 = tansig (IW 1,1 p 1 +b 1 ) W11*P+B1=(2tansig(
29、x)=tanh(x)=(ex-e-x)/(ex+e-x) 0) a1=tangsig(2 ,0)=(0.9640,0) H-O a 2 = purelin (LW 2,1 a 1 +b 2 )(0.9640,0)*(1,-1)+1=1.9640,2019/1/2,神经网络原理(第二章1),63,学习目的,在确定合适结构的BP网络基础上,确定其合理的加权系数,使输入输出关系以所要求的精度符合训练数据的内在关系。 BP网络结构确定之后,输入输出关系完全由加权系数W1,B1,W2,B2确定,2019/1/2,神经网络原理(第二章1),64,学习(训练),输入q组样本 p1,p2,.,pq ,piRn
30、 期望输出 T1,T2,.,Tq, T Rs2 网络输出 a21,a22,.,a2q a2Rs2,均方误差,向量情况,2019/1/2,神经网络原理(第二章1),65,学习(训练)2,解决方法 误差最小 ETA2Tf2W2*f1(W1*P+b1)+b2J=ETEmin 实质为一个优化问题 思路1: 梯度法(gradient)找出误差与加权系数的关系 得到加权系数改变的规律,2019/1/2,神经网络原理(第二章1),66,梯度法原理(1),1.对无约束极值问题,设: F(X)二次可微, 具有极小点X*,2019/1/2,神经网络原理(第二章1),67,梯度法原理(2),2019/1/2,神经网
31、络原理(第二章1),68,最速下降法,要求E的极小点,取,2019/1/2,神经网络原理(第二章1),69,学习训练算法(思路),近似最陡下降法,2019/1/2,神经网络原理(第二章1),70,链式法则,例,应用于梯度计算,2019/1/2,神经网络原理(第二章1),71,学习训练算法,1。正向传播 I-H H-O 2. 计算误差 ek=tk-a2k,2019/1/2,神经网络原理(第二章1),72,寻找加权系数改变与误差的关系,考虑一个样本输入到网络的情况,此时误差平方和为1。输出层权系数的调整(误差与输出层关系直接),net2k,2019/1/2,神经网络原理(第二章1),73,定义:因
32、为:式中:,2019/1/2,神经网络原理(第二章1),74,小结:,2019/1/2,神经网络原理(第二章1),75,隐含层权系数的修正,2019/1/2,神经网络原理(第二章1),76,隐含层权系数的修正,误差e与w1无显函数关系,采用链式法则找关系,2019/1/2,神经网络原理(第二章1),77,不能直接计算,需通过 其他量间接计算,2019/1/2,神经网络原理(第二章1),78,隐含层权值修正小结:,2019/1/2,神经网络原理(第二章1),79,总结,输出节点k隐含节点j统一形式,2019/1/2,神经网络原理(第二章1),80,BP算法解释,输出层误差 ej(j=1s2) 隐
33、含层误差 ei(i=1n1) ei与ej的关系? ei可以认为是由ej加权组合形成的。由于作用函数的存在,ej的等效作用为 j i=ejf (),2019/1/2,神经网络原理(第二章1),81,初始化,加输入和期望输出,计算隐层和输出层的输出,迭代次数加1,调节输出层和隐层的连接权值,改变训练样板,训练样终止?,迭代终止?,BP算法的基本流程,No,No,y,y,2019/1/2,神经网络原理(第二章1),82,导数 logsigmatlab 函数:dA_dN = dlogsig(N,A) tansigmatlab 函数:dA_dN = dtansig(N,A),2019/1/2,神经网络原
34、理(第二章1),83,示例: 函数逼近,1-2-1 Network,+,-,t,a,e,x,2019/1/2,神经网络原理(第二章1),84,2019/1/2,神经网络原理(第二章1),85,修正公式:,前向计算权值修正,2019/1/2,神经网络原理(第二章1),86,具体步骤(一步):,计算输出及误差y1/x=1/1=1s1=w1*x+b1=-1.0*1.0+0=-1.0; s2=w2*x+b2=1.0*1.0+0=1.0;z1=logsig(s1)= logsig (-1.0)= 0.7311; z2= logsig (s2)= logsig (1.0)=0.2689;t =v1*z1+
35、v2*z2+b= 0.7311+0.2689+0.5=1.5e=1-1.5=-0.5,2019/1/2,神经网络原理(第二章1),87,V1*e*z10.1*(-0.5)*0.7311=-0.0366, V1= V1+V1=0.5+(-0.0366)=0.4634V2*e*z20.1*(-0.5)*0.2689=-0.0134, V2= V2+V2=0.5+(-0.0134)=0.4864b=*e=0.1*(-0.5)=0.05 b=bb0.5-0.05=0.495,输出层权值修正,2019/1/2,神经网络原理(第二章1),88,隐含层权值修正,w1=*e*v1*f(s1)*x=*e*v1*
36、z1*(1-z1)*x =-0.1*0.5*0.4634*0.7311*(1-0.7311)*1=-0.0046 w1=w1+w1=-1.0+(-0.0046)=-1.0046w2=*e*v2*f(s2)*x=*e*v2*z2*(1-z2)*x =-0.1*0.5*0.4684*0.2689*(1-0.2689)*1=-0.0046 w2=w2+w1=1.0-0.0046=0.9954b1=b1+b1=0-0.0046=-0.0046;b2=b2+b2=0-0.0046=-0.0046;,2019/1/2,神经网络原理(第二章1),89,示例2:两层XOR网络,2019/1/2,神经网络原理(
37、第二章1),90,输入输出关系,2019/1/2,神经网络原理(第二章1),91,加权值修改(Vi),2019/1/2,神经网络原理(第二章1),92,加权值修改(Wij),2019/1/2,神经网络原理(第二章1),93,具体计算步骤:,见matlab程序 Bpxor2_demo_step.m 的执行过程:,2019/1/2,神经网络原理(第二章1),94,bpxor2_demo_step.m,% BP神经网络解决异或问题 % 采用的一个2-2-1的网络 clear clc BP_LEARNING = 0.1; % 学习速率为0.1 wish_error = 0.002; % 期望误差 st
38、udytimes = 20000; % 定义最大学习次数 result=zeros(1,4); % 生成一个矩阵,存放最后的输出结果 P = 0 0 1 1;0 1 0 1; T = 0 1 1 0; % 初始化神经网络隐含层的权值和域值,% 根据权值下标,例如weight12表示第一个输入对隐含层第二个神经元的权值 weight11 = rands(1) weight21 = rands(1) weight12 = rands(1) weight22 = rands(1) b1 = rands(1) b2 = rands(1)% 初始化输出层的权值和域值 weight1 = rands(1)
39、 weight2 = rands(1) b = rands(1) pause,2019/1/2,神经网络原理(第二章1),95,% 开始训练网络 for i=1:studytimes;real_error = 0;% 初始化中间变量:修改权值的变量的累加值 change_b1=0;change_b2=0;change_b=0; change_weight11=0;change_weight21=0;change_weight12=0;change_weight22=0; change_weight1=0;change_weight2=0;for j=1:4;% 前向计算% 第一个隐含层神经元的
40、输出hidelayer1 = weight11*P(1,j) + weight21*P(2,j) + b1 % 经过 S 函数之后的输出S_hidelayer1 = 1/(1+exp(-hidelayer1);,% 第二个隐含层神经元的输出hidelayer2 = weight12*P(1,j) + weight22*P(2,j) + b2 % 经过 S 函数之后的输出S_hidelayer2 = 1/(1+exp(-hidelayer2) % 输出层的输出线性输出outlayer = weight1*S_hidelayer1 + weight2*S_hidelayer2 + b % 计算误差
41、deta =T(j)-outlayer,2019/1/2,神经网络原理(第二章1),96,% 计算输出层加权值 W1,W2,偏置值b的修正量change_weight1 = change_weight1 + BP_LEARNING*S_hidelayer1*detachange_weight2 = change_weight2 + BP_LEARNING*S_hidelayer2*detachange_b = change_b + BP_LEARNING*deta% 计算隐含层第一个神经元权值的deta1 deta1 = S_hidelayer1*(1-S_hidelayer1)*weight
42、1*deta % 计算隐含层第二个神经元权值的deta2deta2 = S_hidelayer2*(1-S_hidelayer2)*weight2*deta % 计算输出层加权值 W11,W21, W12,W22,偏置值b1,b2的修正量% 偏置值b1,b2修正量的累加change_b1 = change_b1 + BP_LEARNING*deta1change_b2 = change_b2 + BP_LEARNING*deta2%权值 W11,W21, W12,W22修正量的累加change_weight11 = change_weight11 + BP_LEARNING*P(1,j)*de
43、ta1change_weight21 = change_weight21 + BP_LEARNING*P(2,j)*deta1change_weight12 = change_weight12 + BP_LEARNING*P(1,j)*deta2change_weight22 = change_weight22 + BP_LEARNING*P(2,j)*deta2% 判断误差real_error = real_error + (T(j)-outlayer)*(T(j)-outlayer)end,2019/1/2,神经网络原理(第二章1),97,% 开始调整权值b1 = b1 + change_
44、b1b2 = b2 + change_b2b = b + change_bweight11 = weight11 + change_weight11weight21 = weight21 + change_weight21weight12 = weight12 + change_weight12weight22 = weight22 + change_weight22weight1 = weight1 + change_weight1weight2 = weight2 + change_weight2 if real_error wish_errorbreak;end; end;,2019/1
45、/2,神经网络原理(第二章1),98,% 输出最后结果 for j=1:4;hidelayer1 = weight11*P(1,j) + weight21*P(2,j) + b1; % 第一个隐含层神经元的输出S_hidelayer1 = 1/(1+exp(-hidelayer1); % 经过 S 函数之后的输出hidelayer2 = weight12*P(1,j) + weight22*P(2,j) + b2; % 第二个隐含层神经元的输出S_hidelayer2 = 1/(1+exp(-hidelayer2); % 经过 S 函数之后的输出 outlayer = weight1*S_hi
46、delayer1 + weight2*S_hidelayer2 + b; % 输出层的输出result(j) = outlayer; end; clc real_error,i,result,2019/1/2,神经网络原理(第二章1),99,Matlab 例,Nnd11bc.m 演示训练过程 nndemos(chap11 demo2),2019/1/2,神经网络原理(第二章1),100,Review,BP网络的结构三层网络2。BP学习算法修改(加权值的方法),2019/1/2,神经网络原理(第二章1),101,BP算法的理论分析,学习算法:此处:W*为最优加权值。 由梯度法,2019/1/2,
47、神经网络原理(第二章1),102,改写成差分方程,可得因此,传统梯度法等效为一个积分控制器,2019/1/2,神经网络原理(第二章1),103,MATLAB函数,旧版下的训练函数为:trainbp.m Tp=disp_freq max_epoch err_goal lr; w,b,epochs,errors=trainbp(w,b,F,P,T,Tp); F为网络的激活函数名:tansig,logsig,purelin 而在新版下完全不同:首先建立一个网络 net=newff(-2 2,5 1,tansig purelin,traingd); 计算输出: y1=sim(net,P);,2019/
48、1/2,神经网络原理(第二章1),104,绘图: plot(P,T,*); 训练: net,tr=train(net,P,T); 训练函数有很多种,如:traingd,traingdm,traingdx,trainlm 在训练之前要对网络进行初始化,并设置好训练参数。 初始化: net.iw1,1=W10;net.b1=B10;net.lw2,1=W20;net.b2=B20;,2019/1/2,神经网络原理(第二章1),105,参数设置: net.trainParam.epochs=100; %最大训练次数 net.trainParam.goal=0.01; %训练所要达到的精度 net.trainParam.show=10; %在训练过程中显示的频率net.trainParam.lr=0.1; %学习速率,