BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:
1、从训练集中取出某一样本,把信息输入网络中。
2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。
4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。
第0节、引例
本文以Fisher的Iris数据集作为神经网络程序的测试数据集。Iris数据集可以在http://enwikipediaorg/wiki/Iris_flower_data_set 找到。这里简要介绍一下Iris数据集:
有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类。不同品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度会有差异。我们现有一批已知品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度的数据。
一种解决方法是用已有的数据训练一个神经网络用作分类器。
如果你只想用C#或Matlab快速实现神经网络来解决你手头上的问题,或者已经了解神经网络基本原理,请直接跳到第二节——神经网络实现。
第一节、神经网络基本原理
1 人工神经元( Artificial Neuron )模型
人工神经元是神经网络的基本元素,其原理可以用下图表示:
图1 人工神经元模型
图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值 ( threshold ),或称为偏置( bias )。则神经元i的输出与输入的关系表示为:
图中 yi表示神经元i的输出,函数f称为激活函数 ( Activation Function )或转移函数 ( Transfer Function ) ,net称为净激活(net activation)。若将阈值看成是神经元i的一个输入x0的权重wi0,则上面的式子可以简化为:
若用X表示输入向量,用W表示权重向量,即:
X = [ x0 , x1 , x2 , , xn ]
则神经元的输出可以表示为向量相乘的形式:
若神经元的净激活net为正,称该神经元处于激活状态或兴奋状态(fire),若净激活net为负,则称神经元处于抑制状态。
图1中的这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。
2 常用激活函数
激活函数的选择是构建神经网络过程中的重要环节,下面简要介绍常用的激活函数。
(1) 线性函数 ( Liner Function )
(2) 斜面函数 ( Ramp Function )
(3) 阈值函数 ( Threshold Function )
以上3个激活函数都属于线性函数,下面介绍两个常用的非线性激活函数。
(4) S形函数 ( Sigmoid Function )
该函数的导函数:
(5) 双极S形函数
该函数的导函数:
S形函数与双极S形函数的图像如下:
图3 S形函数与双极S形函数图像
双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(-1,1),而S形函数值域是(0,1)。
由于S形函数与双极S形函数都是可导的(导函数是连续函数),因此适合用在BP神经网络中。(BP算法要求激活函数可导)
具体http://blogcsdnnet/gongxq0124/article/details/7681000/
基坑降水引起地面沉降的BP神经网络预测模型建模过程如下:
(1)样本选择
因基坑降水引起的地面沉降量和距离基坑的距离关系密切,因此建模选用“基坑降水引起沉降工程数据(第二类)”(见表41)中的相关数据作为样本进行学习训练和检验。
(2)BP神经网络结构设计
对于BP网络,对于任何在闭区间内的一个连续函数都可以用单隐层的BP网络逼近,因而一个三层BP网络就可以完成任意的n维到m维的映射。根据网络结构简单化的原则,确定采用三层BP网络结构,即输入层为沉降点距基坑的距离L(m)、等效压缩模量E(MPa)、水位降深H(m)和支护刚度n四个参数,输出层为地面累积沉降量(mm),隐层层数为1层。隐层的神经元数目选择是一个十分复杂的问题,往往需要根据设计者的经验和多次实验来确定,因而不存在一个理想的解析式来表示。隐单元的数目与问题的要求,与输入、输出单元的数目有直接的关系。隐单元数目太多会导致学习时间过长,误差不一定最佳,也会导致容错性差、不能识别以前没有看到的样本,因此一定存在一个最佳的隐单元数。研究通过一次编程比较了隐层神经元个数分别为5、10、15、20、25、30、40时训练速度及检验精度。
图42 BP神经网络程序框图
(3)网络训练及检验
BP网络采用梯度下降法来降低网络的训练误差,考虑到基坑降水地面沉降范围内沉降量变化幅度较小的特点,训练时以训练目标取0001为控制条件,考虑到网络的结构比较复杂,神经元个数比较多,需要适当增加训练次数和学习速率,因此初始训练次数设为10000次,学习速率取01,中间层的神经元传递函数采用S型正切函数tansig,传输函数采用logsig,训练函数采用trainlm,选用38组数据中的33组作为训练样本,5组作为检验样本。
(4)网络实现及检验效果
使用MATLAB60编程建立基于BP神经网络的基坑降水地面沉降预测模型(程序代码见附件1),其训练误差及检验效果如下:
图43 训练误差曲线
图44 预测误差曲线
由图43、图44可见:样本数据收敛,训练误差较小,中间层神经单元个数为10时预测精度较好,误差小于20%,误差满足工程需求。
BP神经网络被称为“深度学习之旅的开端”,是神经网络的入门算法。
各种高大上的神经网络都是基于BP网络出发的,最基础的原理都是由BP网络而来 [1] ,另外由于BP神经网络结构简单,算法经典, 是神经网络中应用最广泛的一种。
BP神经网络(back propagation neural network)全称是反向传播神经网络。
神经网络发展部分背景如下 [2] :
为解决非线性问题,BP神经网络应运而生。
那么什么是BP神经网络?稍微专业点的解释要怎么说呢?
很喜欢 最简单的神经网络--Bp神经网络 一文对算法原理的解释,语言活泼,案例简单,由浅入深。
文中提到所谓的 AI 技术,本质上是一种数据处理处理技术,它的强大来自于两方面:1互联网的发展带来的海量数据信息;2计算机深度学习算法的快速发展。AI 其实并没有什么神秘,只是在算法上更为复杂 [3] 。
我们从上面的定义出发来解释BP神经网络的原理。
BP神经网络整个网络结构包含了:一层输入层,一到多层隐藏层,一层输出层。
一般说L层神经网络,指的是有L个隐层,输入层和输出层都不计算在内的 [6] 。
BP神经网络模型训练的学习过程由信号的 正向传播 和误差的 反向传播 两个过程组成。
什么是信号的正向传播?顾名思义,就是结构图从左到右的运算过程。
我们来看看结构图中每个小圆圈是怎么运作的。我们把小圈圈叫做神经元,是组成神经网络的基本单元。
正向传播就是输入数据经过一层一层的神经元运算、输出的过程,最后一层输出值作为算法预测值y'。
前面正向传播的时候我们提到权重w、偏置b,但我们并不知道权重w、偏置b的值应该是什么。关于最优参数的求解,我们在 线性回归 、 逻辑回归 两章中有了详细说明。大致来讲就是:
BP神经网络全称 back propagation neural network,back propagation反向传播是什么?
反向传播的建设本质上就是寻找最优的参数组合,和上面的流程差不多,根据算法预测值和实际值之间的损失函数L(y',y),来反方向地计算每一层的z、a、w、b的偏导数,从而更新参数。
对反向传播而言,输入的内容是预测值和实际值的误差,输出的内容是对参数的更新,方向是从右往左,一层一层的更新每一层的参数。
BP神经网络通过先正向传播,构建参数和输入值的关系,通过预测值和实际值的误差,反向传播修复权重;读入新数据再正向传播预测,再反向传播修正,,通过多次循环达到最小损失值,此时构造的模型拥有最优的参数组合。
以一个简单的BP神经网络为例,由3个输入层,2层隐藏层,每层2个神经元,1个输出层组成。
输入层传入
第一层隐藏层
对于 神经元而言,传入 ,加权求和加偏置激活函数处理后,输出 ;
对于 神经元而言,传入 ,加权求和加偏置函数处理后,输出 ;
输出:
第二层隐藏层
对于 神经元而言,传入 ,加权求和加偏置激活函数处理后,输出 ;
对于 神经元而言,传入 ,加权求和加偏置激活函数处理后,输出 ;
输出:
输出层
对于输出层神经元而言,输入 ,加权求和加偏置激活函数处理后,输出 ,输出的是一个值
第一次运行正向传播这个流程时随用随机参数就好,通过反向传播不断优化。因此需要在一开始对 设置一个随机的初始值。
首先计算正向传播输出值 与实际值的损失 ,是一个数值。所谓反向是从右到左一步步来的,先回到 ,修正参数 。
以此类推,通过对损失函数求偏导跟新参数 ,再跟新参数 。这时又回到了起点,新的数据传入又可以开始正向传播了。
keras可以快速搭建神经网络,例如以下为输入层包含7129个结点,一层隐藏层,包含128个结点,一个输出层,是二分类模型。
神经网络反向传播的优化目标为loss,可以观察到loss的值在不断的优化。
可以通过modelget_layer()get_weights()获得每一层训练后的参数结果。通过modelpredict()预测新数据。
至此,BP神经网络的整个运算流程已经过了一遍。之前提到BP神经网络是为解决非线性问题应运而生的,那么为什么BP神经网络可以解决非线性问题呢?
还记得神经元里有一个激活函数的 *** 作吗?神经网络通过激活函数的使用加入非线性因素。
通过使用非线性的激活函数可以使神经网络随意逼近复杂函数,从而使BP神经网络既可以处理线性问题,也可以处理非线性问题。
为什么激活函数的使用可以加入非线性因素 [7] ?
其实逻辑回归算法可以看作只有一个神经元的单层神经网络,只对线性可分的数据进行分类。
输入参数,加权求和,sigmoid作为激活函数计算后输出结果,模型预测值和实际值计算损失Loss,反向传播梯度下降求编导,获得最优参数。
BP神经网络是比 Logistic Regression 复杂得多的模型,它的拟合能力很强,可以处理很多 Logistic Regression处理不了的数据,但是也更容易过拟合。
具体用什么算法还是要看训练数据的情况,没有一种算法是使用所有情况的。
常见的前馈神经网络有BP网络,RBF网络等。
BP神经网络的一个主要问题是:结构不好设计。
网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。
但是BP神经网络简单、易行、计算量小、并行性强,目前仍是多层前向网络的首选算法。
[1] 深度学习开端---BP神经网络: https://blogcsdnnet/Chile_Wang/article/details/100557010
[2] BP神经网络发展历史: https://zhuanlanzhihucom/p/47998728
[3] 最简单的神经网络--Bp神经网络: https://blogcsdnnet/weixin_40432828/article/details/82192709
[4] 神经网络的基本概念: https://blogcsdnnet/jinyuan7708/article/details/82466653
[5] 神经网络中的 “隐藏层” 理解: https://blogcsdnnet/nanhuaibeian/article/details/100183000
[6] AI学习笔记:神经元与神经网络: https://wwwjianshucom/p/65eb2fce0e9e
[7] 线性模型和非线性模型的区别: https://wwwcnblogscom/toone/p/8574294html
[8] BP神经网络是否优于logistic回归: https://wwwzhihucom/question/27823925/answer/38460833
人工神经网络模型主要考虑网络连接的拓扑结构、神经元的特征、学习规则等目前,已有近40种神经网络模型,其中有反传网络、感知器、自组织映射、Hopfield网络、波耳兹曼机、适应谐振理论等
ann:人工神经网络(Artificial Neural Networks)
bp:Back Propagation网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)