BP神经网络的应用不足

2024-05-18 02:55

1. BP神经网络的应用不足

神经网络可以用作分类、聚类、预测等。神经网络需要有一定量的历史数据,通过历史数据的训练,网络可以学习到数据中隐含的知识。在你的问题中,首先要找到某些问题的一些特征,以及对应的评价数据,用这些数据来训练神经网络。虽然BP网络得到了广泛的应用,但自身也存在一些缺陷和不足,主要包括以下几个方面的问题。首先,由于学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。其次,BP算法可以使权值收敛到某个值,但并不保证其为误差平面的全局最小值,这是因为采用梯度下降法可能产生一个局部最小值。对于这个问题,可以采用附加动量法来解决。再次,网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。因此,网络往往存在很大的冗余性,在一定程度上也增加了网络学习的负担。最后,网络的学习和记忆具有不稳定性。也就是说,如果增加了学习样本,训练好的网络就需要从头开始训练,对于以前的权值和阈值是没有记忆的。但是可以将预测、分类或聚类做的比较好的权值保存。

BP神经网络的应用不足

2. 关于BP神经网络的一个问题

科普中国·科学百科:BP神经网络

3. 深入理解BP神经网络

BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:
  
 BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
                                          
 神经网络的基本组成单元是神经元。神经元的通用模型如图所示,其中常用的激活函数有阈值函数、sigmoid函数和双曲正切函数。 
                                          
 神经元的输出为: 
                                          
 神经网络是将多个神经元按一定规则联结在一起而形成的网络,如图 所示。 
                                          
 从图 可以看出,一个神经网络包括输入层、隐含层(中间层)和输出层。输入层神经元个数与输入数据的维数相同,输出层神经元个数与需要拟合的数据个数相同,隐含层神经元个数与层数就需要设计者自己根据一些规则和目标来设定。在深度学习出现之前,隐含层的层数通常为一层,即通常使用的神经网络是3层网络。 
  
 BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算法的时候会进行进一步的介绍。S函数有单极性S型函数和双极性S型函数两种,单极性S型函数定义如下:f(x)=1/1+e−x
  
 其函数曲线如图所示:
                                          
 双极性S型函数:f(x)=1−e−x/1+e−x
  
 
  
                                          
 使用S型激活函数时,输入:
                                          
 输出:
                                          
 输出的导数:
                                          
 使用S型激活函数时,BP网络的输出及其导数图形:
                                          
 根据S激活函数的图形:
  
 net在 -5~0 的时候导数的值为正,且导数的值逐渐增大, 说明此时f(x)在逐渐变大 且 变大的速度越来越快 
  
 net在 0~5  的时候导数的值为正,且导数的值逐渐减小, 说明此时f(x)在逐渐变大 但是 变大的速度越来越慢 
  
 对神经网络进行训练,我们应该尽量将net的值尽量控制在收敛比较快的范围内。
                                                                                                                                                                                                                                                                                                                                                                                                                  
 1.  定义一个BP神经网络的类,设置网络相关参数
                                          
 2.    实例化该神经网络,按下图被构建成一个输出3维,输出1维,带有3个隐藏层(每个隐藏层10个节点)的BP网络;(此处还可以随意扩展输入、输出维度和隐藏层相关系数)
                                          
 3.    初始化BP神经网络的时候,开始初始化各层网络节点的 权重、权重动量、误差初始值
                                          
 4.  引入学习训练数据;4组输入、输出数据迭代5000次
                                          
     5000次中不断向前逐层计算输出的节点数据
                                          
     并同时逐层计算误差反向修改权重值,直到迭代完毕;注意误差函数值必须呈现下降趋势
                                          
 5.  引入数据进行结果预测,将数据带回模型计算得结果;最终可知预测结果趋近于0.7
                                                                                  
 神经网络利用现有的数据找出输入与输出之间得权值关系(近似),然后利用这样的权值关系进行仿真,例如输入一组数据仿真出输出结果,当然你的输入要和训练时采用的数据集在一个范畴之内。例如预报天气:温度 湿度 气压等作为输入 天气情况作为输出利用历史得输入输出关系训练出神经网络,然后利用这样的神经网络输入今天的温度 湿度 气压等 得出即将得天气情况。同理,运用到自动化测试中,使用测试数据反映结果走向,bug数,质量问题等情况也可以做到提前预测的!
  
  附录:

深入理解BP神经网络

4. 什么是BP神经网络?

科普中国·科学百科:BP神经网络

5. BP神经网络

我不是大神。但可以给给意见。

1,遗传算法不能改变BP神经网络准确率低的本质问题的。只能在一定程度上优化BP神经网络。
2,你的数据是怎么增加的?由原来的80组数据基础上随意组合的?还有你的输出结果是3个等级。期望输出是什么类型?预测输出是什么类型?你判断正确率的标准是什么?这些都会对正确率有影响。
3,BP神经网络的正确率的提高可以通过:一,改变隐层的节点数。或增减隐层的层数。最少一个隐层,最多2个。二,改变传递函数,一般隐层用tansig,输出层用linear或者tansig。
4,最后的方法是不怎么重要的,就是数据的归一化,一般是归一化或不归一化都可以的,都试试。
我都是书本学过,做过点题目,只能给这些建议。

BP神经网络

6. BP神经网络的梳理

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的值在不断的优化。
                                          
 可以通过model.get_layer().get_weights()获得每一层训练后的参数结果。通过model.predict()预测新数据。
  
 至此,BP神经网络的整个运算流程已经过了一遍。之前提到BP神经网络是为解决非线性问题应运而生的,那么为什么BP神经网络可以解决非线性问题呢?
   还记得神经元里有一个激活函数的操作吗?神经网络通过激活函数的使用加入非线性因素。
   通过使用非线性的激活函数可以使神经网络随意逼近复杂函数,从而使BP神经网络既可以处理线性问题,也可以处理非线性问题。
  
 为什么激活函数的使用可以加入非线性因素 [7] ?
  
 其实逻辑回归算法可以看作只有一个神经元的单层神经网络,只对线性可分的数据进行分类。
   输入参数,加权求和,sigmoid作为激活函数计算后输出结果,模型预测值和实际值计算损失Loss,反向传播梯度下降求编导,获得最优参数。
                                          
 BP神经网络是比 Logistic Regression 复杂得多的模型,它的拟合能力很强,可以处理很多 Logistic Regression处理不了的数据,但是也更容易过拟合。
  
 具体用什么算法还是要看训练数据的情况,没有一种算法是使用所有情况的。
  
 常见的前馈神经网络有BP网络,RBF网络等。
  
 BP神经网络的一个主要问题是:结构不好设计。
   网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。
  
 但是BP神经网络简单、易行、计算量小、并行性强,目前仍是多层前向网络的首选算法。
  
 [1] 深度学习开端---BP神经网络: https://blog.csdn.net/Chile_Wang/article/details/100557010 
   [2] BP神经网络发展历史: https://zhuanlan.zhihu.com/p/47998728 
   [3] 最简单的神经网络--Bp神经网络: https://blog.csdn.net/weixin_40432828/article/details/82192709 
   [4] 神经网络的基本概念: https://blog.csdn.net/jinyuan7708/article/details/82466653 
   [5] 神经网络中的 “隐藏层” 理解: https://blog.csdn.net/nanhuaibeian/article/details/100183000 
   [6] AI学习笔记:神经元与神经网络: https://www.jianshu.com/p/65eb2fce0e9e 
   [7] 线性模型和非线性模型的区别: https://www.cnblogs.com/toone/p/8574294.html 
   [8] BP神经网络是否优于logistic回归: https://www.zhihu.com/question/27823925/answer/38460833

7. BP神经网络

 神经网络能很好地解决不同的机器学习问题。神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。
                                           上图显示了人工神经网络是一个分层模型,逻辑上可以分为三层:
    输入层 :输入层接收特征向量 x
    输出层 :输出层产出最终的预测 h
    隐含层 :隐含层介于输入层与输出层之间,之所以称之为隐含层,是因为当中产生的值并不像输入层使用的样本矩阵 X或者输出层用到的标签矩阵 y 那样直接可见。
   下面引入一些标记法来帮助描述模型:
    !$ a^{(j)}_{i} $ 代表第j层的第i个激活单元。 !$ \theta^{(j)} $ 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 !$ \theta^{(1)} $ 代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j+1层的激活单元数量为行数,以第 j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 !$ \theta^{(1)} $ 的尺寸为 3*4。
   对于上图所示的模型,激活单元和输出分别表达为:
    !$ a^{(2)}_{1} = g( \theta^{(1)}_{10}x_0 + \theta^{(1)}_{11}x_1 + \theta^{(1)}_{12}x_2 + \theta^{(1)}_{13}x_3 ) $ 
    !$a^{(2)}_{2} = g( \theta^{(1)}_{20}x_0 + \theta^{(1)}_{21}x_1 + \theta^{(1)}_{22}x_2 + \theta^{(1)}_{23}x_3 ) $ 
    !$a^{(2)}_{3} = g( \theta^{(1)}_{30}x_0 + \theta^{(1)}_{31}x_1 + \theta^{(1)}_{32}x_2 + \theta^{(1)}_{33}x_3 ) $ 
    !$h_{\theta}{(x)} = g( \theta^{(2)}_{10}a^{2}_{0} + \theta^{(2)}_{11}a^{2}_{1} + \theta^{(2)}_{12}a^{2}_{2} + \theta^{(2)}_{13}a^{2}_{3} ) $ 
   下面用向量化的方法以上面的神经网络为例,试着计算第二层的值:
                                           
                                           
    对于多类分类问题来说: 
                                           我们可将神经网络的分类定义为两种情况:二类分类和多类分类。
   二类分类: !$ S_{L} = 0,y = 0,y = 1$ 
   多类分类: !$ S_{L} = k, y_{i} = 1表示分到第i类;(k>2)$ 
                                           在神经网络中,我们可以有很多输出变量,我们的 !$h_{\theta}{(x)} $ 是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为: !$ h_{\theta}{(x)} \in R^{K}(h_{\theta}{(x)})_{i} = i^{th} output$      
   我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同结果,然后在利用循环在K个预测中选择可能性最高的一个,将其与y中的实际数据进行比较。
   正则化的那一项只是排除了每一层 !$\theta_0$ 后,每一层的  矩阵的和。最里层的循环j循环所有的行(由   +1 层的激活单元数决定),循环i则循环所有的列,由该层( !$ s_l$ 层)的激活单元数所决定。即: !$h_{\theta}{(x)}$ 与真实值之间的距离为每个样本-每个类输出的加和,对参数进行 regularization 的 bias 项处理所有参数的平方和。
                                           由于神经网络允许多个隐含层,即各层的神经元都会产出预测,因此,就不能直接利用传统回归问题的梯度下降法来最小化 !$J(\theta)$ ,而需要逐层考虑预测误差,并且逐层优化。为此,在多层神经网络中,使用反向传播算法(Backpropagation Algorithm)来优化预测,首先定义各层的预测误差为向量  !$ δ^{(l)} $ 
                                            训练过程: 
                                           当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。
   为了避免这样的问题,我们采取一种叫做梯度的数值检验( Numerical Gradient Checking )方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
   对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的   ,我们计算出在 !$\theta - \epsilon$  处和 !$\theta + \epsilon$ 的代价值(是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在  !$\theta$  处的代价值。
                                           当 !$\theta$ 是一个向量时,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对 !$\theta_1$ 进行检验的示例:
                                                                                   如果上式成立,则证明网络中BP算法有效,此时关闭梯度校验算法(因为梯度的近似计算效率很慢),继续网络的训练过程。

BP神经网络

8. BP神经网络方法

人工神经网络是近几年来发展起来的新兴学科,它是一种大规模并行分布处理的非线性系统,适用解决难以用数学模型描述的系统,逼近任何非线性的特性,具有很强的自适应、自学习、联想记忆、高度容错和并行处理能力,使得神经网络理论的应用已经渗透到了各个领域。近年来,人工神经网络在水质分析和评价中的应用越来越广泛,并取得良好效果。在这些应用中,纵观应用于模式识别的神经网络,BP网络是最有效、最活跃的方法之一。
BP网络是多层前向网络的权值学习采用误差逆传播学习的一种算法(Error Back Propagation,简称BP)。在具体应用该网络时分为网络训练及网络工作两个阶段。在网络训练阶段,根据给定的训练模式,按照“模式的顺传播”→“误差逆传播”→“记忆训练”→“学习收敛”4个过程进行网络权值的训练。在网络的工作阶段,根据训练好的网络权值及给定的输入向量,按照“模式顺传播”方式求得与输入向量相对应的输出向量的解答(阎平凡,2000)。
BP算法是一种比较成熟的有指导的训练方法,是一个单向传播的多层前馈网络。它包含输入层、隐含层、输出层,如图4-4所示。

图4-4 地下水质量评价的BP神经网络模型

图4-4给出了4层地下水水质评价的BP神经网络模型。同层节点之间不连接。输入信号从输入层节点,依次传过各隐含层节点,然后传到输出层节点,如果在输出层得不到期望输出,则转入反向传播,将误差信号沿原来通路返回,通过学习来修改各层神经元的权值,使误差信号最小。每一层节点的输出只影响下一层节点的输入。每个节点都对应着一个作用函数(f)和阈值(a),BP网络的基本处理单元量为非线性输入-输出的关系,输入层节点阈值为0,且f(x)=x;而隐含层和输出层的作用函数为非线性的Sigmoid型(它是连续可微的)函数,其表达式为
f(x)=1/(1+e-x) (4-55)
设有L个学习样本(Xk,Ok)(k=1,2,…,l),其中Xk为输入,Ok为期望输出,Xk经网络传播后得到的实际输出为Yk,则Yk与要求的期望输出Ok之间的均方误差为

区域地下水功能可持续性评价理论与方法研究

式中:M为输出层单元数;Yk,p为第k样本对第p特性分量的实际输出;Ok,p为第k样本对第p特性分量的期望输出。
样本的总误差为

区域地下水功能可持续性评价理论与方法研究

由梯度下降法修改网络的权值,使得E取得最小值,学习样本对Wij的修正为

区域地下水功能可持续性评价理论与方法研究

式中:η为学习速率,可取0到1间的数值。
所有学习样本对权值Wij的修正为

区域地下水功能可持续性评价理论与方法研究

通常为增加学习过程的稳定性,用下式对Wij再进行修正:

区域地下水功能可持续性评价理论与方法研究

式中:β为充量常量;Wij(t)为BP网络第t次迭代循环训练后的连接权值;Wij(t-1)为BP网络第t-1次迭代循环训练后的连接权值。
在BP网络学习的过程中,先调整输出层与隐含层之间的连接权值,然后调整中间隐含层间的连接权值,最后调整隐含层与输入层之间的连接权值。实现BP网络训练学习程序流程,如图4-5所示(倪深海等,2000)。

图4-5 BP神经网络模型程序框图

若将水质评价中的评价标准作为样本输入,评价级别作为网络输出,BP网络通过不断学习,归纳出评价标准与评价级别间复杂的内在对应关系,即可进行水质综合评价。
BP网络对地下水质量综合评价,其评价方法不需要过多的数理统计知识,也不需要对水质量监测数据进行复杂的预处理,操作简便易行,评价结果切合实际。由于人工神经网络方法具有高度民主的非线性函数映射功能,使得地下水水质评价结果较准确(袁曾任,1999)。
BP网络可以任意逼近任何连续函数,但是它主要存在如下缺点:①从数学上看,它可归结为一非线性的梯度优化问题,因此不可避免地存在局部极小问题;②学习算法的收敛速度慢,通常需要上千次或更多。
神经网络具有学习、联想和容错功能,是地下水水质评价工作方法的改进,如何在现行的神经网络中进一步吸取模糊和灰色理论的某些优点,建立更适合水质评价的神经网络模型,使该模型既具有方法的先进性又具有现实的可行性,将是我们今后研究和探讨的问题。
最新文章
热门文章
推荐阅读