如果感觉自己看不懂,那就看看我博客的梯度下降法,博文最后的感知机也算最简单的BP神经网络吧,用的也是反馈(w,b):典型梯度下降法

BP网络的结构

BP网络的结构如下图所示,分为输入层(Input),隐含层(Hidden),输出层(Output)。 
输入层的结点个数取决于输入的特征个数。 
输出层的结点个数由分类的种类决定。 
在输入层和输出层之间通常还有若干个隐含层,至于隐含层的个数以及每个隐含层的结点个数由训练工程师的经验来人为设定。 
链接A曾提到由万能逼近定理,一般一个隐含层就足够了。且这个隐含层一般结点个数为: 
 。 
其中:I为输入层结点个数,O为输出层结点个数,a为1~10范围内的调节常数。

就车牌识别中识别数字0~9的BP网络来说:输入层的每个结点就是的待训练的图像每种特征,常见的车牌数字识别有从上到下的每个结点缩放成规定大小的0~9数字图像的每个像素点值。那么输出的结点就只有0~9十个结点。

输入层与隐含层的权重矩阵记为:WIK,其中隐含层的每个结点与输入层的每个结点都相连,输入层的每个结点与隐含层之间都有一个权重,这样WIK就是一个I*H的矩阵,同理WHO就是一个H*O的矩阵。

为了便于后续公式的推导以及明确各个参数的意义,这里特地说明,如下图: 
输入层的结点个数为I, 
隐含层的结点个数为H, 
输出层的结点个数为O;

设输入层有任一结点i, 
设隐含层有任一结点k, 
设输出层有任一结点j;

其中结点i与结点k之间的权重为Wik开始训练前由人为设定初始值; 
其中结点k与结点j之间的权重为Wkj开始训练前由人为设定初始值;

对于输出层 
设结点j的教师信号为Sj注:教师信号就是实际值(训练值) 
j的当前偏置为Bj开始训练前由人为设定初始值, 
设结点j的初始输出的结果为yj, 
设结点j的最终输出结果为Yj,
注意:Yj是yj经过激励函数作用后的值->     Yj = f(yj)

对于隐含层: 
隐含层没有教师信号, 
设k的当前偏置为Bk开始训练前由人为设定初始值; 
设结点k的初始输出的结果为yk
设结点k的最终输出结果为Yk
注意:Yk是yk经过激励函数作用后的值->   Yk=f(yk)

对于输入层: 
输入层结点没有教师信号,没计算值,没有阈值,只有一个结点值 
结点i的值为Xi,

BP算法思想

激励函数

下面解释为什么每个结点要由一开始的输出结果经过激励函数处理下: 
因为yi其实是由Yi与Bj以及Wij以线性函数的形式得到,而根据整个BP算法设计思想要根据每次结点的输出来偏微分来调整每个结点的权重来实现训练目的(这也就是所谓的梯度下降法),这就需要输出是基于输入的可微分函数,同时为方便归一化的比较输出层每个结点每次输出的结果,就采用下述两种激励函数。

在一般情形下: 

下面对他进行求导,后面解释原理时要用: 

的导数为::

      .................... (X1)   

前向传播

在BP神经网络中,每个节点的输出值是根据上层所有节点的输出值、当前节点与上一层所有节点的权值 和 当前节点的阀值 还有 激活函数来实现的。以上图为例结点k输出值的计算方法: 
 .............................(X2)

        ................ ....................... (X3)

以上图为例结点j输出值的计算方法: 
    ............................(X4)

   .............................................(X5)

其中f为激活函数,就是上面求导的那个函数。

其实,正向传播很简单,就是结点依次执行这两个公式,从输入层到隐含层,从隐含层到输出层。

返向传播

在BP神经网络的输出层,经过网络处理的输入数据的输出结果与标准结果(教师信号)的误差可以用如下的公式来衡量::

    .............................(X6)

网络的返向传播过程就是误差信号的返向传播过程,主要目的就是通过反复修正权值和阀值,使得误差函数值达到最小。而这其中修正权值与阈值的是通过梯度下降法来实现。根据梯度下降法的原理,权值的修正值与误差函数成正比: 

...............................(X7)

对上述公式进行展开与推导: 
 
令:

则:  注:此处少乘以一个α

同样对于Bj有: 

对上述公式进行展开与推导: 
 
同样令:

则: 

由上述公式可以得到输出层结点j到隐含层的返向传播的权重W与偏置B的更新策略如下: 

下面推导隐含层到输入层的权重与偏置的梯度: 

令:

由上述公式可以得到隐含层结点k到输入层的返向传播的权重W与偏置B的更新策略如下: 
  注:此处少了一个σkj 隐藏层到输出层的学习因子

在实际的训练中BP就是不停的迭代实现前向传播与返向传播来修正权重与偏置,得到最终的网络。 
在实际的BP网络测试中,对于一个测试目标提取输入层需要的特征作为输入层结点的值,用上面训练好的网络来进行前向传播,最终输出结点处的值最大的结点,就是这个测试目标的分类。

转载自:http://blog.csdn.net/lanxuecc/article/details/51754838#t0

http://blog.csdn.net/acdreamers/article/details/44657439

BP神经网络的公式推导的更多相关文章

  1. 基于BP神经网络的简单字符识别算法自小结(C语言版)

    本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前面的闲话: 自我感觉自己应该不是一个非常 ...

  2. BP神经网络公式推导及实现(MNIST)

    BP神经网络的基础介绍见:http://blog.csdn.net/fengbingchun/article/details/50274471,这里主要以公式推导为主. BP神经网络又称为误差反向传播 ...

  3. BP神经网络原理及python实现

    [废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...

  4. 神经网络中的BP神经网络和贝叶斯

    1 贝叶斯网络在地学中的应用 1 1.1基本原理及发展过程 1 1.2 具体的研究与应用 4 2 BP神经网络在地学中的应用 6 2.1BP神经网络简介 6 2.2基本原理 7 2.3 在地学中的具体 ...

  5. BP神经网络

    秋招刚结束,这俩月没事就学习下斯坦福大学公开课,想学习一下深度学习(这年头不会DL,都不敢说自己懂机器学习),目前学到了神经网络部分,学习起来有点吃力,把之前学的BP(back-progagation ...

  6. 数据挖掘系列(9)——BP神经网络算法与实践

    神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...

  7. BP神经网络推导过程详解

    BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...

  8. 极简反传(BP)神经网络

    一.两层神经网络(感知机) import numpy as np '''极简两层反传(BP)神经网络''' # 样本 X = np.array([[0,0,1],[0,1,1],[1,0,1],[1, ...

  9.  BP神经网络

     BP神经网络基本原理 BP神经网络是一种单向传播的多层前向网络,具有三层或多层以上的神经网络结构,其中包含输入层.隐含层和输出层的三层网络应用最为普遍. 网络中的上下层之间实现全连接,而每层神经元之 ...

随机推荐

  1. ZOJ - 3216:Compositions (DP&矩阵乘法&快速幂)

    We consider problems concerning the number of ways in which a number can be written as a sum. If the ...

  2. centos配置ruby开发环境(转 )

    转自http://my.oschina.net/u/1449160/blog/260764   1. 安装ruby 1.1 yum安装,版本旧 #yum install ruby ruby-devel ...

  3. 《DSP using MATLAB》Problem 4.15

    只会做前两个, 代码: %% ---------------------------------------------------------------------------- %% Outpu ...

  4. smarty学习——高级知识

    1.Objects 对象 smarty允许通过模板访问PHP对象.有两种方式来访问它们.一种是注册对象到模板,然后通过类似于用户自定义函数的形式来访问它. 另一种方法给模板分配对象,然后通过访问其它赋 ...

  5. MySQLi基于面向对象的编程

    http://blog.csdn.net/koastal/article/details/50650500

  6. 【转】每天一个linux命令(22):find 命令的参数详解

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/16/2773289.html find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使 ...

  7. 【转】每天一个linux命令(16):which命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/08/2759805.html 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面 ...

  8. os层删除与数据库层drop的区别于对策。

    os rm删除的,可以通过os层面恢复(句柄.inode.如果inode没有了可以根据block去重组出来数据文件),也可以通过rman备份还原方式恢复.  db 层面drop删除的 只能不完全恢复( ...

  9. mysql 聚簇索引、非聚簇索引的区别

    索引分为聚簇索引和非聚簇索引. 以一本英文课本为例,要找第8课,直接翻书,若先翻到第5课,则往后翻,再翻到第10课,则又往前翻.这本书本身就是一个索引,即"聚簇索引". 如果要找& ...

  10. php 实现欧拉函数Euler

    欧拉函数ph(n)的意思是所有小于n且与n互质的个数.比如说ph(10) = 4{1,3,7,9与10互质} 代码如下: function Euler($x) { $res = $x; $now = ...