神经网络介绍资料.doc
神经网络简介神经网络简介:人工神经网络是以工程技术手段来模拟人脑神经元网络的结构和特征的系统。利用人工神经网络可以构成各种不同拓扑结构的神经网络,他是生物神经网络的一种模拟和近似。神经网络的主要连接形式主要有前馈型和反馈型神经网络。常用的前馈型有感知器神经网络、BP神经网络,常用的反馈型有Hopfield网络。这里介绍BP(Back Propagation)神经网络,即误差反向传播算法。原理:BP(Back Propagation)网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer),其中隐层可以是一层也可以是多层。图:三层神经网络结构图(一个隐层)任何从输入到输出的连续映射函数都可以用一个三层的非线性网络实现BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成。正向传播时,传播方向为输入层隐层输出层,每层神经元的状态只影响下一层神经元。若在输出层得不到期望的输出,则转向误差信号的反向传播流程。通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程。单个神经元的计算:设分别代表来自神经元的输入;则分别表示神经元与下一层第个神经元的连接强度,即权值;为阈值;为传递函数;为第个神经元的输出。若记,于是节点j的净输入可表示为:;净输入通过激活函数后,便得到第个神经元的输出:激活函数:激活函数是单调上升可微函数,除输出层激活函数外,其他层激活函数必须是有界函数,必有一最大值。BP网络常用的激活函数有多种。Log-sigmoid型:,tan-sigmod型:,线性激活函数purelin函数:,输入与输出值可取任意值。BP网络通常有一个或多个隐层,该层中的神经元均采用sigmoid型传递函数,输出层的神经元可以采用线性传递函数,也可用S形函数。正向传播:设 BP网络的输入层有个节点,隐层有个节点,输出层有个节点,输入层与隐层之间的权值为(为的矩阵),隐层与输出层之间的权值为(为的矩阵),隐层的传递函数为,输出层的传递函数为,则隐层节点的输出为(将阈值写入求和项中):;输出层节点的输出为:由此,BP网络就完成了维空间向量对维空间的近似映射。def update(self, inputs):#更新ai,ah,a0中的元素,所以输入的元素个数必须跟输入层一样,将三层先填满数据 if len(inputs) != self.ni-1: raise ValueError('wrong number of inputs') for i in range(self.ni-1):#将数据导入初始层 self.aii = inputsi for j in range(self.nh1):#将输入层的数据传递到隐层 sum = 0.0 for i in range(self.ni): sum = sum + self.aii * self.wiij self.ahj = sigmoid(sum)#调用激活函数 for k in range(self.no): sum = 0.0 for j in range(self.nh2): sum = sum + self.ahj * self.wojk self.aok = purelin(sum) return self.ao:#返回输出层的值反向传播:误差反向传播的过程实际上就是权值学习的过程。网络权值根据不同的训练模式进行更新。常用的有在线模式和批处理模式。在线模式中的训练样本是逐个处理的,而批处理模式的所有训练样本是成批处理的。输入个学习样本,用来表示,第个样本输入到网络后计算得到输出,。采用平方型误差函数,于是得到第p个样本的误差: 式中:为期望输出。输出层权值的调整:用梯度下降法调整,使误差变小。梯度下降法原理即是沿着梯度下降方向目标函数变化最快,梯度为,其中误差信号,权值的改变量为负梯度方向,为学习率output_deltas = 0.0 * self.nofor k in range(self.no): error2 = targetsk-self.aok#输出值与真实值之间的误差 output_deltask = dpurelin(self.aok) * error2#输出层的局部梯度,导数乘以误差,不在隐层就这么定义for j in range(self.nh2):#更新隐层与输出层之间的权重 for k in range(self.no): change = output_deltask*self.ahj#权值的校正值w的改变量(若没有冲量,且学习率为1的时候) self.wojk = self.wojk + N*change + M*self.cojk self.cojk = change #print N*change, M*self.cojk隐层权值的调整:梯度为,其中误差信号,从而得到隐层各神经元的权值调整公式为: hidden_deltas = 0.0 * self.nh2#隐层的局部梯度for j in range(self.nh2): error1 = 0.0 for k in range(self.no): error1 = error1 + output_deltask*self.wojk hidden_deltasj = dsigmoid(self.ahj) * error1#隐层的梯度定义:不在隐层的梯度与权重的积再求和,然后与导数的乘积for i in range(self.ni):#更新输入层与隐层之间的权重 for j in range(self.nh1): change = hidden_deltasj*self.aii self.wiij = self.wiij + N*change + M*self.ciij self.ciij = change注:在训练集中我们考虑的是单个模式的误差,实际上我们需要训练集里所有模式的全局误差,在这种在线训练中,一个权值更新有可能减少某个单个模式的误差,然而却增加了训练全集上的误差。不过给出大量这种单次更新,却可以降低总误差。参数简介: 初始权值、阈值:初始的权值需要有一个范围,如果选的太小,一个隐单元的网络激励将较小,只有线性模型部分被实现,如果较大,隐单元可能在学习开始前就达到饱和。阈值一般也是随机数。 学习率参数:学习率,范围在0.00110之间。学习率是BP训练中的一个重要参数,学习率过小,则收敛过慢;学习率过大,则可能修正过头,导致震荡甚至发散。 动量参数:动量法权值实际是对标准BP算法的改进,具体做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为本次的实际权值调整量,即: 其中:为动量系数,通常00.9;这种方法所加的动量因子实际上相当于阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛性降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小。 隐层节点数:隐层节点数过少,则网络结构不能充分反映节点输入与输出之间的复杂函数关系;节点数过多又会出现过拟合现象。隐层节点数的选择至今尚无统一而完整的的理论指导,一般只能由经验选定,具体问题具体分析。注:隐层节点经验公式法:(经验公式完全是凭经验获得,缺少相应的理论依据,对特定的样本有效,缺乏普适性的公式。)假设三层神经网络的输入层、隐层、输出层的节点数分别为M,H,N,最佳隐层节点数取值范围为,其中a为1-10之间的常数(最常用的)当输入节点大于输出节点时,隐层最佳节点数为最佳隐层节点数取值范围为根据kolmogorov定理,最佳隐层节点数为最佳隐层节点数为满足下公式的整数最佳隐层节点数为满足下公式的整数其中适用于批量训练模式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) 根据经验公式对隐层节点数进行调整,常用的为隐层节点数取值范围为,其中三层神经网络的输入层、隐层、输出层的节点数分别为M,H,N,a为1-10之间的常数5) 最后对训练次数进行设置,如果随着训练次数的增加,误差一直处于下降的状态,则增大训练次数;如果随着训练次数增加,误差不再继续下降,则无需增加训练次数。参数调整没有确切的固定顺序,以最终能达到所需正确率为标准。神经网络做分类预测:输入数据预处理:对于原始数据,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化(或归一化)处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。常用的归一化方法:离差标准化:对原始数据进行线性变换,使结果值映射到0,1之间。转换函数如下:,其中max为样本数据的最大值,min为样本数据的最小值。Z-score标准化:这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:,其中为所有样本数据的均值,为所有样本数据的标准差。做分类时训练集输出数据预处理:用0,1的行向量做输出表示数据的分类情况,若原始数据被分成n类,某个样本属于第i类,则该样本对应的输出为,第i个位置为0,其余位置为1。做预测时训练集输出数据预处理:对输出层的数据进行归一化,训练测试完毕后进行反归一化。(eg:Fault.NNA分7类,computer_performance预测)参考文献:1高鹏毅. BP神经网络分类器优化技术研究D.华中科技大学,2012.2模式分类(原书第二版)/(美)迪达(Duda.R.O.)等著;李宏东等译.北京:机械工业出版社,2003.93机器学习/(美)米歇尔(Mitchell,T.M.)著;曾华军等译.北京:机械工业出版社,2003.1中间层激活函数有界,可以将神经元输出限定在一个范围内,故系统的状态不会发生发散现象,使得系统可以从初态朝着渐近稳定状态演变