BP神经网络的梳理

2024-05-19 01:35

1. 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

BP神经网络的梳理

2. 深入理解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数,质量问题等情况也可以做到提前预测的!
  
  附录:

3. 神经网络——BP算法

对于初学者来说,了解了一个算法的重要意义,往往会引起他对算法本身的重视。BP(Back Propagation,后向传播)算法,具有非凡的历史意义和重大的现实意义。
  
 1969年,作为人工神经网络创始人的明斯基(Marrin M insky)和佩珀特(Seymour Papert)合作出版了《感知器》一书,论证了简单的线性感知器功能有限,不能解决如“异或”(XOR )这样的基本问题,而且对多层网络也持悲观态度。这些论点给神经网络研究以沉重的打击,很多科学家纷纷离开这一领域,神经网络的研究走向长达10年的低潮时期。[1]
  
 1974年哈佛大学的Paul Werbos发明BP算法时,正值神经外网络低潮期,并未受到应有的重视。[2]
  
 1983年,加州理工学院的物理学家John Hopfield利用神经网络,在旅行商这个NP完全问题的求解上获得当时最好成绩,引起了轰动[2]。然而,Hopfield的研究成果仍未能指出明斯基等人论点的错误所在,要推动神经网络研究的全面开展必须直接解除对感知器——多层网络算法的疑虑。[1]
  
 真正打破明斯基冰封魔咒的是,David Rumelhart等学者出版的《平行分布处理:认知的微观结构探索》一书。书中完整地提出了BP算法,系统地解决了多层网络中隐单元连接权的学习问题,并在数学上给出了完整的推导。这是神经网络发展史上的里程碑,BP算法迅速走红,掀起了神经网络的第二次高潮。[1,2]
  
  因此,BP算法的历史意义:明确地否定了明斯基等人的错误观点,对神经网络第二次高潮具有决定性意义。 
  
 这一点是说BP算法在神经网络领域中的地位和意义。
  
  BP算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多是在使用BP算法进行训练[2],包括最近炙手可热的深度学习概念下的卷积神经网络(CNNs)。 
  
  
 BP神经网络是这样一种神经网络模型,它是由一个输入层、一个输出层和一个或多个隐层构成,它的激活函数采用sigmoid函数,采用BP算法训练的多层前馈神经网络。
  
 BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。其算法基本思想为:在2.1所述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
  
 BP算法中核心的数学工具就是微积分的 链式求导法则 。
  
                                                                                  
 
  
                                          
 
  
                                                                                                                                                                                                                                                  
 BP算法的缺点,首当其冲就是局部极小值问题。
  
 BP算法本质上是梯度下降,而它所要优化的目标函数又非常复杂,这使得BP算法效率低下。
  
  
 [1]、《BP算法的哲学思考》,成素梅、郝中华著
  
 [2]、《机器学习》,周志华著
  
 [3]、 Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现  
  
 2016-05-13 第一次发布
  
 2016-06-04 较大幅度修改,完善推导过程,修改文章名
  
  
 2016-07-23 修改了公式推导中的一个错误,修改了一个表述错误

神经网络——BP算法

4. 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算法有效,此时关闭梯度校验算法(因为梯度的近似计算效率很慢),继续网络的训练过程。

5. (BP进阶1)从M-P模型到BP神经网络

经过两天的研究,终于更加清晰地搞明白了所谓BP,做此记录。
                                          
 M-P模型,其实就是按照生物神经元的结构和工作原理来构造出来的比较简单的模型。下图为M-P模型的示意图:
                                          
 具体的推论详见 http://blog.csdn.net/u013007900/article/details/50066315 
   抛去繁重的公式,我们可以把这个模型理解为:
   要想下一个神经元接收到信息,那么接收到的信号一定要大于某一个阙值θ才能由输出信号yj输出,该阙值由具体的神经元决定;也就是说,输入的信号总和在经过神经元后失去了阙值θ的信号以后,转化为输出信号输出。
   我们假每一个输出信号x都输入一定的神经元Wij,那么该神经元共接收到的输入信号即为
                                          
 
  
 这个公式不难理解,于是在神经元中失去了阙值量θ后:
                                          
 经过信号转化(激活函数f(x)的作用)为输出信号:
                                          
 然而神经元突触的信号类型又分为兴奋和抑制两种状态,于是,在M-P模型中,这种性质体现为权值w的正负,如果权值是负,那么输出y值就也为负,体现为抑制状态;如果权值是正,那么输出y值就也为正,体现为兴奋状态。
  
 这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。
  
 常用的激活函数有五种:
   线性激活函数:
   
  
 
                                          
 
  
 
                                          
 
  
 
                                          
 非线性激活函数:
   
  
 
                                          
 
  
 
                                          
 
  
 
                                          
 在进行BP神经网络进行训练的时候,我们常用的函数是S形函数。
  
 简单来说,感知器就是一个简单的神经网络模型,以下是感知器的拓扑结构图:
                                          
 
  
 
                                          
 而oi表现形式为两种,1和-1,来表示兴奋和抑制。
  
 
  
 
                                          
 
  
 
                                          
 因此,单层感知器的作用为可以使用一条直线来对输入数据进行线性分类,如果仍旧不太明白的话,可以从公式入手来进行分析:
   
  
 
                                          
 
  
 
                                          
 所以可以得知,这是一个关于x1,x2的线性函数,而在图1中用于分类的红色直线,则是与函数w1j x1+w2j x2-θj=0成线性关系的函数。
  
 到此,我们已经讲解了单层感知器的实现分类原理,引入多层分类器的原因在于,单层感知器的局限性只能区分二维平面中的线性函数,而对于多维平面,或着非线性函数来说,则无法实现分类。
   
  
 
                                          
 可以看出,在加入了隐层以后输入层的数据不再直接经过简单的权值激活运算就直接进入输出层,而是在多层的隐层经过复杂计算后,再输入层输出,这样的计算方法,可以保证输出的o和输入信号x1,x2,不再是简单的线性关系,而其中的计算也将会随着隐层的增加而无限度地复杂化。
   我们可以比较一下单层感知器和多层感知器的分类能力:
                                          
 由上图可以看出,随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。
   异或问题的解决:
                                          
 在M-P模型中,我们得知,为了实现有效的分类,需要加入一定数量的隐层来加强算法的复杂性,而在隐层内部的计算我们是无法得知的,因此,我们需要进行神经网络的训练。
   这样说可能有点突兀,我们不妨这样想,我们已知的是一组数据和它们相对应的分类状况,求解的是如何可以用同类的数据来得到正确的分类。
   或者这样说,我们已知:
   x1=2,x2=3时,y=5,x1=4,x2=5时,y=9,那么,求解x1=8,x2=0时,y的值,这样是不是好理解很多?
   总之,我们需要的是一个可以满足当前条件的“公式”,让它可以计算出更多的数据,这在我们的小学数学里叫做解算式,在这里就可以叫做训练。
   我们需要知道这些数据在隐层里是经过怎样的计算,才得到了输出结果,于是,我们需要先进性数据的训练,然后再根据现有未知结果的数据套进去,得到预期结果。
   而我们在这里,得出的所谓隐层结构的计算,就是需要训练出的“公式”。
   具体的BP训练方式下次更新。

(BP进阶1)从M-P模型到BP神经网络

6. 为什么我的BP神经网络的预测输出结果几乎是一样的呢

最大的可能性是没有归一化。具体原因见下:
下面这个是经典的Sigmoid函数的曲线图:

如果不进行归一化,则过大的输入x将会导致Sigmoid函数进入平坦区,全部趋近于1,即最后隐层的输出全部趋同。输出层是个purelin,线性组合后的输出层输出当然也全是几乎相同的了。

使用matlab进行归一化通常使用mapminmax函数,它的用法:
[Y,PS] = mapminmax(X,YMIN,YMAX)——将数据X归一化到区间[YMIN,YMAX]内,YMIN和YMAX为调用mapminmax函数时设置的参数,如果不设置这两个参数,这默认归一化到区间[-1, 1]内。标准化处理后的数据为Y,PS为记录标准化映射的结构体。我们一般归一化到(0,1)区间内。

7. bp算法在深度神经网络上为什么行不通

BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想,不再往下进行计算了,所以不适合深度神经网络。
BP算法存在的问题:
(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小。
(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生)。
(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习。

深度神经网络的特点:

多层的好处是可以用较少的参数表示复杂的函数。
在监督学习中,以前的多层神经网络的问题是容易陷入局部极值点。如果训练样本足够充分覆盖未来的样本,那么学到的多层权重可以很好的用来预测新的测试样本。
非监督学习中,以往没有有效的方法构造多层网络。多层神经网络的顶层是底层特征的高级表示,比如底层是像素点,上一层的结点可能表示横线,三角; 而顶层可能有一个结点表示人脸。一个成功的算法应该能让生成的顶层特征最大化的代表底层的样例。
如果对所有层同时训练,时间复杂度会太高; 如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合。

bp算法在深度神经网络上为什么行不通

8. bp神经网络算法介绍 bp神经网络算法简介

1、BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。
 
 2、BP神经网络算法是在BP神经网络现有算法的基础上提出的,是通过任意选定一组权值,将给定的目标输出直接作为线性方程的代数和来建立线性方程组,解得待求权,不存在传统方法的局部极小及收敛速度慢的问题,且更易理解。