`
cocoIT
  • 浏览: 51024 次
  • 性别: Icon_minigender_1
  • 来自: 福建
文章分类
社区版块
存档分类
最新评论

BP神经网络理论

 
阅读更多

科普:神经网络是一种运算模型,由大量的节点(或称“神经元”,或“单元”)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。人工神经网络通常是通过一个基于数学统计学类型的学习方法(Learning Method)得以优化,所以人工神经网络也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。

单个神经元(理解神经网络第一步):

  • a1~an为输入向量的各个分量
  • w1~wn为神经元各个突触的权值
  • b为偏置bias,或者称之为阈值(threshold
  • f为传递函数,通常为非线性函数。一般有traingd(),tansig(),hardlim()。以下默认为hardlim()
  • t为神经元输出

数学表示

  • 向量W为权向量
  • 向量A为输入向量,做内积需要用到转置
  • b为偏置(bias),或者称之为阈值(threshold)
  • f为传递函数,也即激励函数

带有 sigma 函数(顶部)和 cutoff 函数(底部)

可见,一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。

单个神经元的作用:把一个n维向量空间用一个超平面分割成两部分(称之为判断边界),给定一个输入向量,神经元可以判断出这个向量位于超平面的哪一边。(SVM也即是做的这部分工作,所以说,当单个神经元的时候,BP神经网络做的工作与SVM类似。该超平面的方程:WXT + b = 0)

  • 向量W为权向量
  • 向量X为输入向量
  • b为偏置(bias),或者称之为阈值(threshold)

首先解释一下单个神经元如何进行分类判断:

引入一个阈值逻辑单元(Threshold Logic Unit,TLU)的名词,它可以输入一组加权系数的量,对它们进行求和,如果这个和达到或者超过了某个阈值,输出一个量。

让我们用符号标注这些功能,首先,有输入值以及它们的权系数:X1, X2, ..., Xn和W1, W2,..., Wn。接着是求和计算出的Xi*Wi,产生了激发层a,换一种方法表示:

a = (X1 * W1)+(X2 * W2)+...+(Xi * Wi)+...+ (Xn * Wn)

阈值称为theta。最后,输出结果y。当a >=theta时y=1,反之y=0。请注意输出可以是连续的,因为它也可以由一个squash函数s(或sigma)判定,该函数的自变量是a,函数值在0和1之间,y=s(a)。

  假设一个 TLU 有两个输入值,它们的权系数等于 1,theta 值等于 1.5。当这个 TLU 输入 <0,0>、<0,1>、<1,0> 和 <1,1> 时,它的输出分别为 0、0、0、1。TLU 将这些输入分为两组:0 组和 1 组。就像懂得逻辑连接(布尔运算 AND)的人脑可以类似地将逻辑连接的句子分类那样,TLU 也懂得一点逻辑连接之类的东西。

神经网络的学习是模仿大脑调节神经网络连接的原理。TLU通过改变它的权值以及阈值来进行学习。回想上面,我们看到SUM()>=theta时候,TLU在临界点是输出的是1而不是0,这就相当于当SUM(Wi * Xi) + (-1 * theta) >=0的时候。这时候,我们把-1当做是一个常量输入,而他的权系数thetaθ在学习过程(或者说是训练过程)中进行调整。这样,当 SUM(X i* W i)+ (-1 * theta) >= 0 时,y=1,反之 y=0。

在培训过程中,神经网络输入:

  1. 一系列需要分类的术语示例X(input)
  2. 它们的正确分类或者目标Target

这样的输入可以看成一个向量:<X 1, X 2, ..., X n, theta, t>,这里 t 是一个目标或者正确分类。神经网络用这些来调整权系数,其目的使培训中的目标与其分类相匹配。因为神经网络是有指导的培训。或许你现在会问,神经网络是如何通过“调整权系数”来进行学习的?也即神经网络的学习规则。下面介绍一下:权系数的调整有一个学习规则,一个理想化的学习算法如下所示:

理想化的学习算法 fully_trained = FALSE
DO UNTIL (fully_trained):
    fully_trained = TRUE
    FOR EACH training_vector = <X1, X2, ..., Xn, theta, target>::
                               # Weights compared to theta
        a = (X1 * W1)+(X2 * W2)+...+(Xn * Wn) - theta
        y = sigma(a)
        IF y != target:
            fully_trained = FALSE
        FOR EACH Wi:
        MODIFY_WEIGHT(Wi)      # According to the training rule
    IF (fully_trained):
        BREAK

有一条似乎合理的规则是基于这样一种思想,即权系数和阈值的调整应该由分式 (t - y) 确定。这个规则通过引入 alpha (0 < alpha < 1) 完成。我们把 alpha 称为 学习率。W i 中的更改值等于 (alpha * (t - y)* Xi)。当 alpha 趋向于 0 时,神经网络的权系数的调整变得保守一点;当 alpha 趋向于 1 时,权系数的调整变得激进。一个使用这个规则的神经网络称为 感知器,并且这个规则被称为感知器学习规则。概念一下貌似太多,针对单节点的描述可以暂时到此,对于我们的主题BP网络的学习规则接下来将会描述。

神经元网络:

单层神经元网络:是最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每一个神经元都会产生一个标量结果,所以单层神经元的输出是一个向量,向量的维数等于神经元的数目。 示意图:

多层神经元网络(BP网络图)

BP (Back Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。由上图可知,BP神经网络是一个三层的网络:

  • 输入层(input layer)输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;
  • 隐藏层(Hidden Layer):中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程
  • 输出层(Output Layer):顾名思义,输出层向外界输出信息处理结果

  当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

  好了,以上对于神经网络的结构以及各个组件之间的运行时关系描述到此为止,那么,现在重要的是:具体是如何在误差反向传播的过程中,对各个层权系数进行调整?规则是什么?总结上面,调整的目的即是每次训练后减少误差。可以使用最小二乘法或者是梯度下降算法。首先需要介绍一下Delta学习规则

关于 delta 规则

感知器培训规则是基于这样一种思路——权系数的调整是由目标和输出的差分方程表达式决定。而delta规则是基于梯度降落(也即梯度下降)这样一种思路。在权系数的调整中,神经网络将会找到一种将误差减少到最小的权系数的分配方式。梯度下降参考WIKI。这里不再摘抄。

为了便于说明,将我们的网络限制为没有隐藏节点,但是可能会有不止一个的输出节点。

设p是一组培训中的一个元素,t(p,n)是相应的输出节点 n 的目标。设y(p,n)为经过神经网络处理后的结果,前面提到过的squash函数s决定(还记得我们前面提到说这个函数只是为了将连续的输出对应到我们不连续的分类target么?这个函数本身与神经网络没有关系哈),这里a(p,n)是与p相关的n的激活函数,或者用(p,n) =s(a(p,n))表示为与p相关的节点n的squash过的激活函数。

为网络设定权系数(每个Wi),也为每个p和n建立t(p,n)与 y(p,n)的差分这就意味着为每个p设定了网络全部的误差(因为通过这个P求出来的结果有误差,那么久要更新所有的权系数)。因此对于每组权系数来说有一个平均误差。但是 delta 规则取决于求平均值方法的精确度以及误差。我们先不讨论细节问题,只是说一些与某些p和n相关的误差:1/2*square( t(p,n) - y(p,n) );现在对于每个权系数Wi,平均误差定义如下:

sum = 0
FOR p = 1 TO M:         # M is number of training vectors
    FOR n = 1 TO N:     # N is number of output nodes
        sum = sum + (1/2 * (t(p,n)-y(p,n))^2)
average = 1/M * sum

delta 规则就是依据这个误差的定义来定义的。因为误差是依据那些培训向量来说明的,delta 规则是一种获取一个特殊的权系数集以及一个特殊的向量的算法。而改变权系数将会使神经网络的误差最小化。我们不需要讨论支持这个算法的微积分学,只要认为任何Wi发生的变化都是如下所示就够了:

alpha * s'(a(p,n)) * (t(p,n) - y(p,n)) * X(p,i,n)

X(p,i,n)是输入到节点n的p中的第i个元素,alpha是已知的学习率。最后 s'(a(p,n))是与p相关的第n个节点激活的 squashing 函数的变化(派生)率,这就是 delta 规则。

最后说说:梯度下降算法对学习速率alpha的值非常敏感,学习速率的值越大,步长越大收敛的速度就会越快。学习速率越小,步长就小,需要迭代的次数就会多些。当alpha非常小的时候,权系数向量接近某个将误差最小化的向量。用于权系数调节的基于delta规则的算法就是如此。

继续回到BP神经网络的讨论,反向传播这一算法把支持delta规则的分析扩展到了带有隐藏节点的神经网络。为了理解这个问题,设想Bob给Alice讲了一个故事,然后Alice又讲给了TedTed检查了这个事实真相,发现这个故事是错误的。现在 Ted 需要找出哪些错误是Bob造成的而哪些又归咎于Alice。当输出节点从隐藏节点获得输入,网络发现出现了误差,权系数的调整需要一个算法来找出整个误差是由多少不同的节点造成的,网络需要问,“是谁让我误入歧途?到怎样的程度?如何弥补?”这时,网络该怎么做呢?

同样源于梯度降落原理,在权系数调整分析中的唯一不同是涉及到t(p,n)与y(p,n)的差分。通常来说Wi的改变在于:

alpha * s'(a(p,n)) * d(n) * X(p,i,n)

其中d(n)是隐藏节点n的函数,让我们来看:

  1. n 对任何给出的输出节点有多大影响;
  2. 输出节点本身对网络整体的误差有多少影响。

一方面,n 影响一个输出节点越多,n 造成网络整体的误差也越多。另一方面,如果输出节点影响网络整体的误差越少,n 对输出节点的影响也相应减少。这里d(j)是对网络的整体误差的基值,W(n,j) 是 n 对 j 造成的影响,d(j) * W(n,j) 是这两种影响的总和。但是 n 几乎总是影响多个输出节点,也许会影响每一个输出结点,这样,d(n) 可以表示为:

SUM(d(j)*W(n,j))

这里j是一个从n获得输入的输出节点,联系起来,我们就得到了一个培训规则。

第1部分:在隐藏节点n和输出节点j之间权系数改变,如下所示:

alpha * s'(a(p,n))*(t(p,n) - y(p,n)) * X(p,n,j)

第 2 部分:在输入节点i和输出节点n之间权系数改变,如下所示:

alpha * s'(a(p,n)) * sum(d(j) * W(n,j)) * X(p,i,n)

这里每个从n接收输入的输出节点j都不同。关于反向传播算法的基本情况大致如此。

使误差小到适当的程度要遵循的步骤

第 1 步:输入培训向量。

第 2 步:隐藏节点计算它们的输出

第 3 步:输出节点在第 2 步的基础上计算它们的输出。

第 4 步:计算第 3 步所得的结果和期望值之间的差。

第 5 步:把第 4 步的结果填入培训规则的第 1 部分。

第 6 步:对于每个隐藏节点 n,计算 d(n)。

第 7 步:把第 6 步的结果填入培训规则的第 2 部分。

通常把第 1 步到第 3 步称为 正向传播,把第 4 步到第 7 步称为 反向传播。反向传播的名字由此而来。

参考资料:

http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html神经网络编程入门,这儿有一个BP的matlab程序示例。

http://zh.wikipedia.org/wiki/最速下降法梯度下降法

http://www.ibm.com/developerworks/cn/linux/other/l-neural/index.html神经网络介绍

http://en.wikipedia.org/wiki/Backpropagationwiki上面的BP介绍

分享到:
评论

相关推荐

    BP神经网络理论基础介绍.ppt

    BP神经网络理论基础介绍 BP神经网络理论基础介绍是人工神经网络的基础理论,涵盖了人工神经元的基本构成、激活函数、神经网络的基本特征、BP神经网络的基本概念等。 人工神经元的基本构成包括输入、联接权、网络...

    MATLAB数学建模培训 BP神经网络理论基础介绍 共73页.ppt

    MATLAB数学建模培训 BP神经网络理论基础介绍 本资源是 MATLAB 数学建模培训 BP 神经网络理论基础介绍,共 73 页 PPT。该资源涵盖了神经网络的基础理论,包括人工神经元的基本构成、激活函数、神经网络的基本特征、...

    基于BP神经网络理论的岩石硬度识别.pdf

    基于BP神经网络理论的岩石硬度识别 本文基于BP神经网络理论,旨在解决岩石硬度识别问题。岩石硬度是露天矿山爆破参数设计的重要依据,准确判断岩石硬度对于爆破参数设计具有重要意义。 BP神经网络是一种常用的...

    BP神经网络理论与实验结果共享.pdf

    BP神经网络理论与实验结果共享 BP神经网络是当前人工智能领域最流行的神经网络模型之一,它的理论基础来自于生物神经网络的研究。BP神经网络是一种多层前向神经网络,名称来自于网络权值的调整规则采用的是后向...

    BP神经网络理论-总结篇

    **BP神经网络理论** BP神经网络,全称Backpropagation Neural Network,是人工神经网络(Artificial Neural Network, ANN)的一种重要类型,尤其在解决复杂非线性问题时展现出强大的能力。这一网络模型的理论基础...

    基于BP神经网络理论的注浆材料模型研究.pdf

    《基于BP神经网络理论的注浆材料模型研究》是一篇探讨如何运用BP神经网络理论来构建注浆材料强度预测模型的科研论文。该研究以某矿的现场注浆材料正交试验数据作为训练样本,利用28天后结石体强度作为评价标准,旨在...

    灰色理论和BP神经网络理论在地铁深基坑变形预测方面的应用.pdf

    本文主要探讨了灰色理论和BP神经网络理论在这方面的应用,并通过实际案例进行了预测模型的对比分析。 灰色理论是一种处理不完全信息和不确定性的系统理论,尤其适用于小样本数据的建模。在地铁深基坑变形预测中,...

    基于灰色-BP神经网络理论的上染率模型研究.pdf

    《基于灰色-BP神经网络理论的上染率模型研究》这篇论文主要探讨了如何利用灰色系统理论和BP神经网络构建一个精确的上染率模型,用于预测棉织物染色过程中的上染率。上染率是衡量染色质量和染料利用率的关键指标,...

    BP神经网络理论与实验结果.rar

    BP神经网络理论与实验结果.rar

    实验报告BP神经网络对蝴蝶花进行分类.doc

    实验报告的最后部分是结果分析和体会,这部分涉及对实验结果的解释,以及对所提出问题的深入思考,以增强对BP神经网络理论和实践的理解。总的来说,这个实验提供了一个实用的平台,让学生将理论知识应用于实际问题,...

    基于BP神经网络理论的物流金融风险评价模型.pdf

    基于BP神经网络理论的物流金融风险评价模型.pdf

    基于BP神经网络的人口预测代码_基于BP神经网络的人口预测代码_人口预测_BP人口预测_BP预测_bp预测人口_

    另一方面,"www.downma.com.txt"文件可能是文档的来源信息或者额外的参考资料,可能包含有关BP神经网络理论的更多解释,或者提供其他人口预测方法的链接。 总的来说,利用BP神经网络进行人口预测是一项涉及数据处理...

    BP神经网络优化PID程序,bp神经网络pid控制,C,C++

    BP神经网络优化PID程序是现代控制理论与人工智能技术的结合,它克服了传统PID参数整定的局限性,提高了控制系统的适应性和精度。通过对神经网络的学习和理解,我们可以设计出更高效、更智能的控制策略,进一步提升...

    遗传算法优化BP神经网络

    【遗传算法优化BP神经网络】是一种融合了生物进化理论与人工神经网络的智能优化方法,主要应用于解决非线性函数的拟合问题。在实际应用中,传统的BP(Backpropagation)神经网络可能存在收敛速度慢、易陷入局部极小...

    MATLAB神经网络30个案例MATLAB代码

    根据遗传算法和BP神经网络理论,在MATLAB软件中编程实现基于遗传算法优化的BP神经网络非线性系统拟合算法。 第4章 神经网络遗传算法函数极值寻优——非线性函数极值寻优36 对于未知的非线性函数,仅通过函数的输入...

    神经网络学习之BP神经网络.pdf

    BP神经网络,全称为Backpropagation Neural Network,是人工神经网络的一种类型,广泛应用于各种预测、分类和模式识别任务。该网络模型最早由Rumelhart、Hinton和Williams等人在1986年提出,其核心是通过反向传播...

    BP神经网络车牌识别!

    总的来说,这个项目涵盖了神经网络理论、MATLAB编程、图像处理和机器学习实践等多个方面,是一个很好的学习和研究案例。通过理解和实践这个项目,你可以深入理解BP神经网络的工作机制,并掌握其在实际问题中的应用。

Global site tag (gtag.js) - Google Analytics