为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

BP神经网络

2017-09-20 23页 doc 237KB 23阅读

用户头像

is_037433

暂无简介

举报
BP神经网络目  录 摘要    II Abstract    III 1.前言    1 2.神经元与网络结构    2 2.1 神经元模型    2 2.1.1 单输入神经元    2 2.1.2 传输函数    2 2.1.3 多输入神经元    3 2.2 神经网络的基本原理    3 2.2.1 神经网络的构成    3 2.2.2 神经网络的学习和训练    5 2.3 神经网络模式识别系统    6 2.3.1 神经网络模式识别系统概述    6 2.3.2 神经网络模式识别的典型方法    7 3. BP神经网络    9...
BP神经网络
目  录 摘要    II Abstract    III 1.前言    1 2.神经元与网络结构    2 2.1 神经元模型    2 2.1.1 单输入神经元    2 2.1.2 传输函数    2 2.1.3 多输入神经元    3 2.2 神经网络的基本原理    3 2.2.1 神经网络的构成    3 2.2.2 神经网络的学习和训练    5 2.3 神经网络模式识别系统    6 2.3.1 神经网络模式识别系统概述    6 2.3.2 神经网络模式识别的典型方法    7 3. BP神经网络    9 3.1 BP神经网络模型及其基本原理    9 3.2 BP多层前馈网络的主要能力    13 3.3 BP算法的改进    13 3.3.1附加动量法    13 3.3.2自适应学习速率    14 3.3.3动量-自适应学习速率调整算法    15 3.4 网络的设计    15 3.5 基于MATLAB的BP神经网络工具箱函数    16 3.5.1 BP网络创建函数    16 3.5.2 神经元上的传递函数    17 3.5.3 BP网络学习函数    17 3.5.4 BP网络训练函数    18 4.仿真结果分析    19 4.1 仿真结果    19 4.2 结果分析    22 5.小结    23 6.参考文献    24 附录(程序)    25 摘 要     人工神经网络具有强大的非线性映射能力,已经被应用于模式识别、智能控制、图像处理以及时间序列分析等各种领域,它特有的自组织、自学习和高容错性等功能使得其在解决复杂的非线性问题时有独特的功效,成为国内外广泛关注的热点。 本文首先详细介绍了应用神经网络进行模式识别的发展概况,通过与传统模式识别的比较,得出神经网络模式识别的优越性。针对已有的神经网络模式识别系统,本文介绍了该系统中使用最广泛的BP神经网络,通过对其关键技术及算法的研究,针对BP算法的不足,提出了BP算法的启发式改进。     本文结合遗传算法对BP算法进行优化,建立了改进的BP神经网络模型。最后,充分利用MATLAB语言的各自优势,进行编程,设计开发了基于BP算法的遗传BP神经网络模式识别系统,并投入实际应用。并利用该模型对两个实际的模式识别问题进行了模式分类训练和测试,结果明BP算法有效克服了网络训练时容易陷入局部极小值,导致网络训练失败的缺陷,提高了系统的泛化能力。 关键词:模式识别,人工神经网络,BP算法,MATLAB                     Abstract Artificial neural networks have powerful nonlinear mapping ability has been applied to the pattern recognition, intelligent control, image processing, and time series analysis in various fields, it is a unique self-organizing, self-learning and highly fault-tolerant features such as making itsolve complex nonlinear problems has a unique effect, become widely in the focus of attention.     Details of the application of neural networks overview of the development of pattern recognition, neural network pattern recognition superiority obtained by comparison with the traditional pattern recognition. Existing neural network pattern recognition system, the article describes the system most widely used BP neural network, its key technologies and algorithms for the deficiencies of BP algorithm proposed BP algorithm heuristic improvements.     In this paper, the genetic algorithm to optimize the BP algorithm, the improved BP neural network model. Finally, take full advantage of the respective strengths of the MATLAB language, programming, design and development based on genetic BP algorithm BP neural network pattern recognition system, and put into practical application. And using the model of two actual pattern recognition problems the pattern classification training and testing, results show that the BP algorithm effectively overcome the network training is easy to fall into local minimum value, resulting in the failure of the defects of the network training to improve the system generalization ability. Keywords: pattern recognition, artificial neural network, BP algorithm, MATLAB 1.前言 人工神经网络(Artificial Neural Networks,NN)是由大量的、简单的处理单元(称为神经元)广泛地互相连接而形成的复杂网络系统,它反映了人脑功能的许多基本特征,是一个高度复杂的非线性动力学系统。神经网络具有大规模并行、分布式存储和处理、自组织、自适应和自学习能力,特别适合处理需要同时考虑许多因素和条件的、不精确和模糊的信息处理问题。神经网络的发展与神经科学、数理科学、认知科学、计算机科学、人工智能、信息科学、控制论、机器人学、微电子学、心理学、微电子学、心理学、光计算、分子生物学等有关,是一门新兴的边缘交叉学科。 神经网络具有非线性自适应的信息处理能力,克服了传统人工智能方法对于直觉的缺陷,因而在神经专家系统、模式识别、智能控制、组合优化、预测等领域得到成功应用。神经网络与其他传统方法相组合,将推动人工智能和信息处理技术不断发展。近年来,神经网络在模拟人类认知的道路上更加深入发展,并与模糊系统、遗传算法、进化机制等组合,形成计算智能,成为人工智能的一个重要方向。 近年来,神经网络理论的应用取得了令人瞩目的发展,特别是在人工智能、自动控制、计算机科学、信息处理、机器人、模式识别、CAD/CAM等方面都有重大的应用实例。下面列出一些主要应用领域: (1)模式识别和图像处理。印刷体和手写字符识别、语音识别、签字识别、指纹识别、人体病理分析、目标检测与识别、图像压缩和图像复制等。 (2)控制和优化。化工过程控制、机器人运动控制、家电控制、半导体生产中掺杂控制、石油精炼优化控制和超大规模集成电路布线设计等。 (3)预报和智能信息管理。股票市场预测、地震预报、有价证券管理、借贷风险分析、IC卡管理和交通管理。 (4)通信。自适应均衡、回波抵消、路由选择和ATM网络中的呼叫接纳识别和控制。 (5)空间科学。空间交汇对接控制、导航信息智能管理、飞行器制导和飞行程序优化管理等。 2.神经元与网络结构     人工神经网络(Artificial Neural Network,ANN)是模仿生物神经网络功能的一种经验模型。生物神经元受到传入的刺激,其反应又从输出端传到相联的其它神经元,输入和输出之间的变换关系一般是非线性的。神经网络是由若干简单(通常是自适应的)元件及其层次组织,以大规模并行连接方式构造而成的网络,按照生物神经网络类似的方式处理输入的信息。模仿生物神经网络而建立的人工神经网络,对输入信号有功能强大的反应和处理能力。     神经网络是由大量的处理单元(神经元)互相连接而成的网络。为了模拟大脑的基本特性,在神经科学研究的基础上,提出了神经网络的模型。但是,实际上神经网络并没有完全反映大脑的功能,只是对生物神经网络进行了某种抽象、简化和模拟[8]。神经网络的信息处理通过神经元的互相作用来实现,知识与信息的存储表现为网络元件互相分布式的物理联系。神经网络的学习和识别取决于各种神经元连接权系数的动态演化过程。     若干神经元连接成网络,其中的一个神经元可以接受多个输入信号,按照一定的规则转换为输出信号。由于神经网络中神经元间复杂的连接关系和各神经元传递信号的非线性方式,输入和输出信号间可以构建出各种各样的关系,因此可以用来作为黑箱模型,表达那些用机理模型还无法精确描述、但输入和输出之间确实有客观的、确定性的或模糊性的规律。因此,人工神经网络作为经验模型的一种,在化工生产、研究和开发中得到了越来越多的用途。 2.1 神经元模型 2.1.1 单输入神经元     单输入神经元如图2-1所示。标量输入p乘上标量权值w得到wp,再将其送入累加器。另一个输入1乘上偏置值b,再将其送入累加器。累加器输出n通常被称为净输入,它被送入一个传输函数f’在f中产生神经元的标量输出a。从而单输入神经元的数学表达为:a=f(wp+b),其中,w是权值,b是偏置值,p是输入,f是传输函数,n(由wp+b决定)是净输入,这些值都是标量。 f ∑             p      w            n            a                         b                           图2.1 单输入神经元 2.1.2 传输函数     图2.1中的传输函数可以是n的线性或非线性函数。可以用特定的传输函数满足神经元要解决的问题。在解决实际问题时,根据不同的实际需要,传输函数可以使用不同的线性或非线性函数。经常使用的传输函数有以下三种: 硬极限传输函数:当函数的自变量小于0时,函数的输出为0;当函数的自变量大于或等于0时,函数的输出为1。如图2.2(a)示。   线性传输函数:线性传输函数的输出等于输入。如图2.2(b)所示。     对数S形传输函数:该函数的输入在(-∞。+∞)之间取值,输出则在0到1之间取值,其数学表达式为:a=l/(1+e-n),如图2.2(c)所示。             +1                  +1                  +1                     n                    n                    n                            (a)                      (b)                    (c) 图2.2 常用传输函数                      2.1.3 多输入神经元 通常,一个神经元有不止一个输入。具有R个输入的神经元,其结构如图2.3所示。    P1 f ∑         P2                              n                  a                                         PR                    b                       图2.3 多输入神经元模型 其输入P1,P2,.,PR分别对应权值矩阵W的元素W1,1,Wl,2,…,W1,R,该神经元有一个偏置值b,它与所有输入的加权和累加,从而形成净输入n: n=W1,1P1+Wl,2P2+…+W1,RPR+b            (式2-1) 这个表达式可以写成矩阵形式:n=Wp+b,从而多输入神经元的数学表达为:a=f(Wp+b),其中,w是权值,b是偏置值,p是输入,f是传输函数,n(由Wp+b决定)是净输入,其中w是只有一行元素,p是只有一列元素矩阵,b,n,a是标量。 2.2 神经网络的基本原理 2.2.1 神经网络的构成 一般来说,有多个输入的神经元并不能满足实际应用的需要。因此,总是将多个神经元按照一定的方式连接起来,形成一个能满足实际需要的神经网络。通常所说的神经网络结构,主要指它的连接方式。从拓扑结构上考虑,神经网络术语以神经元为节点,以节点间的有向连接为边的一种图。其结构大体上可分成层状和网状两大类:层状结构的神经网络是由若干层组成,每层中有一定数量的神经元,相邻层中的神经元为单向连接,同层内的神经元不连接;在网状结构的神经网络中,任何两个神经元之间都可能双向连接。 神经网络连接的几种基本形式如下。 1)前向网络 前向网络结构如图2.4所示,网络中的神经元是分层排列的,每个神经元只与前一层的神经元相连接。神经元分层排列,分别组成输入层、中间层(也称为隐含层,可以由若干层组成)和输出层。每一层的神经元只接受来自前一层神经元的输入,后面的层对前面的层没有信号反馈。输入模式经过各层次的顺序传播,最后在输出层上得到输出。感知器网络和BP网络均属于前向网络。 图2.4 前向网络结构 2)从输出到输入有反馈的前向网络 其结构如图2.5所示,输出层对输入层有信息反馈,这种网络可用于存储某种模式序列,如神经认知机和回归BP网络都属于这种类型。 图2.5有反馈的前向网络结构 3)层内互连前向网络 其结构如图2.6所示,通过层内神经元的相互结合,可以实现同一层神经元之间的横向抑制或兴奋机制。这样可以限制每层内可以同时动作的神经元素,或者把每层内的神经元分为若干组,让每一组作为一个整体进行运作。例如,可利用横向抑制机理把某层内的具有最大输出的神经元挑选出来,从而抑制其他神经元,使之处于无输出状态。 图2.6 有相互结合的前向网络结构 4)相互结合型网络 相互结合型网络结构如图2.7所示,这种网络在任意两个神经元之间都可能有连接。Hopfield 网络和Boltzmann 机均属于这种类型。在无反馈的前向网络中,信号一旦通过某神经元,该神经元的处理就结束了。而在相互结合网络中,信号要在神经元之间反复传递,网络处于一种不断变化状态的动态之中。信号从某初始状态开始,经过若干次变化,才会达到某种平衡状态。根据网络的结构和神经元的特性,网络的运行还有可能进入周期振荡或其他如混沌平衡状态。 图2.7结合型网络结构 综上,可知神经网络有分层网络、层内连接的分层网络、反馈连接的分层网络、互连网络等四种结构,其神经网络模型有感知器网络,线性神经网络,BP神经网络,径向基函数网络,反馈神经网络等,本文主要学习研究了BP神经网络。 2.2.2 神经网络的学习和训练 人脑中由一个脑中有一个典型的神经元通过许多树突的精细结构,收集来自其它神经元的信息,当它收到的兴奋输入足够大于它的抑制输入时,神经元将通过轴突发出电脉冲,经突触结构影响其它的神经元,这便发生了学习行为。因此,可以认为神经网络学习的本质特征在于神经细胞特殊的突触结构所具有的可塑性连接,而如何调整连接权值就构成了不同的学习规则。 学习规则就是修改神经网络的权值和偏置值的方法和过程(也称这种过程是训练算法),其目的是为了训练网络来完成某些工作。现在有很多类型的神经网络学习规则,如Hebb学习规则、Delta学习规则、Widrow--Hoff学习规则等。大致可以将其分为有监督学习和无监督学习两大类。 1.有监督学习。为了使神经网络在实际应用中能解决各种问题,必须对它进行训练,就是从应用环境中选出一些样本数据,包含输入和相应的期望输出,将数据加载到网络中,根据样本数据,不断地调整权矩阵,直到得到合适的输入输出关系为止,这个过程就是对神经网络的训练过程,这种训练过程需要外界监督,提供训练数据(样本数据)。     权值的调整是基于奖惩式的规则:当网络的输出朝正确的方向变化时,调整权值以强化(奖励)此方向的变化;而当网络的输出朝着错误方向变化时,权值将朝着弱化(惩罚)的方向变化。     这种学习方法虽然简单,并能够根据训练数据准确地调整出所需的权矩阵,但它也同时要求训练数据能够代表实际的应用环境。并且为了适应环境的变化需要重新调整权值,这样当学到新知识时,就容易遗忘旧的知识。     2.无监督学习。无监督学习的训练数据集中,只有输入而没有目标输出,训练过程中神经网络将自动地提取各输入数据的特征,并将其分成若干类。经过训练好的网络能够识别训练数据集以外的新的输入类别,并相应获得不同的输出。 2.3 神经网络模式识别系统 2.3.1 神经网络模式识别系统概述     神经网络是由大量神经元广泛互连而成的网络。网络的信息处理由神经元之间的相互作用来实现;知识与信息的存储表现为神经元连接的权值和阀值以及网络结构。它用于模式识别的网络模型主要包括:有导师学习网络,无导师学习网络,自监督学习网络和混合学习网络。这些网络模型都已成功地应用在模式识别各个领域。     神经网络识别系统中的神经元数是待识别样本的特征向量的维数,输出层的神经元数是待识别样本的种类数。神经网络识别系统的输入层接受待识别样本的特征向量,经过各隐含层神经元的运算,输出层的输出就是识别结果,输出层的每个神经元代表一类,哪个输出神经元获胜,该样本就是该输出神经元所代表的那一类(所谓获胜就是该单元的输出远大于其他单元的输出)。     神经网络的工作过程主要由两个阶段组成:学习期,对神经网络的连接权值和阀值进行修改;工作期,此时对于给定的输入进行计算,得到识别结果。若希望神经网络识别系统识别准确,除了好的网络结构外,还要有好的学习算法,即如何对连接权值修改。学习过程是非常重要的过程,神经网络此时通过学习样本或其它方法对神经网络的连接权值进行修改,使神经网络输出正确。神经网络识别并非根据某几个特征,而是整个特征记忆的,所以只要大多数的特征是正确的,经各层神经元的计算,对应的输出神经元还是能获胜的。所以,它有良好的容错能力。 一般神经网络识别系统由预处理、特征提取和神经网络分类器组成。预处理就是将原始数据中的无用信息删除、平滑和进行幅度归一化等。神经网络识别系统中的特征提取部分不一定存在,这样就分成两大类:一类是有特征提取的,这一类系统实际上是传统方法与神经网络方法技术的结合,这种方法可以充分利用人的经验来获取模式特征以及神经网络分类能力来识别对象。特征提取必须做到提取后的特征能标示对象本身。二是无特征提取部分的,省去特征提取,对象模式直接作为神经网络的输入,这种方式下,系统的神经网络结构的复杂度相应增加,神经网络结构要完全自己消除模式变形的影响。     构造神经网络分类器首先要选择适当的网络结构:神经网络分类器的输入就是模式的特征向量;神经网络分类器的输出节点应该是类别数。以字符识别为例,10个数字输出层就有10个神经元,每个神经元代表一个数字。隐含层数要选好,每层神经元数要合适,目前很多采用一层隐含层的网络结构。然后要选择合适的学习算法,这样才有良好的识别效果。在学习阶段应该采用大量的样本进行训练学习,通过样本的大量学习对神经网络各层的连接权值进行修正,使其对样本有正确的识别结果,这就像人记数字一样,网络中神经元就像是人脑细胞,权值的改变就像是人脑细胞的相互作用的改变,神经网络在样本学习中就像人记数字一样,学习样本时的网络权值调整就相当于记住各个数字的形象,网络权值就是网络记住的内容,网络学习阶段就象人由不认识数字到认识数字反复学习过程一样的。神经网络是按整个特征向量的整体来记忆对象的,只要大多数特征符合曾经学习过的样本就可识别为同一模式,所以当样本存在较大噪声时神经网络分类器仍可正确识别。在识别阶段,只要将输入进行预处理、特征提取然后得到特征向量作为神经网络分类器的输入,经过网络的计算,分类器的输出就是识别结果。 2.3.2 神经网络模式识别的典型方法     在各种人工神经网络模型中,在模式识别中应用最多的也是最成功的当数多层前馈网络和自组织网络。具中多层前馈网络多采用监督学习方式进行训练,一般有以下两种应用方式。 1.多输出型。网络的每一个输入节点对应样本一个特征,输出层节点等于类别数,一个输出节点对应一个类。在训练阶段,如果输入训练样本的类别标号是i,则训练时的期望输出设为第i个节点为1,而其余输出节点均为0。在识别阶段,当一个未知类别的样本作用到输入端时,考察各输出节点的输出,并将这个样本的类别判别为与输出值最大的那个节点对应的类别。在某些情况下,如果输出最大的节点与其它节点输出的差距较小,小于某个域值,则可以作出拒绝决策,这是用多层感知机进行模式识别的最基本方式。     实际上,多输出型神经网络还可以有很多其它的形式,更一般地,网络可以有m个输出节点,用它们的某种编码来代表一个类别,上面这种方式只是其中的一个特例,有人把它称为“1-0”编码或“c中取1”模式。     2.单输出型。这种网络的每一个输入节点对应样本一个特征,而输出层节点只有一个。为每一个类建立一个这样的网络(网络的隐含层节点数可以不同),对每一类进行分布训练,将属于这一类的样本的期望输出设为1,而把属于其它类的样本的期望输出设为0。在识别阶段,将未知类别的样本输入到每一个网络,如果某个网络的输出接近1(或大于某个域值,比如0.5),则判断该样本属于这一类;而如果有多个网络的输出均大于域值,则或者将类别判断为具有最大的那一类,或者作出拒绝:当所有网络的输出均小于域值时也可采取类似的决策方法。     显然,在两类情况下,我们只需要一个单输出网络即可,将一类对应于输出1,另一类对应于输出0,识别时只要输出大于0.5则决策为第一类,否则决策为第二类;或者也可以在两类之间设定一个域值,当输出在这个域值之间时作出拒绝决策。     自组织神经网络可以较好地完成聚类的任务,其中每一个神经元节点对应一个聚类中心,与普通聚类算法不同的是,所得的聚类之间仍保持一定的关系,就是在自组织网络节点平面上相邻或相隔较近的节点对应的类别,它们之间的相似性要比相隔较远的类别之间大。因此可以根据各个类别在节点平面上的相对位置进行类别的合并和类别之间关系的分析。     自组织特征映射最早的提出者Kohonen的科研组就成功地利用这一原理进行了芬兰语话音识别。他们的做法是,将取自芬兰语各种基本语音的各个样本按一定顺序轮流输入到一个自组织网络中进行学习,经过足够次数的学习后这些样本逐渐在网络节点中形成确定的映射关系,即每个样本都映射到各自固定的一个节点(在这个样本作输入时,该节点为最佳匹配节点或具有最大输出),而映射到同一节点的样本就可以看作是一个聚类。学习完成后,发现不但同一聚类中的样本来自同一音素,而且相邻节点对应的聚类中的样本往往来自相同或相近发音的音素。在识别时,对于新的输人样本,将其识别为它映射到的节点所标的发音即可。     这种做法实际上是在非监督学习的基础上进行监督模式识别。其最大的优点就是,最终的各个相邻聚类之间是有相似关系的,即使识别时把样本映射到了一个错误的节点,它也倾向于被识别成同一个音素或者一个发音相近的音素,这就十分接近人的识别特性。 3.BP神经网络     在神经网络模式识别系统中,用得最广泛的要算是BP网络,它是基于误差前向传播(Error Back Propagation,简称BP)算法的一种具有非线性连续转移函数的多层前馈网络。由于多层前馈网络的训练经常采用误差反向传播算法,人们常把多层前馈网络直接称为BP网络。     BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐含层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐含层向输入层逐层反传、并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。 3.1 BP神经网络模型及其基本原理 BP神经网络是误差反向传播神经网络的简称,它由一个输入层,一个或多个隐含层和一个输出层构成,每一次由一定数量的的神经元构成。这些神经元如同人的神经细胞一样是互相关联的。     基本BP算法包括两个方面:信号的前向传播和误差的反向传播。即计算实际输出时按从输入到输出的方向进行,而权值和阈值的修正从输出到输入的方向进行。其结构如图3.1所示。                           图3.1 BP网络结构 图中:Xj表示输入层第j个节点的输入,j=1,…,M; wki表示隐含层第i个节点到输入层第j个节点之间的权值; θi表示隐含层第i个节点的阈值; Φ(x)表示隐含层的激励函数; Wki表示输出层第个节点到隐含层第i个节点之间的权值,i=1,…,q; ak表示输出层第k个节点的阈值,k=1,…,L; ψk表示输出层的激励函数; Ok表示输出层第个节点的输出。 (1)信号的前向传播过程 隐含层第i个节点的输入neti:                     (式3-1) 隐含层第i个节点的输出yi:                 (式3-2) 输出层第k个节点的输入netk:           (式3-3) 输出层第k个节点的输出ok:     (式3-4) (2)误差的反向传播过程 误差的反向传播,即首先由输出层开始逐层计算各层神经元的输出误差,然后根据误差梯度下降法来调节各层的权值和阈值,使修改后的网络的最终输出能接近期望值。 对于每一个样本p的二次型误差准则函数为Ep:                       (式3-5) 系统对P个训练样本的总误差准则函数为:                     (式3-6) 根据误差梯度下降法依次修正输出层权值的修正量Δwki,输出层阈值的修正量Δak,隐含层权值的修正量Δwij,隐含层阈值的修正量Δθi。 ;;;      (式3-7) 输出层权值调整公式:       (式3-8) 输出层阈值调整公式:       (式3-9) 隐含层权值调整公式:     (式3-10) 隐含层阈值调整公式:       (式3-11) 又因为:               (式3-12) ,,,      (式3-13)         (式3-14)                     (式3-15)                   (式3-16) 所以最后得到以下公式:           (式3-17)                                          (式3-18)                                            (式3-19)           (式3-20) 开 始 图3.2 BP算法程序流程图 3.2 BP多层前馈网络的主要能力     多层前馈网络是迄今为止应用最广泛的神经网络之一,这主要归功于基于BP算法的多层前馈网络具有以下一些重要能力:     (1)非线性映射能力。BP多层前馈网络能够学>-3和存储大量输入输出模式映射关系,而无需事先了解描述这种映射关系的数学方程。只要能提供足够多的样本模式对BP网络进行学习训练,它便可以实现从玎维输入空间到刀2维输出空间的非线性映射。在工程上及许多技术领域中经常遇到这样的问题:对某输入输出系统已经积累了大量相关的输入输出数据,但对其内部蕴涵的规律却仍尚未掌握,因此无法用数学方法来描述这一规律。这一类问题的共同特征是:①难以得到解析解;②缺乏专家经验;③能够表示与转化为模式识别或非线性映射问题。对于解决这类问题,多层前馈网络具有无法比拟的优势。     (2)泛化能力。BP多层前馈网络训练后将所提取的样本对中的非线性映射关系存储在权值矩阵中,在其后的工作阶段,当向网络输入训练时未曾见过的非样本数据时,网络也能完成由输入空间向输出空间的正确映射。这种能力称为多层自订馈网络的泛化能力,它是衡量多层前馈网性能优劣的一个重要指标。     (3)容错能力。BP多层前馈网络的能力还在于,允许输入样本中带有较大的误差甚至是个别错误。因为对权矩阵的调整过程也就是从大量的样本对中提取统计特性的过程,反映正确规律的知识来自全体样本,个别样本中的误差甚至错误不能左右对权矩阵的调整。     BP算法因其简单、易行、计算量小、并行性强等优点,目前是神经网络训练采用最多也是最成熟的训练算法之一。其算法的实质是求解误差函数的最小值问题,由于它采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权值,因而通常存在以下问题:学习效率低,收敛速度慢;易陷入局部极小状态。 3.3 BP算法的改进 3.3.1附加动量法     附加动量法使网络在修正其权值时,不仅考虑误差在梯度上的作用,而且考虑在误差曲面上变化趋势的影响。在没有附加动量的作用下,网络可能陷入浅的局部极小值,利用附加动量的作用有可能滑过这些极小值。     该方法是在反向传播法的基础上在每一个权值(或阈值)的变化上加上一项正比于前次权值(或阈值)变化量的值,并根据反向传播法来产生新的权值(或阈值)变化。     带有附加动量因子的权值和阈值调节公式为:       (式3-21)       (式3-22)     其中k为训练次数,mc为动量因子,一般取0.95左右。     附加动量法的实质是将最后一次权值(或阈值)变化的影响,通过一个动量因子来传递。当动量因子取值为零时,权值(或阈值)的变化仅是根据梯度下降法产生;当动量因子取值为1时,新的权值(或阈值)变化则是设置为最后一次权值(或阈值)的变化,而依梯度法产生的变化部分则被忽略掉了。以此方式,当增加了动量项后,促使权值的调节向着误差曲面底部的平均方向变化,当网络权值进入误差曲面底部的平坦区时, i将变得很小,于是,从而防止了的出现,有助于使网络从误差曲面的局部极小值中跳出。     根据附加动量法的设计原则,当修正的权值在误差中导致太大的增长结果时,新的权值应被取消而不被采用,并使动量作用停止下来,以使网络不进入较大误差曲面;当新的误差变化率对其旧值超过一个事先设定的最大误差变化率时,也得取消所计算的权值变化。其最大误差变化率可以是任何大于或等于1的值。典型的取值取1.04。所以,在进行附加动量法的训练程序设计时,必须加进条件判断以正确使用其权值修正公式。 训练程序设计中采用动量法的判断条件为:           (式3-23)     E(k)为第k步误差平方和。 3.3.2自适应学习速率     对于一个特定的问题,要选择适当的学习速率不是一件容易的事情。通常是凭经验或实验获取,但即使这样,对训练开始初期功效较好的学习速率,不见得对后来的训练合适。为了解决这个问题,人们自然想到在训练过程中,自动调节学习速率。通常调节学习速率的准则是:检查权值是否真正降低了误差函数,如果确实如此,则说明所选学习速率小了,可以适当增加一个量;若不是这样,而产生了过调,那幺就应该减少学习速率的值。下式给出了一个自适应学习速率的调整公式:         (式3-24)     E(k)为第k步误差平方和。初始学习速率(0)的选取范围可以有很大的随意性。 3.3.3动量-自适应学习速率调整算法     当采用前述的动量法时,BP算法可以找到全局最优解,而当采用自适应学习速率时,BP算法可以缩短训练时间, 采用这两种方法也可以用来训练神经网络,该方法称为动量-自适应学习速率调整算法。 3.4 网络的设计     1.网络的层数     理论上已:具有偏差和至少一个S型隐含层加上一个线性输出层的网络,能够逼近任何有理数。增加层数可以更进一步的降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间。而误差精度的提高实际上也可以通过增加神经元数目来获得,其训练效果也比增加层数更容易观察和调整。所以一般情况下,应优先考虑增加隐含层中的神经元数。     2.隐含层的神经元数     网络训练精度的提高,可以通过采用一个隐含层,而增加神经元数了的方法来获得。这在结构实现上,要比增加隐含层数要简单得多。那么究竟选取多少隐含层节点才合适?这在理论上并没有一个明确的规定。在具体设计时,比较实际的做法是通过对不同神经元数进行训练对比,然后适当地加上一点余量。     3.初始权值的选取     由于系统是非线性的,初始值对于学习是否达到局部最小、是否能够收敛及训练时间的长短关系很大。如果初始值太大,使得加权后的输入和n落在了S型激活函数的饱和区,从而导致其导数f’(n)非常小,而在计算权值修正公式中,因为,当f’(n)时,则有。这使得,从而使得调节过程几乎停顿下来。所以一般总是希望经过初始加权后的每个神经元的输出值都接近于零,这样可以保证每个神经元的权值都能够在它们的S型激活函数变化最大之处进行调节。所以,一般取初始权值在(-1,1)之间的随机数。     4.学习速率 学习速率决定每一次循环训练中所产生的权值变化量。大的学习速率可能导致系统的不稳定;但小的学习速率导致较长的训练时间,可能收敛很慢,不过能保证网络的误差值不跳出误差表面的低谷而最终趋于最小误差值。所以在一般情况下,倾向于选取较小的学习速率以保证系统的稳定性。学习速率的选取范围在0.01-0.8之间。 3.5 基于MATLAB的BP神经网络工具箱函数     最新版本的神经网络工具箱几乎涵盖了所有的神经网络的基本常用模型,如感知器和BP网络等。对于各种不同的网络模型,神经网络工具箱集成了多种学习算法,为用户提供了极大的方便。BP网络的常用函数如表3.1所示。 表3.1 BP网络的常用函数表 函数类型 函数名称 函数用途 前向网络创建函数 newcf 创建级联前向网络 Newff 创建前向BP网络 传递函数 logsig S型的对数函数 tansig S型的正切函数 purelin 纯线性函数       学习函数 learngd 基于梯度下降法的学习函数 learngdm 梯度下降动量学习函数 性能函数      mse 均方误差函数 msereg 均方误差化函数       显示函数 plotperf 绘制网络的性能 plotes 绘制一个单独神经元的误差曲面 plotep 绘制权值和阈值在误差曲面上的位置 errsurf 计算单个神经元的误差曲面 3.5.1 BP网络创建函数     1) newff 该函数用于创建一个BP网络。调用格式为: net=newff net=newff(PR,[S1 S2..SN1],{TF1 TF2..TFN1},BTF,BLF,PF) 其中, net=newff;用于在对话框中创建一个BP网络。 net为创建的新BP神经网络; PR为网络输入向量取值范围的矩阵; [S1 S2…SNl]表示网络隐含层和输出层神经元的个数; {TFl TF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’; BTF表示网络的训练函数,默认为‘trainlm’; BLF表示网络的权值学习函数,默认为‘learngdm’; PF表示性能数,默认为‘mse’。     2)newcf函数用于创建级联前向BP网络,newfftd函数用于创建一个存在输入延迟的前向网络。 3.5.2 神经元上的传递函数     传递函数是BP网络的重要组成部分。传递函数又称为激活函数,必须是连续可微的。BP网络经常采用S型的对数或正切函数和线性函数。     1) logsig 该传递函数为S型的对数函数。调用格式为: A=logsig(N) info=logsig(code) 其中,    N:Q个S维的输入列向量; A:函数返回值,位于区间(0,1)中;     2)tansig 该函数为双曲正切S型传递函数。调用格式为: A=tansig(N) info=tansig(code) 其中, N:Q个S维的输入列向量; A:函数返回值,位于区间(-1,1)之间。     3)purelin 该函数为线性传递函数。调用格式为: A=purelin(N) info=purelin(code) 其中, N:Q个S维的输入列向量; A:函数返回值,A=N。 3.5.3 BP网络学习函数     1)learngd 该函数为梯度下降权值/阈值学习函数,它通过神经元的输入和误差,以及权值和阈值的学习效率,来计算权值或阈值的变化率。调用格式为: [dW,ls]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) [db,ls]=learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS) info=learngd(code)     2) learngdm函数为梯度下降动量学习函数,它利用神经元的输入和误差、权值或阈值的学习速率和动量常数,来计算权值或阈值的变化率。 3.5.4 BP网络训练函数     1)train 神经网络训练函数,调用其他训练函数,对网络进行训练。该函数的调用格式为: [net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai) [net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai,VV,TV)     2) traingd函数为梯度下降BP算法函数。traingdm函数为梯度下降动量BP算法函数。 4.仿真结果分析 4.1 仿真结果     当err=0.1时,实现的结果如下: 图4.1 err=0.1时识别率 图4.2 err=0.1时的有误码图形和识别图像比对 当err=0.3时,实现的结果如下: 图4.3 err=0.3时识别率 图4.4 err=0.3时的有误码图形和识别图像比对 当err=0.5时,实现的结果如下: 图4.5 err=0.5时识别率 图4.6 err=0.5时的有误码图形和识别图像比对 4.2 结果分析     在比对在不同的err程度下,BP神经网络在模式识别的能力上是有不同的。值得注意的是在每次结果中曲线图中红线是表示没有经过误码训练的识别率曲线,而蓝色的曲线则是经过误码训练之后的识别率曲线。可以从中看出,BP神经网络的识别功能和训练的复杂程度和强度是很有关系的。在识别率上也体现无遗。误码信号功率的大小体现的是信号引进的误码err的大小,和我之前设想的是一样的:误码的干扰越大,所获得的识别的能力是越弱的。 5.小结 在本次设计的过程中,由于开始对于题目要求几乎不了解,所以遇到了很大的困难,而且网上和图书馆里相干的资料都非常的少,这给开始的设计带来了很大的麻烦。经过各方面的搜索,最终综合各方面的知识,得出了设计的。但在此过程中,我也学到了很多知识,如论文资料的查找方面,可以在图书馆、知网、中国期刊网等网站,相信这些经历对以后的学习也有非常大的帮助。     通过此次课程设计,我对整个神经网络系统有了进一步的认识,收获颇多。同时,我也将理论与实践相结合,这种结合我感到是件非常美妙的事。 在具体设计的过程中,我不断地给自己提出新的问题,然后去论证、推翻,再接着提出新的问题。在这个循环往复的过程中,我这篇稚嫩的设计日臻完善。每一次改进我都收获良多,每一次修改后的成功我都能兴奋好长一段时间。虽然我的设计作品不是很成熟,即使借鉴前人的很多资料仍然还有很多不足之处,但我仍然心里有一种莫大的幸福感,因为我实实在在地走过了一个完整的设计所应该走的每一个过程,并且享受了每一个过程,更重要的是这个设计中我加入了自己鲜活的思想。 在本次设计中,不仅融合了各方面的知识,更是锻炼了我们不同类型的专业仿真软件的操作技能。这本次设计中收获良多。 另外,在设计过程中,我受到了老师和同学的帮助,在此,对老师和同学表示深深的感谢! 6.参考文献 [1]赵海滨 《MATLAB应用大全》  2012年 [2] 郑君里,杨行峻.《人工神经网络》高等教育出版社  1992年 [3] Neural Network Toolbox. Mathworks,2007 [4] 魏海坤.《神经网络结构设计的理论与方法》.国防工业出版社,2005.9 [5] 董长虹 编著 .《Matlab神经网络与应用》. 北京:国防工业出版社,2007.9 [6] 胡守仁,等.《神经网络导论》.长沙:国防科技大学出版社,1993 [7] 张玲,张钹.《人工神经网络理及应用》. 浙江:浙江科技大学出版社,1997.5 [8] Neural Network Tolbox User’s, The MathWorks. Inc,2003 [9] Matlab user’s Guide. The MathWorks.Inc,2003 附录(程序) 完整代码: % 原始数据矩阵 number1 10 X 35 为系统输入的转置 number1=[0 0 1 0 0    0 0 1 0 0  0 0 1 0 0  0 0 1 0 0  0 0 1 0 0  0 0 1 0 0  0 0 1 0 0;  % 1         1 1 1 1 1    0 0 0 0 1  0 0 0 0 1  1 1 1 1 1  1 0 0 0 0  1 0 0 0 0  1 1 1 1 1;  % 2         1 1 1 1 1    0 0 0 0 1  0 0 0 0 1  1 1 1 1 1  0 0 0 0 1  0 0 0 0 1  1 1 1 1 1;  % 3         1 0 0 0 1    1 0 0 0 1  1 0 0 0 1  1 1 1 1 1  0 0 0 0 1  0 0 0 0 1  0 0 0 0 1;  % 4         1 1 1 1 1    1 0 0 0 0  1 0 0 0 0  1 1 1 1 1  0 0 0 0 1  0 0 0 0 1  1 1 1 1 1;  % 5         1 1 1 1 1    1 0 0 0 0  1 0 0 0 0  1 1 1 1 1  1 0 0 0 1  1 0 0 0 1  1 1 1 1 1;  % 6         1 1 1 1 1    0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 0 1;  % 7         1 1 1 1 1    1 0 0 0 1  1 0 0 0 1  1 1 1 1 1  1 0 0 0 1  1 0 0 0 1  1 1 1 1 1;  % 8         1 1 1 1 1    1 0 0 0 1  1 0 0 0 1  1 1 1 1 1  0 0 0 0 1  0 0 0 0 1  0 0 0 0 1;  % 9         1 1 1 1 1    1 0 0 0 1  1 0 0 0 1  1 0 0 0 1  1 0 0 0 1  1 0 0 0 1  1 1 1 1 1]; % 0 number=number1';% number 为系统输入矢量 targets=eye(10);% targets 为目标矢量 %两层网络 下面使用函数newff创建一个两层网络。 S1=10; [R,Q]=size(number); [S2,Q]=size(targets); P=number; net=newff(minmax(P),[S1 S2],{'logsig' 'logsig'},'traingdx'); net.LW{2,1}=net.LW{2,1}*0.01; net.b{2}=net.b{2}*0.01; %下面进行无噪声训练 %训练结束条件:最大次数5000,误差平方和为0.001; P=number; T=targets; net.performFcn='sse'; net.trainParam.goal=0.001; net.trainParam.show=10; net.trainParam.epochs=5000; net.trainParam.mc=0.95; [net,tr]=train(net,P,T); %下面进行含噪声信号的训练 netn=net; netn.trainParam.goal=0.006; netn.trainParam.epochs=6000; T=[targets targets targets targets]; for pass=1:10     P=[number,number,...     (number+randn(R,Q)*0.1),...     (number+randn(R,Q)*0.2)]; [netn,tr]=train(netn,P,T); end %下面网络再次对无误差输入信号进行训练 P=number; T=targets; netn.performFcn='sse'; netn.trainParam.goal=0.001; netn.trainParam.show=10; netn.trainParam.epochs=5000; netn.trainParam.mc=0.95; [netn,tr]=train(netn,P,T); %pause; %下面代码用来测试网络容错性 noise_range=0:0.05:0.5; max_test=100; T=targets; for i=1:11     noise_level(i)=noise_range(i);     errors1(i)=0;     errors2(i)=0;     for j=1:max_test         P=number+randn(35,10)*noise_level(i); %测试未经误差训练的网络         A=sim(net,P);         AA=compet(A);         errors1(i)=errors1(i)+sum(sum(abs(AA-T)))/2; %测试经过误差训练的网络         An=sim(netn,P);         AAn=compet(An);         errors2(i)=errors2(i)+sum(sum(abs(AAn-T)))/2;     end; end; %计算识别率 correct1=1-errors1/1000; correct2=1-errors2/1000; figure; plot(noise_range,correct1,'r-',noise_range,correct2); title('识别率'); xlabel('噪声指标'); ylabel('未经误差训练的网络 -  经过误差训练的网络---'); %对实际含噪声的数字进行识别 figure; err=0.3;     for index=1:1:10         noisyJ=number(:,index)+randn(35,1)*err;         e=index;         subplot(4,5,e);         plotchar(noisyJ);         A2=sim(net,noisyJ);       A2=compet(A2);         answer=find(compet(A2)==1);         subplot(4,5,e+10);         plotchar(number(:,answer));     end; fprintf('程序运行成功结束!!!');
/
本文档为【BP神经网络】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索