1986年Rumelhart和McCelland在《并行分布式处理》中提出了BP算法,即非线性连续变换函数的多层感知器网络误差反向传播算法。

该算法的思想是:学习过程分为信号的正向传播与误差的反向传播两个过程。

正向传播时,输入样本从输入层传入,经各隐含层逐层处理后传向输出层,若输出层的实际输出与期望输出不符,则转入误差反向传播阶段。

误差反传是将输出误差以某种形式通过隐含层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层的误差信号,此信号即作为修正各单元权值的依据。

上述两个过程周而复始地进行,直到网络输出的误差减少到可接受的程度或达到预先设置的学习次数为止。

下面以三层感知器网络(单隐含层)为例:

输入向量X=(x1,x2,...,xi,...,xn)T,图中x0=-1是为隐含层神经元引入阈值而设置的;隐含层输出向量Y=(y1,y2,...,yj,...,ym)T,图中y0=-1是为输出层神经元引入阈值而设置的;输出层输出向量O=(o1,o2,...,ok...,ol)T;期望输出向量d=(d1,d2,...,dk,...,dl)T。输入层到隐含层之间的权值矩阵V=(v1,v2,...,vj,...,vm)T,其中vj为神经元j的权向量;隐含层到输出层之间的权值矩阵W=(W1,W2,...,Wk,...,Wl)T,其中Wk为神经元k的权向量。则:

对于输出层:

ok=f(netk)=f(∑wjkyj ) 其中k=1,2,...,l;j=0,1,2,...,m

对于隐含层:

yj=f(netj)=f(∑vijxi ) 其中j=1,2,...,m;i=0,1,2,...,n

设上述式子中的变换函数f(x)=sigmoid(x)=1/(1+e-x),可知f(x)连续可导,且f‘(x)=f(x)[1-f(x)],

BP算法的学习规则如下:

网络的输出误差E=(d-o)2/2=∑(dk-ok)2 *1/2,其中k=1,2,...,l,

则将误差展开至隐含层:

E=∑[dk-f(netk)]2 *1/2=∑[dk-f(∑wjkyj)]2 *1/2,其中k=1,2,...,l;j=0,1,2,...,m

将误差展开至输入层:

E=∑[dk-f(∑wjkf(netj))]2 *1/2=∑[dk-f(∑wjkf(∑vijxi))]2 *1/2,其中k=1,2,...,l;j=0,1,2,...,m;i=0,1,2,....,n

由此可见网络误差是各层权值wjk,vij的函数,调整权值即可调整误差,显然权值调整原则是使误差不断减小,可见应使权值的调整量与误差的负梯度成正比,故有:

ΔWjk=-η*∂E/∂Wjk ,j=0,1,2,...,m;k=1,2,...,l

Δvjk=-η*∂E/∂vij ,i=0,1,2,...,n;j=1,2,...,m

负号表示负梯度,η为[0,1]常数,反映了网络的学习速率,可见BP采用的是连续型感知器学习规则δ类。

综上,各层间权值调整公式如下:

输出层与隐含层间权值调整公式:

w(t+1)=w(t)+ΔW=w(t)+η*(d-O)*O*(1-O)*Y

V(t+1)=V(t)+ΔV=V(t)+η*([(d-O)*O*(1-O)]W)*Y*(1-Y)*X

BP算法的更多相关文章

  1. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  2. Backpropagation反向传播算法(BP算法)

    1.Summary: Apply the chain rule to compute the gradient of the loss function with respect to the inp ...

  3. stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

    在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...

  4. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  5. 多层感知机及其BP算法(Multi-Layer Perception)

    Deep Learning 近年来在各个领域都取得了 state-of-the-art 的效果,对于原始未加工且单独不可解释的特征尤为有效,传统的方法依赖手工选取特征,而 Neural Network ...

  6. 关于BP算法在DNN中本质问题的几点随笔 [原创 by 白明] 微信号matthew-bai

       随着deep learning的火爆,神经网络(NN)被大家广泛研究使用.但是大部分RD对BP在NN中本质不甚清楚,对于为什这么使用以及国外大牛们是什么原因会想到用dropout/sigmoid ...

  7. 人工智能起步-反向回馈神经网路算法(BP算法)

    人工智能分为强人工,弱人工. 弱人工智能就包括我们常用的语音识别,图像识别等,或者为了某一个固定目标实现的人工算法,如:下围棋,游戏的AI,聊天机器人,阿尔法狗等. 强人工智能目前只是一个幻想,就是自 ...

  8. 误差逆传播(error BackPropagation, BP)算法推导及向量化表示

    1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes ...

  9. 神经网络BP算法C和python代码

    上面只显示代码. 详BP原理和神经网络的相关知识,请参阅:神经网络和反向传播算法推导 首先是前向传播的计算: 输入: 首先为正整数 n.m.p.t,分别代表特征个数.训练样本个数.隐藏层神经元个数.输 ...

  10. 多层神经网络BP算法 原理及推导

    首先什么是人工神经网络?简单来说就是将单个感知器作为一个神经网络节点,然后用此类节点组成一个层次网络结构,我们称此网络即为人工神经网络(本人自己的理解).当网络的层次大于等于3层(输入层+隐藏层(大于 ...

随机推荐

  1. React 实现一个漂亮的 Table

    概述 对于企业级后台产品来说,Table 应该是使用最频繁的组件了,它通常比 Form 和 Chart 的使用还频繁.对于这么一个常用的组件,我们决定要把它从 RSuite 中单独出来开发,并且要具有 ...

  2. CSS-三栏响应式布局(左右固宽,中间自适应)的五种方法

    代码: <!-- 1 float --> <h3 class="block">第一种方法-float</h3> <div class=&q ...

  3. 学习python的*args和 **kwargs

    *args表示任何多个无名参数,它是一个tuple(元组):**kwargs表示关键字参数,它是一个dict(字典) def foo(*args, **kwargs): print 'args = ' ...

  4. Windows下mysql忘记root密码

    1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd窗口,切换到mysql的bin目录,运行命令: mysql ...

  5. jQuery控制a标签不可点击 不跳转

    jquery禁用a标签方法1 01 02 03 04 05 06 07 08 09 10 11 12 $(document).ready(function () {         $("a ...

  6. 《深入浅出MySQL》之SQL基础

    SQL是Structure Query language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言.在众多开源数据中,MySQL正式其中最杰出的代表,MySQL是由三个瑞典人于20世纪 ...

  7. mysql添加外键约束变为索引

    今天有位自己填上一坑:mysql储存引擎 原因就是数据库表引擎为:MyISAM,建立主外键关系需要是InnoDB: 解决方案:alter  table table_name1  engine=inno ...

  8. Java学习10——package和import

    package和import语句 为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间,使用时,import引入相应package ...

  9. 201521123113 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. -继承设计的技巧 1.将公共操作和属性放在父类 2.不要使用protected修 ...

  10. Python可视化----------matplotlib.pylot

    1 >>> import matplotlib.pyplot as plt 2 >>> plt.axis([0,5,0,20]) 3 [0, 5, 0, 20] 4 ...