`
lzj0470
  • 浏览: 1273246 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

BP算法和数学原理

阅读更多
网络上有很多,不过公式很多不太清楚,这里重新整理一下。这样以后开发程序就可以直接翻译过去了。 BP网络输入层隐层(中间层)输出层 坐标初始化(-3,3,-3,3) //坐标(2, 1, "labels", 1) 线条颜色 = "green" strokewidth = "2" 线([-2,2], [0,2],"点箭头") 线([-2,2], [0,0],"点箭头") 线([-2,2], [0,-2],"点箭头") 线([-2,0], [0,2],"点箭头") 线([-2,0], [0,0],"点箭头") 线([-2,0], [0,-2],"点箭头") 线([-2,-2], [0,2],"点箭头") 线([-2,-2], [0,0],"点箭头") 线([-2,-2], [0,-2],"点箭头") 线([0,2], [2,2],"点箭头") 线([0,2], [2,0],"点箭头") 线([0,2], [2,-2],"点箭头") 线([0,0], [2,2],"点箭头") 线([0,0], [2,0],"点箭头") 线([0,0], [2,-2],"点箭头") 线([0,-2], [2,2],"点箭头") 线([0,-2], [2,0],"点箭头") 线([0,-2], [2,-2],"点箭头") 线([2,2], [2,2],"点箭头") 线([2,0], [2,0],"点箭头") 线([2,-2], [2,-2],"点箭头") 点([-2,-0.5], "open") 点([-2,-1], "open") 点([-2,-1.5], "open") 点([0,-0.5], "open") 点([0,-1], "open") 点([0,-1.5], "open") 文字([-1,2.5], "BP网络") 文字([-2.5,-2.5], "输入层") 文字([0,-2.5], "隐层(中间层)") 文字([2.5,-2.5], "输出层") BP网络原理
设有一个m层的神经网络,并在输入层加有样本X;设第k层的i神经元的输入总和表示为Uik,输出Xik;从第k-1层的第j个神经元到第k层的第i个神经元的权系数为Wij各个神经元的激发函数为f,则各个变量的关系可用下面有关数学式表示:
Xik=f(Uik)
Uik=∑jWijXjk-1

反向传播算法分二步进行,即正向传播和反向传播。这两个过程的工作简述如下。

1.正向传播

输入的样本从输入层经过隐单元一层一层进行处理,通过所有的隐层之后,则传向输出层;在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。

2.反向传播

反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。

BP算法

BP算法实质是求取误差函数的最小值问题。这种算法采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数。

为了说明BP算法,首先定义误差函数e。取期望输出和实际输出之差的平方和为误差函数,则有:


e=12∑i(Xim+Yi)2 ------- (1)

其中:Yi是输出单元的期望值;它也在这里用作教师信号;
Xim是实际输出;因为第m层是输出层。


由于BP算法按误差函数e的负梯度方向修改权系数,故权系数Wij的修改量ΔWij,和e

ΔWij≅-∂e∂Wij
也可以写为: ΔWij≅-η∂e∂Wij 其中 η为学习速率,即步长
接下来我们算∂e∂Wij


∂e∂Wij=∂e∂Uik⋅Uik∂Wij

由于
Uik∂Wij=∑lWilXlk-1∂Wij=Xjk-1
所以
∂e∂Wij=∂e∂Uik⋅Xjk-1
从而有
ΔWij=-η∂e∂Wij=-η∂e∂Uik⋅Xjk-1


令 dik=∂e∂Uik
则学习公式为: ΔWij=-ηdik⋅Xjk-1 其中: η 为学习速率,即步长,一般取0-1间的数。
从上面可知,dik 实际仍末给出明显的算法公式
下面求 dik 的计算公式。
dik=∂e∂Uik=∂e∂Xik⋅∂Xik∂Uik
由前面可以知 ∂Xik∂Uik=f'(Uik)
为了方便进行求导,取f为连续函数。一般取非线性连续函数,例如Sigmoid函数。当取f为非对称Sigmoid函数时,有:
f(Uik)=11+exp(-Uik)
则有:
f'(Uik)=f(Uik)(1-f(Uik))=Xik(1-Xik)

如果 k=m ,则是输出层,这时有 Yi 是输出期望值,它是常数。由(1)可以知

∂e∂Xik=∂e∂Xim=(Xim-Yi)

从而有 dim=Xim(1-Xim)(Xim-Yi)


2.如果 k<m ,则该层是隐层.这时应考虑上一层对它的作用,故有:
∂eXik=∑l⋅∂e∂Ulk+1⋅∂Ulk+1Xik

由于 ∂e∂Ulk+1=dlk+1
而且 ∂Ulk+1∂Xik=∂∑WljXjk∂Xik=Wli
故而有 ∂e∂Xik=∑l⋅Wl,i⋅dlk+1
最后有 ∂e∂Xik=∑lWl,i⋅dlk+1 dik=∑l∂e∂Xik⋅∂Xik∂Uik=Xik(1-Xik)∑lWli⋅dlk+1

从上述过程可知:多层网络的训练方法是把一个样本加到输入层,并根据向前传播的规则:
xik=f(Uik)
不断一层一层向输出层传递,最终在输出层可以得到输出Xim。
把 Xim 和期望输出 Yi 进行比较.如果两者不等,则产生误差信号 e ,接着则按下面公式反向传播修改权系数:
ΔWij=-ηdikXjk-1
其中
dim=Xim(1-Xim)(Xim-Yi)
dik=Xik(1-Xik)∑lWl,idlk+1

上面公式中,求取本层dik时,要用到高一层的dik+1;可见,误差函数的求取是从输出层开始,到输入层的反向传播过程。在这个过程中不断进行递归求误差。

通过多个样本的反复训练,同时向误差渐渐减小的方向对权系数进行修正,以达最终消除误差。从上面公式也可以知道,如果网络的层数较多时,所用的计算量就相当可观,故而收敛速度不快。

为了加快收敛速度,一般考虑上一次的权系数,并以它作为本次修正的依据之一,故而有修正公式:
ΔWij(t+1)=-ηdik⋅Xjk+1+αΔWij(t)


三、BP算法的执行步骤

在反向传播算法应用于前馈多层网络时,采用Sigmoid为激发函数时,可用下列步骤对网络的权系数 Wij 进行递归求取。注意对于每层有n个神经元的时候,即有i=1,2,…,n;j=1,2,…,n。对于第k层的第i个神经元,则有n个权系数 Wi,1,Wi,2,...,Wi,n,另外取多—个 Wi,n+1用于表示阀值θi;并且在输入样本X时,取 X=(X1,X2,...,Xn,1) 。

算法的执行的步骤如下:

1.对权系数 Wi,j 置初值。
对各层的权系数 Wi,j 置一个较小的非零随机数,但其中 Wi,n+1=-θ。

2.输入一个样本 X=(Xl,X2,...,Xn,1) ,以及对应期望输出 Y=(Y1,Y2,...,Yn) 。

3.计算各层的输出

对于第k层第i个神经元的输出 Xik,有:
Uik=∑jn+1WijXjk-1,Xn+1k-1=1,Wi,n+1=-θ
Xik=f(Uik)

4.求各层的学习误差 dik
对于输出层有 k=m,有
dim=Xim(1-Xim)(Xim-Yi)
对于其他各层,有
dik=Xik(1-Xik)∑lWl,idlk+1

5.修正权系数 Wi,j 和阀值 θ
由前面知:
Wi,j(t+1)=Wi,j(t)-η⋅dik⋅Xjk-1
增加动量项有:
Wi,j(t+1)=Wi,j(t)-η⋅dik⋅Xjk-1+αΔWij(t)
其中:
ΔWi,j(t)=-ηdik⋅Xjk+1+αΔWi,j(t-1)=Wi,j(t)-Wi,j(t-1)

6.当求出了各层各个权系数之后,可按给定品质指标判别是否满足要求。如果满足要求,则算法结束;如果未满足要求,则返回(3)执行。

这个学习过程,对于任一给定的样本 Xp=(X1p,X2p,...,Xnp,1) 和期望输出 Yp=(Y1p,Y2p,...,Ynp) 都要执行,直到满足所有输入输出要求为止

转载地址:http://www.mathfan.com/CMS/BP
分享到:
评论

相关推荐

    BP算法神经网络.zip

    在这个案例中,作者选择不使用这些高级框架,而是手动实现BP算法,这有助于深入理解算法背后的数学原理。 至于json格式文件,它被用来存储习得的神经网络结构,包括权重和阈值。JSON(JavaScript Object Notation)...

    BP神经网络算法原理和详细推导流程

    BP神经网络(Back Propagation Neural Network)算法是一种经典的多层前馈神经网络训练算法...学习BP神经网络算法,理解其原理和数学细节,对于在数据分析、图像处理、自然语言处理等领域中解决实际问题具有重要意义。

    BP算法的原理及应用(手写数字识别及智能小车寻径问题)-机器学习课程报告及仿真程序.rar

    本文简要介绍了BP算法的基本思想、数学模型、算法推导及算法的实现过程。另外,本文给出了BP算法的两个应用,其一为手写数字的识别问题,其二为智能小车自动寻经问题。通过Matlab仿真实验表明,用BP神经网络可以很好...

    基于BP算法的多层感知器代码(Matlab)

    ### 基于BP算法的多层感知器代码解析与知识点总结 #### 一、BP算法简介 反向传播(Back Propagation, ...通过对这些知识点的深入探讨,读者可以更好地理解和掌握BP算法的工作原理及其在实际应用中的灵活性和有效性。

    BP算法的java实现

    BP算法的JAVA实现,BP神经网络的数学原理及其算法实现,实验使用IRIS数据集,BP神经网络,BP即Back Propagation的缩写,也就是反向传播的意思,顾名思义,将什么反向传播?文中将会解答。不仅如此,关于隐层的含义...

    几个BP算法matlab实现程序

    MATLAB作为一种强大的数学计算和可视化工具,是实现BP算法的理想平台。本资料提供的是几种MATLAB实现BP算法的程序编程,旨在帮助初学者更好地理解和应用BP算法。 **BP算法基础** BP算法基于反向传播的思想,它通过...

    BP算法Python代码

    #### 二、BP算法的数学原理 BP算法的核心在于梯度下降法的应用,其目标是最小化损失函数(如均方误差),具体步骤包括: 1. **初始化**:随机初始化网络中的权重。 2. **正向传播**:根据当前权重计算出网络的实际...

    BP曲面拟合(BP算法拟合曲面)

    理解BP算法的工作原理,如何设计合适的网络结构,以及如何有效地利用OpenGL来展示结果,都是完成这个任务的关键技能。 总的来说,BP算法拟合曲面是一种将深度学习技术应用于几何建模的有效方法,结合OpenGL的可视化...

    BP算法推导及过程代码.7z

    BP算法,全称为Backpropagation(反向传播)算法,是神经...总结,BP算法是神经网络学习的关键,其理论推导和MATLAB实现有助于深入理解神经网络的工作原理。通过实践案例,可以更好地掌握如何运用BP算法解决实际问题。

    C++,Fortran和Matlab分别实现的bp算法程序

    理解并实现BP算法不仅需要掌握编程语言的基本语法,还需要对神经网络的工作原理、梯度下降法以及损失函数有深入的理解。在实际应用中,往往需要根据任务特点和计算资源灵活选择合适的实现方式。

    BP算法异或运算的实现

    **BP算法的工作原理** BP算法主要包含两个阶段:前向传播和反向传播。在前向传播阶段,输入信号通过神经元逐层传递,每个神经元根据当前权重和激活函数计算输出。反向传播阶段则根据预测输出与实际输出的差异(即...

    BP(梯度回传)算法的详解

    BP算法的数学推导: 1. 链式法则:链式法则是BP算法的基础,它可以用来计算复合函数的梯度。 2. 参数梯度:参数梯度是用来更新权重和偏置的,参数梯度可以通过链式法则来计算。 3. 参数更新:参数更新是通过梯度...

    用BP算法实现分类的源程序bp510

    MATLAB是一个强大的数学计算环境,其内置的神经网络工具箱提供了实现BP算法的便捷接口。在MATLAB中实现BP神经网络的步骤如下: 1. **创建网络**:使用`newff`函数创建BP网络,指定输入层、隐藏层和输出层的节点数。...

    bp.rar_BP_BP matlab_BP算法_BP网络算法_matlab bp

    从标签"bp bp_matlab bp算法 bp网络算法 matlab_bp"中,我们可以看出主要知识点围绕BP神经网络的MATLAB实现展开,包括BP算法的基本原理、网络结构、训练过程以及在MATLAB环境中的编程实现。 压缩包内的文件名称揭示...

    Matlab神经网络工具箱BP算法比较

    综上所述,Matlab神经网络工具箱提供了多种BP算法,每种算法都有其特定的优势和应用场景。理解这些算法的工作原理及其特点,可以帮助我们在面对不同问题时做出更加明智的选择,从而提高神经网络的训练效率和预测准确...

    数学建模算法学习 机器学习算法 BP神经网络基本原理与应用 共47页.ppt

    本文将对BP神经网络的基本原理和应用进行详细的介绍。 一、神经网络的来源 神经网络的来源可以追溯到大脑的神经网络。大脑由10的12次方个神经元组成,每个神经元可以与100到10000个神经元连接,构成一个巨复杂的...

    Matlab实现SAR成像中的BP算法

    首先,理解BP算法的基本原理至关重要。BP算法基于几何成像理论,假设雷达系统和目标之间的相对运动可以精确建模。该算法的主要步骤包括:回波数据预处理、方位向聚焦、距离向聚焦和图像重建。在Matlab中,我们可以...

    神经网络bp算法,C++实现

    **神经网络BP算法详解** ...总的来说,BP算法在C++中的实现是一项涉及数学、编程和机器学习原理的综合任务,需要对这些领域有深入理解。通过合理的设计和优化,我们可以构建一个能够解决复杂问题的神经网络模型。

    压缩感知BP LASSO OMP STOMP算法(内含完整代码,包括DWT.m、fdrthresh.m|FWT_PO.m、SolveBP.m等M文件,有详细注释

    数学上,BP算法通过求解以下L1范数最小化问题来寻找信号的稀疏表示: \[ \min_x ||x||_1 \quad s.t. \quad ||Ax - y||_2 \leq \epsilon \] 其中,\( x \) 是原始信号,\( A \) 是测量矩阵,\( y \) 是测量值,\( \...

    用Matlab写的BP算法识别字符

    在本项目中,我们利用MATLAB这一强大的数学计算和编程环境来实现BP算法,用于字符识别任务。MATLAB以其易读易写的语法和丰富的数学工具库,为实现复杂算法提供了便利。 首先,BP算法的核心思想是通过梯度下降法更新...

Global site tag (gtag.js) - Google Analytics