1、 什么是 BP 网络的泛化能力?如何保证 BP 网络具有较好的泛化能力?(5分) 解:
(1)BP网络训练后将所提取的样本对中的非线性映射关系存储在权值矩阵中,在其后的工作阶段,当向网络输入训练时未曾见过的非样本数据时,网络也能完成由输入空间向输出空间的正确映射。这种能力称为多层感知器的泛化能力,它是衡量多层感知器性能优劣的一个重要方面。
(2)网络的性能好坏主要看其是否具有很好的泛化能力,而对泛化能力的测试不能用训练集的数据进行,要用训练集以外的测试数据来进行检验。在隐节点数一定的情况下,为获得更好的泛化能力,存在着一个最佳训练次数t0,训练时将训练与测试交替进行,每训练一次记录一训练均方误差,然后保持网络权值不变,用测试数据正向运行网络,记录测试均方误差,利用两种误差数据得出两条均方误差随训练次数变化的曲线,测试、训练数据均方误差曲线如下图1所示。训练次数t0称为最佳训练次数,当超过这个训练次数后,训练误差次数减小而测试误差则开始上升,在此之前停止训练称为训练不足,在此之后称为训练过度。
图1. 测试、训练数据均方误差曲线
2、什么是 LVQ 网络?它与 SOM 网络有什么区别和联系?(10 分) 解:
(1)学习向量量化(learning vector quantization,LVQ)网络是在竞争网络结构的基础上提出的,LVQ将竞争学习思想和监督学习算法相结合,减少计算量和储存量,其特点是网络的输出层采用监督学习算法而隐层采用竞争学习策略,结构是由输入层、竞争层、输出层组成。
(2)在LVQ网络学习过程中通过教师信号对输入样本的分配类别进行规定,从而克服了自组织网络采用无监督学习算法带来的缺乏分类信息的弱点。自组织映射可以起到聚类的作用,但还不能直接分类和识别,因此这只是自适应解决模式分类问题中的第一步,第二步是学习向量量化,采用有监督方法,在训练中加入教师信号作为分类信息对权值进行细调,并对输出神经元预先指定其类别。
3、设计一个神经网络对图一中的三类线性不可分模式进行分类,期望输出向量分别用(1, -1, -1)T、 (-1, 1, -1) T、 (-1, -1, 1) T代表三类,输入用样本坐标。要 求:
(1) 选择合适的隐节点数;
(2)用 BP 算法训练网络,对图中的 9 个样本进行正确分类。(15 分)
分析:
对于一个BP神经网络,首先要明确输入,输出, 隐层节点个数。对于本题,输入是点坐标组成的2*9的矩阵,输入节点个数为2,期望输出向量分别用(1, -1, -1)T、 (-1, 1, -1)T、 (-1, -1, 1)T表示,至于隐层节点的个数并没有确切的方法, 根据经验公式mnl(m为隐层节点数;n为输入层节点数;l为输出节点数;α为1~10之间的常数),首先确定隐层节点数为5,逐渐增加隐层节点数量,然后观察其对训练误差的影响,最终选出最合适的隐层节点数量。
表1. BP神经网络训练、分类结果 隐层节点数 误差精度 训练次数 分类结果正确率 5 0.3 66491 100% 7 0.3 31981 100% 9 0.3 25338 100% 10 0.3 20770 100% 12 0.3 14052 100% 14 0.3 11622 100% 用matlab编程,设定训练误差精度为0.3,学习率0.2,然后进行训练,记录不同隐层节点数的情况下达到相同的训练精度所需要的训练次数,当隐层节点数为M=5时,在训练次数为66491时,结果达到训练精度; 当隐层节点数M=7时,在训练次数到达31981时,结果达到训练精度;当隐层节点数M=9时时,在训练次数达到25338时,结果达到训练精度;当隐层节点数M=10时,在训练次数达到20770时,结果达到训练精度;当隐层节点数M=12时,在训练次数达到14052时,结果达到训练精度;当隐层节点数M=14时,在训练次数达到11622时,结果达到训练精度,由此可见,在一定范围内,隐层节点数越多,达到训练精度时所用的训练次数越少,所用训练时间则越少。因此选择隐层节点数为14。
学习率0.3,误差精度在0.1以下,输出结果和导师信号对比,输出结果都为正确,正确率达到100%。具体程序见附件一或者BPclassify.m。
4、试设计一个吸引子为Xa=(0110) T,Xb=(1001)T的离散Hopfield人工神经
网络。其权值和阈值在 [-1,1]区间取值,试求权值和阈值。(10 分) 解:
吸引子的分布是由网络的权值(包括阈值)决定的,设计吸引子的核心就是如何设计一组合适的权值。为了使所设计的权值满足要求,权值矩阵应符合以下要求:
(a) 为保证异步方式工作时网络收敛,W 应为对称阵。 (b) 为保证同步方式工作时网络收敛,W 应为非负定对称阵。 (c) 保证给定的样本是网络的吸引子,并且要有一定的吸引域。 具体设计时,这里采用了联立方程法:
以 4 节点 DHNN为例,说明权值设计的联立方程法。 考虑到wij = wji ,wii = 0,对稳态x(t +1) = x(t)。 对于状态 X a = (1001)T ,各节点净输入应满足:
net1=w12×0+w13×0+w14×1−T1=w14−T1>0 (1) net2=w12×1+w23×0+w24×1−T2=w12+w24−T2<0 (2) net3=w13×1+w23×0+w34×1−T3=w13+w34−T3<0 (3) net4=w14×1+w24×0+w34×0–T4=w14–T4>0 (4) 对于 X b = (0110)T 状态,各节点净输入应满足:
net1=w12×1+w13×1+w14×0−T1=w12+w13−T1<0 (5) net2=w12×0+w23×1+w24×0−T2=w23−T2>0 (6) net3=w13×0+w23×1+w34×0−T3=w23−T3>0 (7) net4=w14×0+w24×1+w34 ×1–T4=w24+w34–T4<0 (8)
联立以上8项不等式,可求出未知量的允许取值范围。如取w14 =0.7,则由式(1) 有 -1≤T1<0.7,取T1= 0.6;则由式(4)有 -1≤T4<0.7,取T4= 0.6;取w12 =0.4,由式(5),有 -1≤w13< 0.2,取w13 = 0.1;取w24 =0.2由式(2), 有0.6 00.40.10.70.60.400.90.20.8 T W0.10.900.30.40.70.20.300.6 5、下面给出的训练集由玩具兔和玩具熊组成。输入样本向量的第一个分量代表 玩具的重量,第二个分量代表玩具耳朵的长度,教师信号为-1表示玩具兔, 教师信号为1表示玩具熊。 (1) 用 matlab 训练一个感知器,求解此分类问题。(需附上 matlab 程序) (2) 用输入样本对所训练的感知器进行验证。(15 分) 分析: 对于本题,输入是样本组成的2*8的矩阵,输入节点个数为2,输出由导师信号可知分为两类。两个输入分量在几何上构成一个二维平面,输入样本可以用该平面上的一个点表示,玩具重量和长度在坐标中标出,可以看出明显分布在两个区域,可以用一条线分开分为两类,在线上方的输出结果应大于0,在线下方的输出结果应小于0。 权向量为2*9的矩阵,输入的第一个权向量权值赋予较小的非零随机数,每一个新的权向量都由上一个权向量调整,下一次循环第1个权向量由第9个权向量来调整。对于这样的样本线性可分,经过几次调整后就稳定到一个权向量,将样本正确分类的权向量不是唯一的。具体程序见附件二或者ganzhiqi.m。输出分类结果如下图所示。 表2. 单层感知器训练、分类结果 训练次数 分类结果正确率 4 100% 3 100% 5 100% 图2.感知器在二维平面的分类结果 附件一: 第三题程序 clear all; %%BP算法初始化 D=[1,-1,-1; 1,-1,-1; 1,-1,-1; -1,1,-1; -1,1,-1; -1,1,-1; -1,-1,1; -1,-1,1; -1,-1,1]'; X=[0.75,0.75; 0.75,0.125; 0.25,0.25; 0.25,0.75; 0.5,0.125; 0.75,0.25; 0.25,0.5; 0.5,0.5; 0.75,0.5]'; [N,n]=size(X); [L,Pd]=size(D); %M=ceil(sqrt(N*L))+7;ceil函数为正无穷方向取整 m=14; %隐层节点数 %初始化权矩阵 %输入层到隐层权矩阵 V=rand(N,m); %隐层到输出层权矩阵 W=rand(m,L); %开始训练,转移函数选择双极性Sigmoid函数 Q=100000;%训练次数计数器 E=zeros(Q,1);%误差 Emin=0.3; %训练要求精度 learnr=0.2; %学习率 q=1;%训练次数计数,批训练 %%权值调整 while q Y=(1-exp(-netj))./(1+exp(-netj)); netk=W.'*Y; O=(1-exp(-netk))./(1+exp(-netk)); E(q)=sqrt(sum(sum((D-O).^2))/2); %计算总误差 if E(q) W=W+learnr*(Delta_o*Y.').'; %隐层和输出层间的权矩阵调整 Delta_y=(W*Delta_o).*(1-Y.^2)./2; V=V+learnr*(Delta_y*X.').'; %输入层和隐层间的权矩阵调整 q=q+1; end %%输出结果 q O=sign(O) %符号函数取整 A=find(O~=D); %和计算输出和导师信号不同的个数 length(A) %分类结果错误的个数 附件二: 第五题程序 clc;clear %%单层感知器初始化 X=[1,4;1,5;2,4;2,5;3,1;3,2;4,1;4,2]; %输入信号 d=[-1;-1;-1;-1;1;1;1;1]; %输入导师信号 w=zeros(2,9); w(:,1)=rand(2,1); %第一组权值赋予较小的非零随机数 o=zeros(8,1); %输出结果 net=zeros(8,1); %净输入net learnr=0.01; %学习率为0.1 n=0; %循环次数 %%调整权值 while n<100 %训练次数最大设为100次 for i=1:8 net(i)=X(i,:)*w(:,i); %计算净输入net o(i)=sign(net(i)); %计算输出,转移函数为符号函数 w(:,i+1)=w(:,i)+learnr*(d(i)-o(i))*X(i,:)'; %调整权值 w(:,1)=w(:,9); %最后一组权值赋值给第一组权 end n=n+1 if d==o %如果输出等于导师信号,那么训练停止 break end end %%结果输出 x1=[1,1,2,2]; %将两组数据在图中标出 y1=[4,5,4,5]; x2=[3,3,4,4]; y2=[1,2,1,2]; scatter(x1,y1,'r')%画点 hold on; scatter(x2,y2,'b') x=-1:0.01:5; y=-w(1,1)/w(2,1)*x;%得到训练过后的权都一样,取出第一组权确定直线,将两组数据分开 hold on; plot(x,y) 因篇幅问题不能全部显示,请点此查看更多更全内容netj=V.'*X;