1第三章感知器3.1单层感知器3.2多层感知器23.1单层感知器3.1.1感知器模型3感知器1958年,美国心理学家FrankRosenblatt提出一种具有单层计算单元的神经网络,称为Perceptron,即感知器。感知器是模拟人的视觉接受环境信息,并由神经冲动进行信息传递的层次型神经网络。感知器研究中首次提出了自组织、自学习的思想,而且对所能解决的问题存在着收敛算法,并能从数学上严格证明,因而对神经网络研究起了重要推动作用。单层感知器的结构与功能都非常简单,以至于在解决实际问题时很少采用,但由于它在神经网络研究中具有重要意义,是研究其它网络的基础,而且较易学习和理解,适合于作为学习神经网络的起点。3j=1,2,…,mTni21,...,x,...x,xx)(XTmi21,...,o,...o,oo)(OTnjijj2j1j,...,w,...w,ww)(W3.1.1感知器模型前馈神经网络--单层感知器o1…oj…omW1○Wj○Wm○○○○○x1x2…xi…xn4净输入:输出:n1iiijjxwnet(3.1))()()(XWTjn0iiijjjjsgnxwsgnTnetsgno(3.2)3.1.1感知器模型前馈神经网络--单层感知器5(1)设输入向量X=(x1,x2)T0Txwxw10Txwxw1oj2j21j1j2j21j1j输出:则由方程w1jx1+w2jx2-Tj=0(3.3)确定了二维平面上的一条分界线。ojx1-1x2前馈神经网络--单层感知器3.1.2感知器的功能(1)输入是二维w1jx1+w2jx2–Tj=0w1jx1=Tj-w2jx2x1=(Tj-w2jx2)/w1j=-(w2j/w1j)x2+Tj/w1j=ax2+cx1****O**O**OO*Ox2**OOOO感知器的功能(二维)0TjXWx1****O**O**OO*Ox2**OOOO0TjXW0TjXW0TjXW0TjXW0TjXW8x1****O**O**OO*Ox2**OOOO前馈神经网络--单层感知器3.1.2感知器的功能9(2)设输入向量X=(x1,x2,x3)T0Txwxwxw10Txwxwxw1oj3j32j21j1j3j32j21j1j输出:则由方程wijx1+w2jx2+w3j–Tj=0(3.4)确定了三维空间上的一个分界平面。x2ojx1x3-1前馈神经网络--单层感知器3.1.2感知器的功能(2)输入是三维w1jx1+w2jx2+w3jx3–Tj=0x1=ax2+bx3+c0TjXW是什么?x1****O**O**OO*Ox2**OOOx311x1****O**O**OO*Ox2**OOOx3前馈神经网络--单层感知器3.1.2感知器的功能12(3)设输入向量X=(x1,x2,…,xn)T则由方程w1x1+w2jx2+…+wnj–Tj=0(3.6)确定了n维空间上的一个分界超平面。此平面可以将输入样本分为两类。输出:w1jx1+w2jx2+…+wnj–Tj=0(3.5)前馈神经网络--单层感知器3.1.2感知器的功能13一个最简单的单计算节点感知器具有分类功能。其分类原理是将分类知识存储于感知器的权向量(包含了阈值)中,由权向量确定的分类判决界面将输入模式分为两类。前馈神经网络--单层感知器3.1.2感知器的功能例一用感知器实现逻辑“与”功能x1x2y000010100111逻辑“与”真值表例一用感知器实现逻辑“与”功能感知器结构x1○0.50.5○yx2○0.75-1wix1+w2x2-T=00.5x1+0.5x2-0.75=0例二用感知器实现逻辑“或”功能x1x2y000011101111逻辑“或”真值表例二用感知器实现逻辑“或”功能感知器结构x1○11○yx2○0.5-1wix1+w2x2-T=0x1+x2-0.5=0思考并回答分界线的方程是什么?感知器的模型如何表示?图示?数学表达式?0TjXW感知器结构19问题:能否用感知器实现“异或”功能?“异或”的真值表x1x2y000011101110x1OOx2前馈神经网络--单层感知器3.1.3感知器的局限性单计算层感知器的局限性是仅对线性可分问题具有分类能力。203.1.4感知器的学习关键问题就是求0TjXW3.1.4感知器的学习算法Perceptron(感知器)学习规则式中,当实际输出与期望值相同时,权值不需要调整。感知器学习规则代表一种有导师学习。22感知器学习规则的训练步骤:(1)对各权值w0j(0),w1j(0),┄,wnj(0),j=1,2,┄,m(m为计算层的节点数)赋予较小的非零随机数;(2)输入样本对{Xp,dp},其中Xp=(-1,x1p,x2p,┄,xnp),dp为期望的输出向量(教师信号),上标p代表样本对的模式序号,设样本集中的样本总数为P,则p=1,2,┄,P;前馈神经网络--单层感知器3.1.4感知器的学习算法23感知器学习规则的训练步骤:(3)计算各节点的实际输出ojp(t)=sgn[WjT(t)Xp],j=1,2,...,m;(4)调整各节点对应的权值,Wj(t+1)=Wj(t)+η[djp-ojp(t)]Xp,j=1,2,┄,m,其中为学习率,用于控制调整速度,太大会影响训练的稳定性,太小则使训练的收敛速度变慢,一般取0<η≤1;(5)返回到步骤(2)输入下一对样本,周而复始直到对所有样本,感知器的实际输出与期望输出相等。前馈神经网络--单层感知器3.1.4感知器的学习算法24PerceptronRule30感知器学习规则的训练步骤:(1)权值初始化(2)输入样本对(3)计算输出(4)根据感知器学习规则调整权值(5)返回到步骤(2)输入下一对样本,周而复始直到对所有样本,感知器的实际输出与期望输出相等。前馈神经网络--单层感知器31例三单计算节点感知器,3个输入。给定3对训练样本对如下:X1=(-1,1,-2,0)Td1=1X2=(-1,0,1.5,-0.5)Td2=1X3=(-1,-1,1,0.5)Td3=1设初始权向量W(0)=(0.5,1,-1,0)T,η=0.1。注意,输入向量中第一个分量x0恒等于-1,权向量中第一个分量为阈值,试根据以上学习规则训练该感知器。前馈神经网络--单层感知器3.1.4感知器的学习算法32解:第一步输入X1,得WT(0)X1=(0.5,1,-1,0)(-1,1,-2,0)T=2.5o1(0)=sgn(2.5)=1W(1)=W(0)+η[d1-o1(0)]X1=(0.5,1,-1,0)T+0.1(-1-1)(-1,1,-2,0)T=(0.7,0.8,-0.6,0)T前馈神经网络--单层感知器3.1.4感知器的学习算法33第二步输入X2,得WT(1)X2=(0.7,0.8,-0.6,0)(-1,0,1.5,-0.5)T=-1.6o2(1)=sgn(-1.6)=-1W(2)=W(1)+η[d2-o2(1)]X2=(0.7,0.8,-0.6,0)T+0.1[-1-(-1)](-1,0,1.5,-0.5)T=(0.7,0.8,-0.6,0)T由于d2=o2(1),所以W(2)=W(1)。前馈神经网络--单层感知器3.1.4感知器的学习算法34第三步输入X3,得WT(2)X3=(0.7,0.8,-0.6,0)(-1,-1,1,0.5)T=-2.1O3(2)=sgn(-2.1=-1W(3)=W(2)+η[d3-o3(2)]X3=(0.7,0.8,-0.6,0)T+0.1[1-(-1)](-1,-1,1,0.5)T=(0.5,0.6,-0.4,0.1)T第四步返回到第一步,继续训练直到dp-op=0,p=1,2,3。前馈神经网络--单层感知器3.1.4感知器的学习算法353.1.3单层感知器的局限性问题:能否用感知器解决如下问题?x1OOx2363.1.3单层感知器的局限性无法解决“异或”问题只能解决线性可分问题“异或”的真值表x1x2y00001110111037o○T3y1y2-1○○w11w21w22T1T2w12-1○○x1x2双层感知器x1S1OS2Ox2“异或”问题分类例四用两计算层感知器解决“异或”问题。“异或”的真值表x1x2y1y2o00110011011001111110前馈神经网络—多层感知器3.2多层感知器383.2.1多层感知器的提出提出的动因单计算层感知器的局限性:只能解决线性可分问题,而大量的分类问题是线性不可分的。解决的有效办法在输入层与输出层之间引入隐层作为输入模式的“内部表示”,将单计算层感知器变成多(计算)层感知器。采用非线性连续函数作为转移函数,使区域边界线的基本线素由直线变成曲线,从而使整个边界线变成连续光滑的曲线。39(a)开域(b)闭域前馈神经网络—多层感知器3.2多层感知器40具有不同隐层数的感知器的分类能力对比感知器结构异或问题复杂问题判决域形状判决域无隐层半平面单隐层凸域双隐层任意复杂形状域⊿Wj(t)=[dj-oj(t)]X前馈神经网络—多层感知器3.2多层感知器413.3基于MATLAB的感知器神经网络设计423.3.1MATLAB快速入门1MATLAB界面组成2MATLAB基本运算3MATLAB绘图函数431MATLAB界面组成工作空间浏览器窗命令行窗口命令历史窗口当前目录窗口441MATLAB界面组成MATLAB界面组成命令行窗口命令历史窗口工作空间浏览器窗口当前目录窗口编辑调试窗口451MATLAB界面组成在MATLAB主窗口中,点击“Start”“DesktopTools”“Editor”即可打开编辑调试窗口。462MATLAB基本运算基本运算(5*2+1.3-0.8)*10/25ans=4.2000x=(5*2+1.3-0.8)*10^2/25x=42变量命名规则第一个字母必须是英文字母;字母间不可留空格;最多只能有19个字母,MATLAB会忽略多余字母。472MATLAB基本运算基本运算若不想让MATLAB每次都显示运算结果,只需在运算式最后加上“;”即可MATLAB可同时执行数个命令,只要以逗号或分号将命令隔开:x=sin(pi/3);y=x^2;z=y*10,z=7.5000若一个数学运算式太长,可用三个句点将其延伸到下一行:z=10*sin(pi/3)*...sin(pi/3);482MATLAB基本运算MATLAB的查询命令键入helpinv即可得知有关inv命令的用法向量与矩阵的表示及运算向量的表示方法与运算x=[1352];%表示一个行向量y=2*x+1y=37115492MATLAB基本运算向量与矩阵的表示及运算更改、增加或删除向量中的元素y(3)=2%更改第三个元素y=%更改第三个元素后的结果3725y(6)=10%加入第六个元素y=%加入第六个元素后的结果3725010y(4)=[]%删除第四个元素y=%删除第四个元素后的结果372010502MATLAB基本运算向量与矩阵的表示及运算向量的一个元素或一部分向量的运算x(2)*3+y(4)%取出x的第二个元素和y的第四个元素来做运算ans=9y(2:4)-1%用y的第二至第四个元素分别做减1运算,2:4代表向量中的第2、3、4号元素ans=61-1转置z=x'z=1352512MATLAB基本运算矩阵的表示方法和各种处理方式表示在命令窗口中输入A=[1234;5678;9101112]结果为:A=123456789101112522MATLAB基本运算矩阵的表示方法和各种处理方式运算A(2,3)=5%将矩阵第二行,第三列的元素值置为5A=%置值后的矩阵123456589101112B=A(2,1:3)%取出矩阵A中第二行第一个到第三个元素,构成矩阵BB=565A=[AB']%将B转置后,再以列向量