1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > BP神经网络的前世今生

BP神经网络的前世今生

时间:2020-05-15 02:01:38

相关推荐

BP神经网络的前世今生

在神经网络家族中,有很多种神经网络,为什么偏偏要谈bp神经网络呢,因为bp神经网络在工业界运用较为广泛,技术相对成熟。另外,在学术界bp神经网络是一种经典的神经网络。本文会从bp神经网络的设计、结构、训练等方面进行介绍。

首先,简要介绍一下神经网络的基本原理。

说白了,神经网络是人工智能对生物学中的神经系统结构进行的模拟。上古计算机科学家们,是想通过对生物学上神经系统的模拟得到一种能够学习知识,并且通过学习知识不断修正自身,最后做出正确输出的一种程序。

对,把抽象的神经网络看成是程序更容易让我们理解。程序(数据结构+算法)。

下图是生物神经元和人工神经元关系对照,以及人工神经元结构及功能示意图。

此图说得很形象,本人就不再赘述。

神经网络的前世:

神经网络可追溯到20世纪40年代。整个发展历程也有低潮期。直到1986年Rumelhart等人提出反响传播(BackPropagationBP)神经网络,使得之前提出的多层前馈神经网络成为应用最广泛的神经网络模型。

好了,说了这么多闲话,下面正式进入bp神经网络的理解。

前馈神经网络+后向传播=bp神经网络

所以,要深入理解bp神经网络,必须要从前馈型网络说起。

其实很好理解,说白了,前馈型网络就是,每层的神经元仅与其前一层的神经元相连,仅接受前一层传输来的信息。

如图:有图有真像!

结点代表神经元,有向线段代表有链接输出。Ps:不同的链接,所占的输出权重是不同的,神经网络就是在训练中不断修改各个输出所占的权重,最终达到较为精准的模型。

那么我们的主角,bp神经网络和前馈型网络又有什么区别呢?

说白了,bp神经网络就是在前馈型网络的结构上增加了后向传播算法。

对了吧,只要把神经网络看成是程序就很清晰了,网络结构看成是数据结构,训练看成是一种算法。不就将抽象迎刃而解吗?

再次借鉴一个简介的书面解释:

后向传播学习的前馈型神经网络(backpropagationfeed-forwardneuralnetwork)BPFNN/BPNN.

在BPNN中,后向传播是一种学习算法,体现为BPNN的训练过程,该过程是需要监督学习的;前馈型网络是一种结构,体现为BPNN的网络构架。(PS:这种神经网络结构清晰,使用简单,而且效率比较高)反向传播算法通过迭代处理的方式,不断的调整链接神经网络的网络权重,使得最终输出结果和与其结果的误差最小。

任何神经网络在实际应用中分为两个阶段,训练阶段和使用阶段。其实呀,神经网络属于机器学习范畴,机器学习,顾名思义嘛,必须得学习呀,所以训练的过程就是学习的过程。对于BPNN,训练阶段根据给定的样本,使用是适当的学习算法(后向传播学习算法)在训练的过程中不断的自调整网络参数(例如网络结构的层数、每层的神经元数目、连接权重、神经元偏置),最终使得被训练的网络能够很好的拟合。

训练过程结束以后就是使用过程,训练之后的神经网络就可以进行使用。

下面重点介绍,BPNN的训练流程(算法)。

如图:-------------------------------------------------------

大致可分为五个步骤:

步骤1:初始化网络权重。

我们知道不同神经元之间的连接权重(网络权重)是不一样的。这是在训练之后得到的结果。所以在初始化阶段,我们给予每个网络连接权重(从i输出到j)一个很小的随机数(一般而言为-1.0~1.0或者-0.5~0.5),同时,每个神经元有一个偏置(偏置可看做是每个神经元的自身权重),也会被初始化为一个随机数。

初始化部署之后,就是神经网络针对每个输入样本的训练。

步骤2:向前传播输入(前馈型网络)

首先,根据训练样本x提供网络的输入层,通过计算得到每个神经元的输出。每个神经元的计算方法相同,都是由其输入的线性组合得到,具体的公式为:

这个公式看似复杂,其实也就那样,说白了,就是上层节点向下层中某个节点(j)的输入,加上i节点自身的权重,再将通过函数,将加权值归约到0~1区间上,得到输出。

下面解释一下

其实也很easy,主要是要清楚这里面的符号代表什么。

是由上一层的单元i到本单元j的网络权重;

是上一层的单元i的输出;

为本单元的偏置,用来充当阈值,可以改变单元的活性。说白了,就相当于一个函数中的常数,它可以作为每个单元独立的权值,并且这个权值在不断学习训练过程中会不断修正。

为各网络权重乘以各上层输出,并进行累加,最后加上本单元偏置,就形成了输出。

然后在通过激活函数(这个激活函数称为logistic函数)得到最终输出,这个函数将较大的输入值映射为区间0~1之间的一个值。

步骤3:反向误差传播(也就是学习过程)

从对步骤2的描述可以看出,整个步骤2的过程是一个向前逐层推进的过程,最终在输出层得到实际输出,再通过与预期输出(样本)相比较得到每个输出单元j的误差,公式为。

接下来解读一下这个公式,其中是输出单位j的预期输出(一般是由样本给出),而其实是函数的导数,公式推导过程省略,而为何要用导数,我的理解是根据微分的原理,得到一个差值,再与导数相乘得到一个类似微分量,作为修正量。这样就得到了每一个节点的误差。得到的误差之后需要从后向前传播。(如题2.6,等同于图中的从右向做传播)。如图中,左侧某一节点的误差可以通过它连接的右侧一层的所有单元r的误差计算得到,具体公式为:

这样,一步一步反向迭代,可一层得到最后一层到第一层每个神经元的误差。本人突然想起了周杰伦的一首歌《星晴》,手牵手一步两步三步四步望着天,看星星一颗两颗三颗四颗连成线,背着背默默许下星愿,

看远方的星如果听的见,它一定实现。仿佛让我想到了网络节点的链接与训练迭代。其实程序也是那么有诗意的。

步骤4:网络权重与神经网络元偏置调整

在处理过程中,我们可以一边向后传播误差,一边调整网络权重和神经元的阈值,但是一般而言,为了方便起见,这里先计算得到所有神经元的误差,然后统一调整网络权重和神经元的阈值。

调整权重的方法是从输入层与第一隐含层的链接权重开始(隐含层:说白了,就是2.6图中的每列,因为是隐含在神经网络中,所以称为隐含层),依次向后进行,每个连接权重根据公式:

进行调整。很清晰吧,公式就不多解释。注意i、j分别指代的是左侧和右侧的相邻节点编号。

神经元偏置的调整方法是对每个神经元j进行如公式

其中两个公式中是学习率,通常取0~1之间的常数。说白了,就是一个调节大小的参数。该参数也会影响算法的性能,经验表明,太小的学习率会导致学习进行得慢,而太大的学习率可能会使算法出现不适当的解之间的振动情况,一个经验规则是将学习率设为迭代次数t的倒数,也就是1/t。

步骤5:判断结束

对于每个样本,如果最终的输出误差小于可接受的范围或者迭代次数t达到了一定的阈值,则选取下一个样本,转到步骤2重新继续执行;否则,迭代次数t加1,然后转向步骤2继续使用当前样本进行训练。

到此BPNN的训练过程就已结束。训练成熟后的神经网络即可拿来使用。

下面贴一个BPNN的简单分类训练例子。

已知一个前馈型神经网络例子如图,设学习率为0.9,当前的训练样本为x={1,0,1},而且预期分类标号为1,同时,表给出了当前该网络的各个连接权重和神经元偏置。求该网络在当前训练样本下的训练过程。

下面,直接上图和解答过程:

到此为止,bp神经网络的讲解就结束了,有和不足及错误,欢迎指正。随后,本人将会用编程语言实现一个BPNN。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。