神经网络及SVM简介以冯·诺依曼型计算机为中心的信息处理技术的高速发展,使得计算机在当今的信息化社会中起着十分重要的作用。但是,当用它来解决某些人工智能问题时却遇到了很大的困难。例如,一个人可以很容易地识别他人的脸孔,但计算机则很难做到这一点。大脑是由生物神经元构成的巨型网络,它在本质上不同于计算机,是一种大规模的并行处理系统,它具有学习、联想记忆、综合等能力,并有巧妙的信息处理方法。人工神经网络来源于对人脑实际神经网络的模拟一、神经网络发展历史1.背景知识人脑和CPU神经细胞利用电-化学过程交换信号。输入信号来自另一些神经细胞。这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触(synapse),信号就从树突上的突触进入本细胞。信号在大脑中实际怎样传输是一个相当复杂的过程,但就我们而言,重要的是把它看成和现代的计算机一样,利用一系列的0和1来进行操作。就是说,大脑的神经细胞也只有两种状态:兴奋(fire)和不兴奋(即抑制)。发射信号的强度不变,变化的仅仅是频率。神经细胞利用一种我们还不知道的方法,把所有从树突上突触进来的信号进行相加,如果全部信号的总和超过某个阀值,就会激发神经细胞进入兴奋(fire)状态,这时就会有一个电信号通过轴突发送出去给其他神经细胞。如果信号总和没有达到阀值,神经细胞就不会兴奋起来。人脑和CPU动物神经细胞的数目(数量级)蜗牛10,000(=10^4)蜜蜂100,000(=10^5)蜂雀10,000,000(=10^7)老鼠100,000,000(=10^8)人类10,000,000,000(=10^10)大象100,000,000,000(=10^11)人脑和CPUCPU只具备一个功能就是二进制加法运算人脑的特点对损伤有冗余性(tolerance)能实现无监督的学习处理信息的效率极高善于归纳推广CPUi73.0Ghz,4个核人脑100hz,10G个核人工神经网络一个人工神经网络(Artificialneuralnetwork,简称ANN)就是要在当代数字计算机现有规模的约束下,来模拟这种大量的并行性,并在实现这一工作时,使它能显示许多和生物学大脑相类似的特性。人工神经网络(ArtificialNeuralNetwroks,简称ANN)是对人类大脑系统的一种仿真,简单地讲,它是一个数学模型,可以用电子线路来实现,也可以用计算机程序来模拟,是人工智能研究的一种方法。实际上它是由大量的、功能比较简单的形式神经元互相连接而构成的复杂网络系统,用它可以模拟大脑的许多基本功能和简单的思维方式。尽管它还不是大脑的完美元缺的模型,但它可以通过学习来获取外部的知识并存贮在网络内,可以解决计算机不易处理的难题,特别是语音和图像的识别、理解、知识的处理、组合优化计算和智能控制等一系列本质上是非计算的问题。2.什么是人工神经网络1943年,美国心理学家W.McCulloch和数学家W.Pitts在提出了一个简单的神经元模型,即MP模型。1958年,F.Rosenblatt等研制出了感知机(Perceptron)。3.几个发展阶段第一次热潮(40-60年代未)1982年,美国物理学家J.J.Hopfield提出Hopfield模型,它是一个互联的非线性动力学网络他解决问题的方法是一种反复运算的动态过程,这是符号逻辑处理方法所不具备的性质.1987年首届国际ANN大会在圣地亚哥召开,国际ANN联合会成立,创办了多种ANN国际刊物。1990年12月,北京召开首届学术会议。低潮(70-80年代初)第二次热潮第三次热潮GPU大数据新方法深度学习理论学习的类型人工神经网络人工神经元模型x1…xn表示与该神经元相连接的所有神经元的输入(出)w1…wn表示与相连接神经元的突触强度(连接权)θ表示神经元的(电压)阈值。f()表示激励函数,单调上升函数,且取有限值神经元电位值:神经元的输出值:y=f(s)1x2xnx1w2wnwΣf()...ysniiitxwfty1)()(人工神经网络激励函数的基本作用控制输入对输出的激活;对输入、输出进行函数转换;将可能无限域的输入变换成指定的有限范围内的输出。激励函数类型阈值函数线性函数非线性函数Sigmoid函数人工神经网络Sigmoid函数就是把神经细胞原有的阶跃式输出曲线钝化为一光滑曲线•S型函数具有非线性放大系数功能,可以把输入从负无穷大到正无穷大的信号,变换成-1到l之间输出•对较大的输入信号,放大系数较小;而对较小的输入信号,放大系数则较大•采用S型激活函数可以处理和逼近非线性输入/输出关系BP神经网络BP神经网络计算BP神经网络Rumelhart,McClelland于1985年提出了BP网络的误差反向后传BP(BackPropagation)学习算法BP神经网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。J.McClellandDavidRumelhart学习规则BP算法属于δ算法,是一种监督式的学习算法主要思想对于q个输入学习样本:P1,P2,…,Pq,已知与其对应的输出样本为:T1,T2,…,Tq使网络输出层的误差平方和达到最小用网络的实际输出A1,A2,…,Aq,与目标矢量T1,T2,…,Tq之间的误差修改其权值,使Am与期望的Tm,(m=l,…,q)尽可能接近2020/1/718学习规则BP算法是由两部分组成,信息的正向传递与误差的反向传播正向传播过程中,输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态如果在输出层未得到期望的输出,则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标2020/1/719一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”现象。Hornik等早已证明:若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的MLP网络能够以任意精度逼近任何有理函数。显然,这是一个存在性结论。在设计BP网络时可参考这一点,应优先考虑3层BP网络(即有1个隐层)。一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。隐层数隐层节点数在BP网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。应用实例net=newff(A,B,{C},’trainfun’)Matlab命令A是一个n×2的矩阵,第i行元素为输入信号xi的最小值和最大值;参数说明B为一k维行向量,其元素为各隐层节点数;trainfun为学习规则采用的训练函数(常见训练函数如下表)。C为一k维字符串行向量,每一分量为对应层神经元的激励函数;函数名功能函数名traingd梯度下降法traincgftraingdm势能修正法traincgptraingdx自调整学习效率法traincgbtrainrp恢复BP法trainscgFR共轭梯度法trainbfgBFGS拟牛顿法PR共轭梯度法trainoss一步共轭+拟牛顿PB共轭梯度法trainlmLM法标量共轭梯度法trainbrBayesian规范法2.常见训练函数MATLAB中激励函数为1log()1xsigxetan()xxxxeesigxee()purelinxx其字符串分别为:’logsig’,’tansig’,’purelin’3.激励函数除了需要输入A,B,{C},’trainfun’外,还有些默认的参数可修改,如下表4.可修改参数参数名功能缺省值net.trainParam.goal目标函数设定值0net.trainParam.epochs最大迭代次数100net.trainParam.show显示中间结果的周期25net.trainParam.lr整批学习的学习效率0.01net.trainParam.mc势能学习规则traingdm的势能率0.9注:不同版本Matlab的可修改参数列表可能不同。[net,tr,Y1,E]=train(net,X,Y)5.BP网络的训练与泛化网络训练训练跟踪信息训练后网络网络实际输出误差矩阵网络训练函数未经训练网络网络实际输入网络应有输出X为n×M矩阵,为输入数据矩阵,M为样本的组数。Y为m×M矩阵,为输出数据矩阵。训练结束后,对新的输入点数据X2,调用sim函数进行泛化,得出这些输入点处的输出矩阵Y2.数据泛化Y2=sim(net,X2)用经过训练的网络对于不是样本集的输入,计算出相应的输出。什么是数据泛化?例1由下面的语句生成一组数据x和y,用神经网络进行数据拟合x=0:.1:10;y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);可知(x,y)是曲线上的点。0.2130.170.120.54sin(1.23)xxyeexx=0:.1:10;y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);net=newff([0,10],[5,1],{'tansig','tansig'});net.trainParam.epochs=1000;net=train(net,x,y);x0=0.05:.1:10;figure(1)y1=sim(net,x0);plot(x,y,'o',x0,y1,'r')0246810-0.4-0.200.20.40.6实例.蠓虫分类问题的神经网络方法(1989年MCM竞赛题目)生物学家试图对两种蠓虫(Af与Apf)进行鉴别,依据的资料是触角和翅膀的长度,已经测得9只Af和6只Apf的数据如下:9只Af触角长:1.241.361.381.381.381.401.481.541.56翅膀长:1.721.741.641.821.901.701.821.822.086只Apf触角长:1.141.181.201.261.281.30翅膀长:1.781.961.862.002.001.96问题:(1)如何凭借原始资料(15对数据,被称之为学习样本)制定一种方法,正确区分两类蠓虫;(2)依据确立的方法,对以下三个样本:(1.24,1.80),(1.28,1.84),(1.40,2.04)加以识别解法一:建立两层前向神经网络如下:隐层节点可适量选取(没有具体标准)。X=为输入矩阵,x1对应于触角长,x2对应于翅膀长。Y=为输出矩阵规定Af对应的应有输出为,Apf对应的应有输出为1x2x1y2y输入层隐层输出层21xx21yy1001以上神经网络模型的MATLAB程序如下:x=[1.241.361.381.381.381.401.481.541.561.141.181.201.261.281.301.721.741.641.821.901.701.821.822.081.781.961.862.002.001.96];%原始数据x=x-1.1;%数据标准化y=[000000000111111;111111111000000];%应有的输出net=newff([0,1;01],