1.单层感知器的结构单层感知器属于单层前向网络,即除了输入层和输出层之外只拥有一层神经元节点。感知器(perception)的原理相对简单,是学习其他复杂神经网络的基础。由单个神经元组成的单层感知器只能用来解决线性可分的二分类问题。典型使用场景:将其用于两类模式分类时,就相当于在高维样本空间中,用一个超平面将样本分开。Rosenblatt证明,如果两类模式线性可分,则算法一定收敛。输入是一个N维向量其中的每一个分量都对应于一个权值,隐含层的输出叠加为一个标量值:随后在二值阈值元件中对得到的v值进行判断,产生二值输出:二维空间中的超平面是一条直线。在直线下方的点,输出-1;在直线上方的点,输出1。分类面:x1x2xixN......12iN1bfy12,,,Nxxxx1Niiivx1sgnNiiiyxb1010vyv122310xx0,2.53,04,1向量2,3ω1x2x1l2l类类11220xxb在实际应用中,通常采用纠错学习规则的学习算法。将偏置作为一个固定输入输入权值2.单层感知器的学习算法(1)定义变量和参数。X为输入,y为实际输出,d为期望输出,b为偏置,w为权值。(2)初始化。n=0,将权值向量设置为随机值或全零值。(3)激活。输入训练样本,对每个训练样本指定其期望输出d(4)计算实际输出。x1x2xixN......12iNfyx0=10=bT12()1,(),(),,()NnxnxnxnxT12()(),(),(),,()NnbnnnnωT0()()()NiiivnxnnωxT12()1,(),(),,()NnxnxnxnxT()sgn()()ynnnwx(5)更新权值向量。(6)判断。若满足收敛条件,算法结束;若不满足,n自增1,转到第3步继续执行。两次迭代之间的权值变化已经很小设定最大迭代次数M,当迭代了M次之后算法就停止迭代误差小于某个预先设定的较小的值确定学习率不应当过大,以便为输入向量提供一个比较稳定的权值估计不应当过小,以便使权值能够根据输入的向量x实时变化,体现误差对权值的修正作用粗准焦螺旋和细准焦螺旋的类比。——自适应学习率。3.感知器的局限性1.单层感知器无法解决线性不可分问题,只能做近似分类。2.感知器的激活函数使用阈值函数,输出值只有两种取值,限制了在分类种类上的扩展。如果输入样本存在奇异样本,网络需要花费很长的时间。感知器的学习算法只对单层有效。4.单层感知器应用实例坐标点的二类模式分类问题:二维平面坐标系中存在一系列坐标点,已知部分坐标点属于第一类,部分坐标点属于第二类,求新坐(1)()()()()nndnynnωωx条件的混合使用,防止出现算法不收敛现象。标点的类别。序号Xy所属类型(期望输出)1-915021813-12404-4505011065911.手算2.使用工具箱函数定义:(2)初始化,将权值和偏置初始化为零。w=[0,0,0];(3)第一次迭代。v=w*P%输出层的输入y=hardlim(v)%计算网络的输出根据调整权值e=(d-y)%误差ee=mae(e)%计算误差的平均绝对差w=w+n*(T-y)*P'%调整wxy11bfy2vT12,,bωT[0,1,0,0,0,1]dT11221,,1,,xyxyPn=0.2;P=[-91-12-40,5;........15-84511,9];d=[0,1,0,0,0,1];P=[ones(1,6);P](4)第二次迭代。重复以上的步骤v=w*Py=hardlim(v)e=(d-y)ee=mae(e)%误差不为零!w=w+n*(T-y)*P'(5)第三次迭代,重复以上步骤。v=w*Py=hardlim(v)e=(d-y)ee=mae(e)w=w+n*(T-y)*P'(6)第四次迭代。v=w*Py=hardlim(v)e=(d-y)ee=mae(e)w=w+n*(T-y)*P'perception_hand.m误差为零,权值w不再更新,得到的分类超平面为:程序:%perception_hand.m%%清理(1)定义变量定义输入期望输出clear,clccloseall%%n=0.2;%学习率w=[0,0,0];P=[-9,1,-12,-4,0,5;...15,-8,4,5,11,9];d=[0,1,0,0,0,1];%期望输出P=[ones(1,6);P];PP=111111-91-12-40515-84511973.40.40xy%%(2)显示要分类的点figure;subplot(2,1,1);%显示待分类的点和分类结果plot([-9,-12-40],[15,4511],'o');holdon;plot([1,5],[-8,9],'*');axis([-13,6,-10,16]);legend('第一类','第二类');title('6个坐标点的二分类');%%(3)初始化w=[0,0,0];%%(4)第一次迭代计算V和y值-12-10-8-6-4-20246-10-50510156个坐标点的二分类第一类第二类v=w*P;vy=hardlim(v);%实际输出y%%y是实际输出,与期望输出d不一致需要根据误差d-y调整权值和偏置e=(d-y);eee=mae(e);eew=w+n*(d-y)*P';wv=000000y=111111e=-10-1-1-10ee=0.6667w=-0.80005.0000-7.0000%%(5)第二次迭代,根据第一次迭代更新的w向量的值,计算V和y值v=w*P;vy=hardlim(v);%实际输出ye=(d-y);eee=mae(e);ee%%可以发现,实际输出与期望输出仍然不一致,还需要再次调整w向量w=w+n*(d-y)*P';wv=-150.800060.2000-88.8000-55.8000-77.8000-38.8000y=010000e=000001ee=0.1667w=-0.60006.0000-5.2000%%(6)第三次迭代,根据第一次迭代更新的w向量的值,计算V和y值v=w*P;vy=hardlim(v);%实际输出ye=(d-y);eee=mae(e);ee%%可以发现,mae值与前一次迭代相比没有变化,但是v值已经有了更新,继续调整权值和偏置w=w+n*(d-y)*P';wv=-132.600047.0000-93.4000-50.6000-57.8000-17.4000y=010000e=000001ee=0.1667w=-0.40007.0000-3.4000%%(7)第四次迭代v=w*P;vy=hardlim(v);%实际输出ye=(d-y);eee=mae(e);ee%%可以发现,程序在第四次迭代时就已经取得正确的结果,mae值为0,此时算法就收敛了,由于mae值为0,因此即使继续更新w向量,其值也保持不变:w=w+n*(d-y)*P';wv=-114.400033.8000-98.0000-45.4000-37.80004.0000y=010001e=000000ee=0程序在第4次迭代时就已经取得了正确的结果,mae值为零。此时算法就收敛了,由于mae值为零,因此继续更新w向量,其值也保持不变。w=w+n*(d-y)*P';ww=-0.40007.0000-3.4000%%显示figure;subplot(2,1,1);%显示待分类的点和分类结果plot([-9,-12-40],[15,4511],'o');holdon;plot([1,5],[-8,9],'*');axis([-13,6,-10,16]);legend('第一类','第二类');title('6个坐标点的二分类');x=-13:.2:6;y=x*(-w(2)/w(3))-w(1)/w(3);plot(x,y);holdoff;总程序%perception_hand.m%%清理clear,clccloseall%%n=0.2;%学习率w=[0,0,0];P=[-9,1,-12,-4,0,5;...15,-8,4,5,11,9];d=[0,1,0,0,0,1];%期望输出P=[ones(1,6);P];MAX=20;%最大迭代次数为20次%%训练i=0;while1v=w*P;y=hardlim(v);%实际输出%更新e=(d-y);ee(i+1)=mae(e);if(ee(i+1)0.001)%判断disp('wehavegotit:');disp(w);break;end%更新权值和偏置w=w+n*(d-y)*P';if(i=MAX)%达到最大迭代次数,退出disp('MAXtimesloop');disp(w);disp(ee(i+1));break;endi=i+1;end%%显示figure;subplot(2,1,1);%显示待分类的点和分类结果plot([-9,-12-40],[15,4511],'o');holdon;plot([1,5],[-8,9],'*');axis([-13,6,-10,16]);legend('第一类','第二类');title('6个坐标点的二分类');x=-13:.2:6;y=x*(-w(2)/w(3))-w(1)/w(3);plot(x,y);holdoff;subplot(2,1,2);%显示mae值的变化x=0:i;plot(x,ee,'o-');s=sprintf('mae的值(迭代次数:%d)',i+1);title(s);1.线性神经网络的结构x1x2xixN......12iN1bfyvq1Niiivxb()ypurelinv1()Niiiypurelinxb线性神经网络最典型的例子是自适应线性元件(AdaptiveLinearElement,Adaline)。线性神经网络与感知器的主要区别在于,感知器的传输函数只能输出两种可能的值,而线性神经网络的输出可以取任意值,其传输函数是线性函数。线性神经网络在收敛的精度和速度上较感知器都有了较大提高,但由于其线性运算规则,它也只能解决线性可分的问题。若网络中包含多个神经元节点,就能形成多个输出,这种线性神经网络叫Madaline网络。Madaline可以用一种间接的方式解决线性不可分的问题,方法是用多个线性函数对区域进行划分,然后对各个神经元的输出做逻辑运算。线性神经网络解决线性不可分问题的另一个方法是,对神经元添加非线性输入,从而引入非线性成分,这样做会使等效的输入维度变大。x1x21b1fv1v21bsx1x2...y1q1ysqs(1,0)(0,0)(0,1)(1,1)线性神经网络与感知器的对比网络传输函数。感知器传输函数是一个二值阈值元件,而线性神经网络的传输函数是线性的。这就决定了感知器只能做简单的分类,而线性神经网络还可以实现拟合或逼近。学习算法。LMS算法得到的分类边界往往处于两类模式的正中间,而感知器学习算法在刚刚能正确分类的位置就停下来了,从而使分类边界离一些模式距离过近,使系统对误差更敏感线性神经网络应用实例——与网络的训练中共需确定3个自由变量,而输入的训练向量则有4个,因此可以形成一个线性方程组:x1x21111221bfyvq2221x22x12x(1,0)(0,0)(0,1)(1,1):0:1xy11bfy2v手算:%定义P=[0,0,1,1;0,1,0,1]P=[ones(1,4);P]%包含偏置的输入向量d=[0,0,0,1]%期望输出向量%初始化w=[0,0,0]%权值向量初始化为零向量lr=maxlinlr(P)%根据输入矩阵求解最大学习率MAX=200