您好,欢迎访问三七文档
神经网络简介神经网络简介:人工神经网络是以工程技术手段来模拟人脑神经元网络的结构和特征的系统。利用人工神经网络可以构成各种不同拓扑结构的神经网络,他是生物神经网络的一种模拟和近似。神经网络的主要连接形式主要有前馈型和反馈型神经网络。常用的前馈型有感知器神经网络、BP神经网络,常用的反馈型有Hopfield网络。这里介绍BP(BackPropagation)神经网络,即误差反向传播算法。原理:BP(BackPropagation)网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidelayer)和输出层(outputlayer),其中隐层可以是一层也可以是多层。图:三层神经网络结构图(一个隐层)任何从输入到输出的连续映射函数都可以用一个三层的非线性网络实现BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成。正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元。若在输出层得不到期望的输出,则转向误差信号的反向传播流程。通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程。单个神经元的计算:设12,...nixxx分别代表来自神经元1,2...ni的输入;12,...iiini与下一层第j个神经元的连接强度,即权值;jb为阈值;()f为传递函数;jy为第j个神经元的输出。若记001,jjxwb,于是节点j的净输入jS可表示为:0*nijijiiSwx;净输入jS通过激活函数()f后,便得到第j个神经元的输出:0()(*),nijjijiiyfSfwx激活函数:激活函数()f是单调上升可微函数,除输出层激活函数外,其他层激活函数必须是有界函数,必有一最大值。BP网络常用的激活函数有多种。Log-sigmoid型:1(),,0()11xfxxfxe,'()()(1())fxfxfxtan-sigmod型:2()1,,1()11xfxxfxe,2(1())'()2fxfx线性激活函数purelin函数:yx,输入与输出值可取任意值。BP网络通常有一个或多个隐层,该层中的神经元均采用sigmoid型传递函数,输出层的神经元可以采用线性传递函数,也可用S形函数。正向传播:设BP网络的输入层有ni个节点,隐层有nh个节点,输出层有no个节点,输入层与隐层之间的权值为ikw(ikw为(1)*ninh的矩阵),隐层与输出层之间的权值为kjw(kjw为(1)*nhno的矩阵),隐层的传递函数为1()f,输出层的传递函数为2()f,则隐层节点的输出为(将阈值写入求和项中):10(*),1,2...nikikiizfwxknh;输出层节点的输出为:20(*),1,2...nhjkjkkyfwzjno由此,BP网络就完成了ni维空间向量对no维空间的近似映射。defupdate(self,inputs):#更新ai[],ah[],a0[]中的元素,所以输入的元素个数必须跟输入层一样,将三层先填满数据iflen(inputs)!=self.ni-1:raiseValueError('wrongnumberofinputs')foriinrange(self.ni-1):#将数据导入初始层self.ai[i]=inputs[i]forjinrange(self.nh1):#将输入层的数据传递到隐层sum=0.0foriinrange(self.ni):sum=sum+self.ai[i]*self.wi[i][j]self.ah[j]=sigmoid(sum)#调用激活函数forkinrange(self.no):sum=0.0forjinrange(self.nh2):sum=sum+self.ah[j]*self.wo[j][k]self.ao[k]=purelin(sum)returnself.ao[:]#返回输出层的值反向传播:误差反向传播的过程实际上就是权值学习的过程。网络权值根据不同的训练模式进行更新。常用的有在线模式和批处理模式。在线模式中的训练样P本是逐个处理的,而批处理模式的所有训练样本是成批处理的。输入P个学习样本,用12,...pXXX来表示,第p个样本输入到网络后计算得到输出pjy,1,2...jno。采用平方型误差函数,于是得到第p个样本的误差pE:210.5*()nopppjjjEty式中:pjt为期望输出。输出层权值的调整:用梯度下降法调整kjw,使误差pE变小。梯度下降法原理即是沿着梯度下降方向目标函数变化最快,梯度为2()'()*pppkjjjjkkjEwtyfSzw,其中误差信号2()'()ppyjjjjtyfS,权值的改变量为负梯度方向2()'()*ppkjkjjjjkwwtyfSz,为学习率output_deltas=[0.0]*self.noforkinrange(self.no):error2=targets[k]-self.ao[k]#输出值与真实值之间的误差output_deltas[k]=dpurelin(self.ao[k])*error2#输出层的局部梯度,导数乘以误差,不在隐层就这么定义forjinrange(self.nh2):#更新隐层与输出层之间的权重forkinrange(self.no):change=output_deltas[k]*self.ah[j]#权值的校正值w的改变量(若没有冲量,且学习率为1的时候)self.wo[j][k]=self.wo[j][k]+N*change+M*self.co[j][k]self.co[j][k]=change#printN*change,M*self.co[j][k]隐层权值的调整:梯度为211()'()'()*nopppikjjjkjkijikEwtyfSwfSxw,其中误差信号211()'()'()noppzkjjjkjkjtyfSwfS,从而得到隐层各神经元的权值调整公式为:211()'()'()*noppikikjjjkjkijwwtyfSwfSxhidden_deltas=[0.0]*self.nh2#隐层的局部梯度forjinrange(self.nh2):error1=0.0forkinrange(self.no):error1=error1+output_deltas[k]*self.wo[j][k]hidden_deltas[j]=dsigmoid(self.ah[j])*error1#隐层的梯度定义:不在隐层的梯度与权重的积再求和,然后与导数的乘积foriinrange(self.ni):#更新输入层与隐层之间的权重forjinrange(self.nh1):change=hidden_deltas[j]*self.ai[i]self.wi[i][j]=self.wi[i][j]+N*change+M*self.ci[i][j]self.ci[i][j]=change注:在训练集中我们考虑的是单个模式的误差,实际上我们需要训练集里所有模式的全局误差21110.5*()PnoPppjjppjpEtyE,在这种在线训练中,一个权值更新有可能减少某个单个模式的误差,然而却增加了训练全集上的误差。不过给出大量这种单次更新,却可以降低总误差。参数简介:①初始权值、阈值:初始的权值需要有一个范围,如果w选的太小,一个隐单元的网络激励将较小,只有线性模型部分被实现,如果w较大,隐单元可能在学习开始前就达到饱和。阈值一般也是随机数。②学习率参数:η—学习率,范围在0.001~10之间。学习率是BP训练中的一个重要参数,学习率过小,则收敛过慢;学习率过大,则可能修正过头,导致震荡甚至发散。③动量参数:动量法权值实际是对标准BP算法的改进,具体做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为本次的实际权值调整量,即:()()(1)wnwnwn其中:α为动量系数,通常0<α<0.9;这种方法所加的动量因子实际上相当于阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛性降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小。④隐层节点数:隐层节点数过少,则网络结构不能充分反映节点输入与输出之间的复杂函数关系;节点数过多又会出现过拟合现象。隐层节点数的选择至今尚无统一而完整的的理论指导,一般只能由经验选定,具体问题具体分析。注:隐层节点经验公式法:(经验公式完全是凭经验获得,缺少相应的理论依据,对特定的样本有效,缺乏普适性的公式。)假设三层神经网络的输入层、隐层、输出层的节点数分别为M,H,N,①最佳隐层节点数取值范围为aNMH,其中a为1-10之间的常数(最常用的)②当输入节点大于输出节点时,隐层最佳节点数为NMH*③最佳隐层节点数取值范围为1)2(*NMH④根据kolmogorov定理,最佳隐层节点数为12MH⑤最佳隐层节点数为满足下公式的整数0,i0iHNiiHCHPC,如果⑥最佳隐层节点数为满足下公式的整数PH2log其中⑤⑥适用于批量训练模式BP学习训练过程如下:1)初始化网络,对网络参数及各权系数进行赋值,权值系数取随机数2)输入训练样本,通过个节点间的连接情况正向逐层计算各层的值,并与真实值相比较,得到网络的输入误差3)依据误差反向传播规则,按照梯度下降法调整各层之间的权系数,使整个神经网络的连接权值向误差减小的方向转化4)重复(2)和(3),直到预测误差满足条件或是训练次数达到规定次数,结束。参数调整说明神经网络算法对于不同的网络需用不同的参数,参数的选择需要根据已知的测试数据进行训练测试,称这个调试参数的过程为试错法。神经网络试错:神经网络需要设置的参数比较多,初始权值、学习率、动量系数、隐层节点数需要依据具体问题具体设置,要分类数目越多,参数调整难度越大。调整过程中需不断观察误差和正确率的变化。无论调整哪个参数,遵循的原则为:如果调小该参数,正确率增大则继续调小该参数,到达某一临界值如果继续调小参数正确率减小,则在该临界值附近寻找最优的该参数的取值;反之亦然。具体的调整步骤为:1)初始权值的范围选择,范围不宜太大,一般为(-0.2,0.2)或(-0.3,0.3)2)动量系数的选择,一般0-0.9之间,宜先随机设定一个,先进行学习率和隐层节点数的调整,如果学习率和隐层节点数的调整都找不到较高正确率,最后返回来调整动量单元。3)学习率一般越小越好,一般先固定学习率为0.01,进行隐层节点数的调试,如果在隐层经验公式的取值范围内找不到使得正确率较高的隐层节点数,再返回来调整学习率,取0.02,0.05,0.1,0.3,0.5等值,具体问题具体试错分析。4)根据经验公式对隐层节点数进行调整,常用的为①隐层节点数取值范围为aNMH,其中三层神经网络的输入层、隐层、输出层的节点数分别为M,H,N,a为1-10之间的常数5)最后对训练次数进行设置,如果随着训练次数的增加,误差一直处于下降的状态,则增大训练次数;如果随着训练次数增加,误差不再继续下降,则无需增加训练次数。参数调整没有确切的固定顺序,以最终能达到所需正确率为标准。神经网络做分类预测:输入数据预处理:对于原始数据,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化(或归一化)处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。常用的归一化方法:离差标准化
本文标题:神经网络介绍
链接地址:https://www.777doc.com/doc-2148066 .html