神经网络与MATLAB仿真(1)Outline1.人工神经网络简介2.神经网络的特点及应用3.神经网络模型4.神经网络的学习方式1.人工神经网络简介人工神经网络(ArtificialNeuralNetwork,ANN),通常简称为神经网络,是一种在生物神经网络的启示下建立的数据处理模型。主要通过调整神经元之间的权值来对输入的数据进行建模,最终具备解决实际问题。1.人工神经网络简介x1x2xixN......12iN1bfy单层感知器结构人工神经网络的可塑性表现于,其连接权值都是可调整的,它将一系列仅具有简单处理能力的节点通过权值相连,当权值调整至恰当时,就能输出正确的结果。网络将知识存储在调整后的各权值中,这一点是神经网络的精髓。2.神经网络的特点及应用1.自学习和自适应性。给神经网络输入新的训练样本,网络能够自动调整结构参数,改变映射关系2.非线性性。人工神经元处于激活或抑制状态,表现为数学上的非线性关系。3.鲁棒性与容错性。局部的损害会使人工神经网络的运行适度减弱,但不会产生灾难性的错误。4.计算的并行性与存储的分布性。每个神经元都可以根据接收到的信息进行独立运算和处理。人工神经网络具有强大的模式识别和数据拟合能力2.神经网络的特点及应用1.模式分类。需要提供已知样本2.聚类。不需要提供已知样本。3.回归与拟合。相似的样本输入在神经网络的映射下,往往能得到相近的输出。4.优化计算。寻找一组参数组合,使由该组合确定的目标函数达到最小值。5.数据压缩。将数据保存于连接权值中。x1x2x3xMФ1ФiФN.........w11wNJw1Jwi1wN1wiJy1yJ3.神经网络模型单层网络:单层感知器,线性网络。多层网络:其他网络。前向网络:BP、径向基网络、自组织网络等。反馈网络:Hopfield网络,Elman网络等。本书共介绍了单层感知器、线性网络、BP网络、径向基网络、自组织竞争网络、反馈网络、随机神经网络等神经网络模型。4.神经网络的学习方式1.有监督学习(有教师学习)。训练样本对应一个教师信号。2.无监督学习(无教师学习)。网络只接受一系列的输入样本,而对该样本应有的输出值一无所知。1.Hebb学习规则:权值的调整量与输入前一神经元输出值和后一神经元输出值的乘积成正比。2.纠错学习规则:权值的调整量与误差大小成正比。3.随机学习规则:Boltzmann机事实上就是模拟退火算法。4.竞争学习规则:只有一个获胜神经元可以进行权值调整,其他神经元的权值维持不变,体现了神经元之间的侧向抑制。abey单神经元网络神经元模型图中为神经元的内部状态,为阈值,为输入信号,,为表示从单元到单元的连接权系数,单神经元模型可描述为:iuijxnj,,1ijwjuiuis)(iiugyjiijijisxwNet)(iiNetfu通常情况下,取即iiuug)()(iiNetfy图7-1单神经元模型常用的神经元非线性特性有以下四种:(1)阈值型图7-2阈值型函数0001)(iiiNetNetNetf(2)分段线性型iliiliiiiiiNetNetfNetNetNetkNetNetNetNetfmax000)(图7-3分段线性函数(3)Sigmoid函数型TNetiieNetf11)(图7-4Sigmoid函数单层感知器Outline1.单层感知器的结构2.单层感知器的学习算法3.感知器的局限性4.单层感知器应用实例1.单层感知器的结构单层感知器属于单层前向网络,即除了输入层和输出层之外只拥有一层神经元节点。感知器(perception)的原理相对简单,是学习其他复杂神经网络的基础。由单个神经元组成的单层感知器只能用来解决线性可分的二分类问题。典型使用场景:将其用于两类模式分类时,就相当于在高维样本空间中,用一个超平面将样本分开。Rosenblatt证明,如果两类模式线性可分,则算法一定收敛。1.单层感知器的结构x1x2xixN......12iN1bfy1sgnNiiiyxb12,,,Nxxxxi1Niiivx1010vyv输入是一个N维向量其中的每一个分量都对应于一个权值,隐含层的输出叠加为一个标量值:随后在二值阈值元件中对得到的v值进行判断,产生二值输出:1.单层感知器的结构122310xx0,2.53,04,1向量2,3ω1x2x1l2l类类11220xxb二维空间中的超平面是一条直线。在直线下方的点,输出-1;在直线上方的点,输出1。分类面:2.单层感知器的学习算法在实际应用中,通常采用纠错学习规则的学习算法。x1x2xixN......12iNfyx0=10=b将偏置作为一个固定输入T12()1,(),(),,()Nnxnxnxnx输入T12()(),(),(),,()Nnbnnnnω权值T0()()()Niiivnxnnωx2.单层感知器的学习算法(1)定义变量和参数。X为输入,y为实际输出,d为期望输出,b为偏置,w为权值。(2)初始化。n=0,将权值向量设置为随机值或全零值。ω(3)激活。输入训练样本,对每个训练样本指定其期望输出。T12()1,(),(),,()Nnxnxnxnxd(4)计算实际输出。T()sgn()()ynnnwx2.单层感知器的学习算法(5)更新权值向量。(1)()()()()nndnynnωωx(6)判断。若满足收敛条件,算法结束;若不满足,n自增1,转到第3步继续执行。误差小于某个预先设定的较小的值两次迭代之间的权值变化已经很小设定最大迭代次数M,当迭代了M次之后算法就停止迭代条件的混合使用,防止出现算法不收敛现象。2.单层感知器的学习算法确定学习率不应当过大,以便为输入向量提供一个比较稳定的权值估计不应当过小,以便使权值能够根据输入的向量x实时变化,体现误差对权值的修正作用粗准焦螺旋和细准焦螺旋的类比。——自适应学习率。3.感知器的局限性单层感知器无法解决线性不可分问题,只能做近似分类。感知器的激活函数使用阈值函数,输出值只有两种取值,限制了在分类种类上的扩展。如果输入样本存在奇异样本,网络需要花费很长的时间。感知器的学习算法只对单层有效。4.单层感知器应用实例1.手算2.使用工具箱函数坐标点的二类模式分类问题:二维平面坐标系中存在一系列坐标点,已知部分坐标点属于第一类,部分坐标点属于第二类,求新坐标点的类别。4.单层感知器应用实例4.单层感知器应用实例xy11bfy2vT12,,bω定义:T11221,,1,,xyxyPT[0,1,0,0,0,1]dn=0.2;P=[-91-12-40,5;...15-84511,9];d=[0,1,0,0,0,1];P=[ones(1,6);P]4.单层感知器应用实例(2)初始化,将权值和偏置初始化为零。w=[0,0,0];(3)第一次迭代。v=w*P%输出层的输入y=hardlim(v)%计算网络的输出根据调整权值e=(d-y)%误差ee=mae(e)%计算误差的平均绝对差w=w+n*(T-y)*P'%调整wTωωdyP4.单层感知器应用实例(4)第二次迭代。重复以上的步骤v=w*Py=hardlim(v)e=(d-y)ee=mae(e)%误差不为零!w=w+n*(T-y)*P'均匀分布元素的方差4.单层感知器应用实例(5)第三次迭代,重复以上步骤。v=w*Py=hardlim(v)e=(d-y)ee=mae(e)w=w+n*(T-y)*P'5.单层感知器应用实例(6)第四次迭代。v=w*Py=hardlim(v)e=(d-y)ee=mae(e)w=w+n*(T-y)*P'73.40.40xyperception_hand.m误差为零,权值w不再更新,得到的分类超平面为:4.单层感知器应用实例2.使用工具箱函数用到的函数:newptrainsimperception_fcn.m程序%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-845119%%(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个坐标点的二分类');-12-10-8-6-4-20246-10-50510156个坐标点的二分类第一类第二类%%(3)初始化w=[0,0,0];%%(4)第一次迭代计算V和y值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=0w=w+n*(d-y)*P';ww=-0.40007.0000-3.4000程序在第4次迭代时就已经取得了正确的结果,mae值为零。此时算法就收敛了,由于mae值为零,因此继续更新w向量,其值也保持不变。%%显示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)/