当前位置:   article > 正文

bp神经网络应用实例_【神经网络】神经网络简介

bp神经网络应用实例
目录 一 、神经 网络简介     1、神经网络是什么     2、神经网络分类         a.前馈式网络         b.反馈式网络         c.图网络     3、神经网络应用 二、神经网络编程基础     1、激活函数

        a.什么是激活函数

        b.为什么要用激活函数         c.常用激活函数     2、逻辑回归         a.损失函数         b.成本函数 三、神经网络结构与原理     1、基本结构及表示方法         a.神经元模型         b.神经网络模型     2、神经网络输出计算过程
ONE简介 01 神经网络是什么 神经网络是机器学习中的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。02 神经网络分类 刚刚入门神经网络,往往会对众多的神经网络架构感到困惑,神经网络看起来复杂多样,但是这么多架构无非也就是三类:前馈式网络反馈式网络图网络。[1]   前馈神经网络 FFNN,Feedforward Neural Network   输入:向量或向量序列 包括:全连接前馈神经网络,卷积神经网络 表示:有向无环图

信息传播:朝着一个方向(反向传播和这个不是同一个概念)

841aea162d8e048ade982b596a72855e.png

前馈神经网络是我们接触到论文中最常用的一种神经网络,简称前馈网络。是实际应用中最常见的神经网络结构,是人工神经网络的一种,前馈描述的是网络的结构,指的是网络的信息流是单向的,不会构成环路。在此种神经网络中,各神经元从输入层开始,接收前一级输入,并输出到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。

前馈神经网络采用一种单向多层结构,其拓扑结构如上图所示。其中每一层包含若干个神经元,同一层的神经元之间没有互相连接,层间信息的传送只沿一个方向进行。其中第一层称为输入层。最后一层为输出层,中间为隐含层,简称隐层。隐层可以是一层。也可以是多层。增强网络的分类和识别能力、解决非线性问题的唯一途径是采用多层前馈前馈网络,即在输入层和输出层之间加上隐含层,构成多层前对感知器网络。[2]

  延展1:前馈神经网络和BP神经网络是一个东西吗 BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是在前馈神经网络的基础上应用了BP算法(下一节会讲到),属于前馈神经网络的一种。BP神经网络的基本思想是梯度下降法,利用梯度搜索技术,以期望使得网络的实际输出值和期望输出值的误差均方差最小。[3] 延展2:人工神经网络和神经网络是说的一个东西吗 除生物体神经网络实体外所有人为创造的神经网络结构均可称为人工神经网络,机器学习文献上的模型大多属于这个范畴,几乎涵盖所有我们研究的神经网络。所以我认为人工神经网络≈神经网络。 延展3:人工神经网络(ANN)、前馈神经网络和BP神经网络的关系 人工神经网络包括前馈神经网络,BP神经网络属于前馈神经网络的一种,在前馈神经网络的基础上应用了BP算法用来优化参数以学习并接近真实值。     反馈神经网络 FDNN, feedback neural network   输入:向量或向量序列(多个特征X1、X2…) 包括:循环神经网络(RNN),Hopfieid网络,波尔兹曼机 表示:有向循环图或者无向图 信息传播:可单向,可双向,可以自己到自己 神经元:有记忆功能,在不同时刻有不同状态。(为进一步增强网络记忆容量,可引入外部记忆单元和读写机制,以保存网络中间状态,如神经图灵机)

415e126c9efebbc1d4089a00e3a97303.png

反馈神经网络是与前馈神经网络对应的,反馈神经网络是一种反馈动力学系统。在这种网络中,每个神经元同时将自身的输出信号作为输入信号反馈给其他神经元,它需要工作一段时间才能达到稳定。   延展4:循环神经网络 循环神经网络 RNN , Recurrent Neural Network 。循环网络在他们的连接图中定向了循环,这意味着你可以按照箭头回到你开始的地方。他们可以有复杂的动态,使其很难训练。他们更具有生物真实性。 循环网络的目的是用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。 循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。 循环神经网络具有记忆性、参数共享的特性,因此在对序列的非线性特征进行学习时具有一定优势。循环神经网络在自然语言处理( NLP ),例如语音识别、语言建模、机器翻译等领域有应用,也被用于各类时间序列预报。引入了卷积神经网络( CNN )构筑的循环神经网络可以处理包含序列输入的计算机视觉问题。 [4] 图网络 输入:图结构数据(如:知识图谱,社交网络,分子网络等) 表示:可有向,可无向 信息传播:相邻节点或自己 结点:一个或一组神经元  

24963f303c1bd7520499a204fad4060e.png

 03 神经网络应用

人工神经网络特有的非线性适应性信息处理能力,克服了传统人工智能方法对于直觉,如模式、语音识别、非结构化信息处理方面的缺陷,使之在神经专家系统、模式识别、智能控制、组合优化、预测等领域得到成功应用。人工神经网络与其它传统方法相结合,将推动人工智能和信息处理技术不断发展。近年来,人工神经网络正向模拟人类认知的道路上更加深入发展,与模糊系统、遗传算法、进化机制等结合,形成计算智能,成为人工智能的一个重要方向,将在实际应用中得到发展。

笔者将在今后的内容分享中偏重基于时间序列的数据预测领域,这也是我今后研究的一个大方向。

  TWO神经网络编程基础01 激活函数 l 什么是激活函数

be73f7369ff0114dd409d827e6c5066c.png

48c166588e425569d515eb63059d00d7.png 激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将 非线性特性 引入到我们的网络中。如上图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。 引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。 l  为什么要用激活函数 如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机。 如果使用的话,激活函数给神经元引入了 非线性因素 ,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。   l  常用的激活函数 Sigmoid函数

8e64adf436d9f68c972badb6414f909e.png

bda2cb9d2e3dbf28e0586ec2c804d5cc.png

在sigmoid函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率。sigmoid函数曾经是比较流行的,它可以想象成一个神经元的放电率,在中间斜率比较大的地方是神经元的敏感区,在两边斜率很平缓的地方是神经元的抑制区。 当然,流行也是曾经流行,这说明函数本身是有一定的缺陷的。 1) 当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。在神经网络反向传播的过程中,我们都是通过微分的链式法则来计算各个权重w的微分的。当反向传播经过了sigmoid函数,这个链条上的微分就很小很小了,况且还可能经过很多个sigmoid函数,最后会导致权重w对损失函数几乎没影响,这样不利于权重的优化,这个问题叫做梯度饱和,也可以叫梯度弥散。 2) 函数输出不是以0为中心的, 这样会使权重更新效率降低 。对于这个缺陷,在斯坦福的课程里面有详细的解释。 3) sigmoid函数要进行指数运算,这个对于计算机来说是比较慢的。 Tanh函数

669d8bf354f1d9b662df2d8c4487ccc6.png

11b322a2b4333a1da042e51ccbb36f35.png

tanh是双曲正切函数,tanh函数和sigmoid函数的曲线是比较相近的,咱们来比较一下看看。首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmoid的好。 一般二分类问题中,隐藏层用tanh函数,输出层用sigmoid函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析,还是要靠调试的。 延展6:为什么tanh和Sigmoid函数会影响向下梯度法对参数进行更新的效率(梯度饱和)? (结合 BP 神经网络反向更新 w 参数的基础知识)当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。在神经网络反向传播的过程中,我们都是通过微分的链式法则来计算各个权重 w 的微分的。当反向传播经过了 sigmoid 函数,这个链条上的微分就很小很小了,况且还可能经过很多个 sigmoid 函数,最后会导致权重 w 对损失函数几乎没影响,这样不利于权重的优化,这个问题叫做 梯度饱和 ,也可以叫 梯度弥散 。  ReLU函数

968db50738e391c95ef475d444bb8217.png

08e5e442a2a49d8e52432e42b85da237.png

48c166588e425569d515eb63059d00d7.png ReLU(Rectified Linear Unit)函数是目前比较火的一个激活函数,相比于sigmoid函数和tanh函数,它有以下几个优点: 1) 在输入为正数的时候,不存在 梯度饱和问题 。 2) 计算速度要快很多。ReLU函数 只有线性关系 ,不管是前向传播还是反向传播,都比sigmoid和tanh要快很多。( sigmoid和tanh要计算指数,计算速度会比较慢 ) 当然,缺点也是有的: 1) 当输入是负数的时候,ReLU是完全不被激活的,这就表明一旦输入到了负数,ReLU就会死掉。 这样在前向传播过程中,还不算什么问题,有的区域是敏感的,有的是不敏感的。 但是到了反向传播过程中,输入负数,梯度就会完全到0,这个和sigmoid函数、tanh函数有一样的问题。 2) 我们发现ReLU函数的输出要么是0,要么是正数,这也就是说, ReLU函数也不是以0为中心的函数。   除三种常见的激活函数外,还有ELU函数、PReLU函数,选择哪种激活函数都要视情况而定,具体讲解请看引用文献。[5]  02 逻辑回归 逻辑回归是一种线性回归分析模型,输入为常见的多个特征,输出的因变量可以为二分类,也可以是多分类,但大多时候 用于二分类 。 同时,逻辑回归也是一种广义线性回归,因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是 待求参数 ,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b), 然后根据p 与1-p的大小决定因变量的值 。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。 [6] 此处我将以Logistic回归模型为例去解释两个概念:损失函数和成本函数。 a.    损失函数 损失函数L(y^,y)是为了衡量预测输出的y^和实际值y有多接近。 损失函数计算过程: ①  y^=σ(wx+b), σ=1/1+e-x                           ----运用激活函数求预测值 ② L(y^,y)= -[y*logy^ +(1-y)log(1-y^)]      ----求损失函数 在②求损失函数的时候这里为什么不用 L(y^,y)=1/2*(y^-y)2是因为 之后讨论的优化问题会变成非凸的,会有很多局部最优解,运用梯度下降法可能找不到全局最 优解。   b.    成本函数 为了训练Logistic回归模型的参数w和b,需要定义一个成本函数J(w,b),让模型通过学习来调整参数。  

7634cf69c6f8e426348e02855b7da56f.png

  THREE神经网络结构与原理01 基本结构及表示方法
符号含义
(x(1),y(1))第一个样本的一系列特征值x及表现结果y;其中x为特征向量(多个特征)
X∈nxx是nx维的特征向量; nx有时也会写成n
m训练集样本个数;有时为强调是训练样本,写成m=mtrain
y^表示神经网络输出的预测值;通常与真实值y进行比对
wij神经元之间连线上的连接权值
bk神经元上的阈值
α人为给定的学习速率
48c166588e425569d515eb63059d00d7.png a.    神经元模型

24dc0f64b42d86ce2e0fdc0a14707670.png

x1x2…xn为一个样本的多个特征值,w为神经元与神经元连线上的网络权值,b为神经元节点上的阈值。每一个神经元节点都要处理两次运算,算出Z和σ(z),最后输出该神经元的预测值y^,亦表示为a。 b.    神经网络模型

040526495bab9ce6c2825e77631d1538.png

将众多的神经元组合起来形成了神经网络,其运算过程与神经网络的大致相同。将一个样本的多个特征值输入,在隐含层的每个节点分别经过两步多次运算,将结果传输给最后的输入层,输入层将输入的数值再次分别进行两步多次运算输出最后的预测值。 为了更好的表示神经网络运算过程,此处以蓝色线路为例进行隐含层的详细过程演示,以此类推出所有的运算过程。 48c166588e425569d515eb63059d00d7.png

def8a06ee0e732b3dd6af720ae41fe34.png

 02 神经网络计算过程

87a2010b121cbf0826644221c6de153c.png

2b5c05810711ecd1d36a87009a6439cc.png

      参考文献

[1]深度学习——神经网络的种类(前馈神经网络,反馈神经网络,图网络)

https://blog.csdn.net/weiwei935707936/article/details/97611676

[2]前馈型神经网络与反馈型神经网络

https://www.jianshu.com/p/0bc5aacdd168

[3]百度百科- BP神经网络

https://baike.baidu.com/item/BP%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/4581827?fr=aladdin

[4]百度百科-循环神经网络

https://baike.baidu.com/item/%E5%BE%AA%E7%8E%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/23199490?fr=aladdin

[5]CSDN-几种常用激活函数的简介

https://blog.csdn.net/kangyi411/article/details/78969642

[6]百度百科-逻辑回归

https://baike.baidu.com/item/logistic%E5%9B%9E%E5%BD%92/2981575?fromtitle=%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92&fromid=17202449#reference-[1]-2294104-wrap

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/314096
推荐阅读
相关标签
  

闽ICP备14008679号