神经网络考试.docx
- 文档编号:18277681
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:33
- 大小:1.04MB
神经网络考试.docx
《神经网络考试.docx》由会员分享,可在线阅读,更多相关《神经网络考试.docx(33页珍藏版)》请在冰点文库上搜索。
神经网络考试
习题1:
神经网络典型结构(单层神经网络):
其中P为输入矢量,通过权矩阵W与每个输出神经元相连;每个神经元通过一个求和符号,在与输入矢量进行加权求和运算后,形成激活函数的输入矢量,并经过激活函数作用后得到输出矢量A。
神经网络常用的作用函数为(三种):
(1)阀值型:
这种激活函数将任意转化为0或1的的输出,函数f(▪)为单位阶跃函数,如图所示。
具有此函数的神经元的输入/输出关系为:
(2)线性型:
线性激活函数使网络的输出等于加权输入和加上偏差,如图所示。
此函数的输入/输出关系为:
(3)S型(sigmoid型)
S型激活函数将任意输入值压缩到(0,1)的范围内,如图1.7所示。
此种激活函数常用对数或双曲正切等一类S形状的曲线来表示,如对数S型激活函数关系为:
而双曲正切S型曲线输入/输出函数关系为:
常用的神经网络的学习算法有:
(1)Hebb学习算法
(2)梯度下降法
(3)δ规则
(4)BP算法
(5)竞争式学习算法
常用的神经网络有如下几种:
(1)感知器网络,其作用一般为对于线性可分问题的简单分类。
(2)线性神经网络,由于该网络采用线性作用函数,可以处理连续输入模式。
网络可用于模式联想和函数的线性逼近,线性系统的建模和滤波等。
(3)BP网络,其作用为:
函数逼近,模式识别,分类,数据压缩
(4)Hopfield网络,其作用为:
通过无教师的学习,是网络状态进过演变最终收敛到某一稳定状态,从而实现联想记忆或优化计算的功能。
人工神经网络的生物学背景:
人们正是通过对人脑神经系统的初步认识,尝试构造出人工神经元以组成人工神经网络系统来对人的智能,甚至是思维行为进行研究;尝试从理性角度阐明大脑的高级机能。
经过几十年的努力与发展,已涌现出上百种人工神经网络模型。
它们的网络结构、性能、算法及应用领域各异,但均是根据生物学事实衍生出来的。
由于基本处理单元是对生物神经元的近似仿真,因而被称之为人工神经元。
它用于仿效生物神经细胞最基本的特性,与生物原型相对应。
人工神经元的主要结构单元是信号的输入、综合处理和输出,其输出信号的强度大小反映了该单元对相邻单元影响的强弱。
人工神经元之间通过互相连接形成网络,称为人工神经网络。
神经元之间相互连接的方式称为连接模式,相互之间的连接度由连接权值体现。
在人工神经网络中,改变信息处理过程及其能力,就是修改网络权值的过程。
习题2:
线性神经网络的拓扑结构:
(如下图)
线性神经元模型的I/O关系:
a=purelin(W*P+b)
其基本学习算法为:
W-H学习算法(描述如下)
算法的收敛性条件:
该系统是一个非线性系统,线性神经网络无法获得精确解。
但是即使无法获得精确解,只要学习速率足够小,线性神经网络仍然能够将输出的均方误差最小化。
这种网络结构能够找到输入与输出之间最佳的近似线性逼近,具有这种性质是因为线性网络的误差曲面是一个抛物面,因为抛物面总是只有一个最小值的,因此利用最大梯度算法总能够得到最小值解。
程序:
(非改进算法)
>>P=[1.0,2.0,3.0,-1.2];
>>T=[0.5,1.05,1.48-0.59];
>>w_range=-2:
0.4:
2;
>>b_range=-2:
0.4:
2;
>>ES=errsurf(P,T,w_range,b_range,'purelin');
>>plotes(w_range,b_range,ES);
以上程序得到误差曲面:
(如下图)
紧接着进行网络学习:
>>maxlr=maxlinlr(P,'bias');//学习速率设置
>>net=newlin([-22],1,[0],maxlr);//进行网络训练
得到的误差虽迭代次数的变化曲线如下:
可以看到训练大致155次时,误差达到最小值。
精度达到了10-3。
最后通过仿真可以看到,网络经过学习之后的效果:
与原始目标输出相比,可见学习想过还是相当不错的,基本能够达到目标要求。
对于改进后的学习算法:
习题3:
1BP算法的基本原理如下所示:
BP算法是由两部分组成:
信息的正向传递与误差的反向传播。
在正向传播过程中,输入信息从输入经隐含层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态。
如果在输出层没有得到期望的输出,则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号演员来的连接通路反传回来修改各层神经元的权值直至达到期望目标。
2BP网络的优缺点:
BP网络的优点主要是针对感知器和线性神经网络而言的;感知器由于采用的是硬限幅函数作为作用函数,因此只能解决简单的分类问题。
且硬限幅函数的不可微分特性,使其扩展到多层感知器时带来权值修正的困难。
Adaline网络采用线性作用函数,处理复杂非线性问题的能力相对较弱。
采用线性作用函数的多层网络等效为一个简单线性网络。
因此,简单地从结构上扩展Adaline并不能加强它处理非线性问题的能力。
结合两者的长处。
将感知器网络结构扩展到多层,其作用函数采用一种可微分的函数,这就形成了功能比较强大的多层前向网络。
由于多层前向网络采用反向传播学习算法(BackPropagation),通常人们将其称为BP网络。
BP算法的缺点主要是:
1.需要较长的训练时间,这主要是由于学习速率太小所造成的。
可采用变化的学习速率或自适应的学习速率来加以改进。
2.完全不能训练,这主要表现在网络的麻痹上。
通常为了避免这种情况的发生,一是选取较小的初试权值,而是采用较小的学习速率。
3.局部最小值,采用多层网络或较多的神经元,有可能得到更好的结果。
3改进算法的思路与方法:
BP算法的改进的主要目标是为了加快训练速度,避免陷入局部极小值和改善其它能力。
常用的改进算法的方式有:
带动量因子算法,自适应学习速率,改变学习速率的方法,作用函数后缩法,改变性能指标函数。
带动量因子算法:
该方法实在反向传播法的基础上在每一个权值的变化上加上一项正比于前次权之变化的值,并根据反向传播法来产生新的权值变化。
带有附加动量因子的权值调节公式为:
其中k为训练次数,mc为动量因子,一般取0.95左右。
附加动量法的实质是将最后一次权值变化的影响,通过一个动量因子来传递。
以此方式,当增加动量项后,促使权值的调节向着误差曲面底部的平均方向变化,当网络权值进入误差曲面底部的平坦区时,将变得很小,于是:
从而防止了的出现,有助于使网络从误差曲面的局部极小值中跳出。
自适应学习速率算法:
对于一个特定的问题,要选择适当的学习速率并不是一件容易的事情。
对训练开始初期功效很好地学习速率,不见得对后来的训练合适。
为了解决这个问题,人们自然会想到在训练过程中自动调整学习速率。
下面给出一个自适应学习速率的调整公式:
初始学习速率(0)的选取范围可以有很大的随意性。
改变学习速率方法:
学习速率的局部调整法基于如下的几个直观的推断:
(启发式规则,Jacobs,1988)
1.目标函数中的每一个网络可调参数有独立的学习速率;
2.每一步迭代中,每个学习速率参数都能改变;
3.在连续几次迭代中,若目标函数对某个权导数的符号相同,则这个权的学习速率要增加;
4.在连续几次迭代中,若目标函数对某个权导数的符号相反,则这个权的学习速率要减小。
作用函数后缩法:
实验证明,采用此方法,收敛时间平均可减少30~50%。
当然,若采用此方法来训练网络,其训练程序需要设计者自己编写一部分。
4源代码说明:
对所给数据进行分析,当输入分量为16时,以字母“A”为例,其对应的输入向量为“1111,1001,1111,1001”,其余的字母同理。
其对应的目标向量为“1,-1,-1”。
经过分析最终确定所有的输入(注:
为了分析方便,把输入向量写在一个数组中),和目标输出之后就可以对神经网络进行训练了。
在该神经网络中含有双层结构,同时在输入端加入了5%的输入噪声。
通过对网络的训练最后达到目标输出的要求。
并对权值校正之后的网络进行了仿真,观测其能否达到目标。
以下是对应的代码:
(无输入5%噪声)
P=[101;111;101;101;101;010;000;101;101;110;100;101;101;011;001;101];
T=[1,-1,-1;-1,1,-1;-1,-1,1];
[R,Q]=size(P);
S1=10;
[S2,Q]=size(T);
[W1,B1]=nwtan(S1,R)
[W2,B2]=rands(S2,S1)
net=newff(minmax(P),[S1S2],{'tansig''purelin'},'traingd');
net.iw{1,1}=W1;
net.b{1}=B1;
net.lw{2,1}=W2;
net.b{2}=B2;
net.performFcn='sse';
net.trainParam.epochs=5000;
net.trainParam.lr=0.01;
net.trainParam.lr_inc=1.05;
net.trainParam.lr_dec=0.7;
net.trainParam.goal=0.01;
net.trainParam.mc=0.9;
net.trainParam.min_grad=1e-10;
net.trainParam.show=20;
[net,tr]=train(net,P,T);
A=sim(net,P)
运行程序后可以看到如下的输出:
初始权值和偏置值(由系统随机产生):
W1=
Columns1through8
0.08190.2432-0.1132-0.2187-0.0579-0.2197-0.2139-0.3297
0.06400.2478-0.02860.1413-0.0305-0.25260.08440.3447
-0.32470.00970.1074-0.12260.19140.2937-0.1450-0.2199
0.2734-0.2044-0.30100.25260.20170.1112-0.2320-0.2578
0.1736-0.07700.2599-0.2900-0.3036-0.0239-0.2182-0.1463
0.1788-0.27510.04440.3671-0.24190.30980.2968-0.0330
-0.2622-0.28170.21260.0240-0.0843-0.2378-0.2573-0.2392
0.21900.2668-0.09240.1257-0.26930.1492-0.15640.3009
0.2579-0.1179-0.03200.29650.01300.1402-0.2649-0.0997
0.3433-0.1449-0.3159-0.1504-0.11630.0438-0.0413-0.1436
Columns9through16
-0.29670.02290.0177-0.1100-0.30400.0953-0.2803-0.1994
-0.1751-0.33920.19930.0936-0.3707-0.1486-0.1159-0.0970
-0.32890.23620.15030.1749-0.29830.1115-0.09480.0375
0.0034-0.10260.1784-0.25050.18920.15790.1173-0.1718
0.1985-0.1565-0.1610-0.28260.33640.06320.07440.1078
0.09850.18510.14470.03720.13810.18040.2175-0.0117
-0.2463-0.29400.0340-0.0089-0.2209-0.1592-0.0795-0.2091
-0.2546-0.2743-0.06290.23720.13530.1427-0.17860.1713
0.16460.0997-0.26020.1775-0.23130.2793-0.2453-0.2371
0.28710.07330.19860.1661-0.27110.26000.1927-0.1459
B1=
-0.4246
0.0499
-0.6604
-0.1531
-0.6388
-0.6268
0.4598
-0.3370
0.1674
0.7508
W2=
Columns1through8
-0.1350-0.13470.86750.5957-0.20800.34660.21970.5454
0.38950.3110-0.6251-0.0248-0.4541-0.1409-0.88120.3929
0.5162-0.7805-0.46760.5379-0.9255-0.0965-0.3684-0.7493
Columns9through10
-0.7397-0.1538
-0.81530.3111
-0.98440.4458
B2=
0.0624
-0.7824
0.2635
神经网络学习完之后的仿真输出:
A=
0.9475-1.0025-0.9421
-1.03470.9854-0.9566
-0.9858-0.99270.9828
可见基本能够达到目标输出([1,-1,-1]T,[-1,1,-1]T,[-1,-1,1]T)的效果。
以下添加5%噪声:
运行程序如下:
P=[101;111;101;101;101;010;000;101;101;110;100;101;101;011;001;101];
T=[1-1-1;-11-1;-1-11];
[R,Q]=size(P);
S1=10;
[S2,Q]=size(T);
r=-1+2.*rand(R,Q);%添加(-1,+1)的5%噪声
P=P+0.05*r%将噪声叠加到输入中
%W1,B1,W2,B2保存随机产生的权值和偏置值,是每次神经网络在相同的训练情况下运行
[W1,B1]=nwtan(S1,R)
[W2,B2]=rands(S2,S1)
%此处稍作修改便可查看不同算法的运行情况,以便比较不同算法的效率
net=newff(minmax(P),[S1S2],{'tansig''purelin'},'traingd');
net.iw{1,1}=W1;
net.b{1}=B1;
net.lw{2,1}=W2;
net.b{2}=B2;
net.performFcn='sse';
net.trainParam.epochs=5000;
net.trainParam.lr=0.01;
net.trainParam.lr_inc=1.05;
net.trainParam.lr_dec=0.7;
net.trainParam.goal=0.01;
net.trainParam.mc=0.9;
net.trainParam.min_grad=1e-10;
net.trainParam.show=20;
[net,tr]=train(net,P,T);
A=sim(net,P)
神经网络的机构如下:
(注意各层的函数选取)
初始输入P如下:
(5%噪声输入)
P=
1.03640.00461.0012
0.95370.99741.0052
1.0045-0.00030.9713
1.0498-0.01911.0088
1.00110.04510.9643
0.03741.0482-0.0448
-0.04300.00140.0183
1.04880.04931.0109
1.0423-0.00440.9720
1.00640.9926-0.0094
0.9931-0.02870.0130
0.9838-0.03071.0055
1.02210.03330.9628
-0.04861.02270.9669
-0.01260.00300.9501
1.04230.03290.9918
初始权值和偏置值如下:
W1=
Columns1through8
-0.0073-0.1629-0.16270.1973-0.22440.04390.2618-0.2415
-0.24060.23650.0505-0.29400.2868-0.17770.1160-0.0848
0.12700.23880.36680.02380.1068-0.1376-0.08440.2382
-0.35870.09600.26020.2237-0.25080.30570.1786-0.1904
-0.2269-0.2970-0.12920.14250.03930.22990.18950.2294
0.2834-0.07540.1144-0.22460.27060.18470.06290.1333
0.34830.2960-0.1038-0.04550.20720.3117-0.3038-0.0892
-0.26710.10270.2772-0.08520.1057-0.18290.2405-0.1430
-0.0047-0.0928-0.3187-0.0165-0.02590.0134-0.3420-0.1893
0.36450.1326-0.25090.0878-0.24090.12760.02720.2686
Columns9through16
-0.2852-0.25920.1129-0.26770.1246-0.25430.2493-0.0834
0.13110.0455-0.31660.2481-0.30800.1659-0.02420.1101
0.0916-0.23810.2293-0.27070.18860.10460.04630.3337
0.18360.02360.1329-0.0964-0.0592-0.3171-0.00410.0896
0.2848-0.08650.26610.07300.1858-0.2264-0.2579-0.1296
-0.0728-0.1161-0.25610.3119-0.07550.30190.2493-0.1848
-0.17550.16600.29900.0127-0.1324-0.0023-0.1548-0.0445
0.21490.00900.00570.27930.2767-0.2719-0.1315-0.2692
0.23450.22270.0880-0.20950.1672-0.34180.07220.2882
-0.0391-0.2970-0.1848-0.1025-0.0872-0.3609-0.02420.1106
B1=
-0.4792
0.0322
-0.7213
0.5855
-0.0923
0.0776
0.1081
0.2916
-0.2079
-0.6819
W2=
Columns1through8
-0.0873-0.92400.8749-0.4801-0.28660.1941-0.47760.2801
-0.90430.90850.02670.51790.5057-0.1388-0.8104-0.7359
0.47650.4847-0.51820.9867-0.77990.4614-0.0981-0.0944
Columns9through10
0.3044-0.1953
0.65400.7685
-0.38380.4012
B2=
-0.5163
0.5197
-0.4181
仿真之后的输出为:
A=
0.9381-0.9980-0.9476
-1.02910.9960-0.9606
-1.0035-0.99620.9947
可以看出在有噪声的情况下,输出依然能够较好的达到目标输出的要求。
对于traingd学习情况如下所示:
学习次数为34次。
对应的误差收敛曲线如下图:
现在改用其它的算法来尝试重新学习(注:
必须基于相同的随机初始权值和偏置值):
对于traingdm学习算法训练情况如下:
学习次数为68次,对应的误差曲线为:
对于traingdx算法训练情况如下:
学习次数为52,对应的误差曲线为:
对于trainlm算法训练情况如下:
学习次数为3次,而且精度远比前几种算法高。
对应的误差曲线为:
通过比较可知:
误差收敛速度由快到慢的算法分别是:
V(trainlm)>V(traingd)>V(traingdx)>V(traingdm)
习题4:
神经网络系统建模的几种有如下几种基本方法:
(1)直接逆系统法:
(2)正逆系统法:
(3)对象—正模型—逆模型学习法:
(4)逆-逆系统建模:
运行程序如下:
clear;
clc;
closeall;
k=1:
500;
u(k)=sin(2*pi*k/5)+1/3*sin(2*pi*k/50);
y
(1)=0;
y
(2)=0;
fork=3:
500
y(k)=y(k-1)*(y(k-2)-1)/(1+(y(k-1))^2+(y(k-2))^2)+u(k-1);
end
P=[y(1:
498);y(2:
499);u(2:
499)];
T=y(3:
500);
net=newff(minmax(P),[10,1],{'tansig','purelin'},'trainlm');
net.trainParam.show=100;
net.trainParam.lr=0.05;
net.trainParam.epochs=1000;
net.trainParam.goal=1e-5;
fprintf('初始加权系数:
\n');
net.iw{1,1},net.b{1}
net.lw{2,1},net.b{2}
[net,tr]=tr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 考试