【转】漫谈ANN(2):BP神经网络
上一次我们讲了M-P模型,它实际上就是对单个神经元的一种建模,还不足以模拟人脑神经系统的功能。由这些人工神经元构建出来的网络,才能够具有学习、联想、记忆和模式识别的能力。BP网络就是一种简单的人工神经网络。我们的第二话就从BP神经网络开始漫谈吧。
BP的来源
“时势造英雄”,一个伟大的人物的登场总是建立在历史的需求之下,所以我们剖析一个人,得先看看他的出身时代。同样的道理,在讲BP网络的特性和用途之前,我们需要先了解一下它的来源和诞生原因,以便理解它的重要性。
1.1 最简单的神经网络结构——感知器
在1958年,美国心理学家Frank Rosenblatt提出一种具有单层计算单元的神经网络,称为感知器(Perceptron)。它其实就是基于M-P模型的结构。我们可以看看它的拓扑结构图。

这个结构非常简单,如果你还记得前面所讲的M-P神经元的结构的话,这个图其实就是输入输出两层神经元之间的简单连接(如果忘了可以看看第一话的模型示意图)。
由第一话的(2)中我们知道输入层各节点的输入加权和
我们一般采用符号函数来当作单层感知器的传递函数,即输出
公式(2)可以进一步表达为:
1.2 风中之烛——单层感知器的局限性
虽然单层感知器简单而优雅,但它显然不够聪明——它仅对线性问题具有分类能力。什么是线性问题呢?简单来讲,就是用一条直线可分的图形。比如,逻辑“与”和逻辑“或”就是线性问题,我们可以用一条直线来分隔0和1。
1)逻辑“与”的真值表和二维样本图如图2:

2)逻辑“或”的真值表如图3:

为什么感知器就可以解决线性问题呢?这是由它的传递函数决定的。这里以两个输入分量 x1 和 x2 组成的二维空间为例,此时节点 j 的输出为
所以,方程
确定的直线就是二维输入样本空间上的一条分界线。对于三维及更高维数的推导过程可以参考其他的Tutorials。
如果要让它来处理非线性的问题,单层感知器网就无能为力了。例如下面的“异或”,就无法用一条直线来分割开来,因此单层感知器网就没办法实现“异或”的功能。

仅对线性可分问题具有分类能力,这就是单层感知器的局限所在。显然它能够解决的实际问题是很有限的。也正因为这样,单层感知器在解决实际问题时很少被采用。
1.3 心有余而力不足——多层感知器的瓶颈
既然一条直线无法解决分类问题,当然就会有人想到用弯曲的折线来进行样本分类。我们常常听到一句批评人笨的话“你这人脑袋就是不会转弯!”大意就是如此,脑袋会转弯的人才善于解决问题。所以,人们请来了单层感知器他哥——多层感知器来帮忙。所谓多层感知器,就是在输入层和输出层之间加入隐层,,以形成能够将样本正确分类的凸域。多层感知器的拓扑结构如图5所示。

我们可以比较一下单层感知器和多层感知器的分类能力:

由上图可以看出,随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。
多层感知器确实是非常理想的分类器,但问题也随之而来:隐层的权值怎么训练?对于各隐层的节点来说,它们并不存在期望输出,所以也无法通过感知器的学习规则来训练多层感知器。因此,多层感知器心有余而力不足,虽然武功高强,但却无力可施。
1.4 山重水复疑无路——ANN的低潮期
1966年,Minisky和Papert在他们的《感知器》一书中提出了上述的感知器的研究瓶颈,指出理论上还不能证明将感知器模型扩展到多层网络是有意义的。这在人工神经网络的历史上书写了极其灰暗的一章。对ANN的研究,始于1890年开始于美国著名心理学家W.James对于人脑结构与功能的研究,半个世纪后W.S.McCulloch和W.A.Pitts提出了M-P模型,之后的1958年Frank Rosenblatt在这个基础上又提出了感知器,此时对ANN的研究正处在升温阶段,《感知器》这本书的出现就刚好为这刚刚燃起的人工神经网络之火泼了一大盆冷水。一时间人们仿佛感觉对以感知器为基础的ANN的研究突然间走到尽头,看不到出路了。于是,几乎所有为ANN提供的研究基金都枯竭了,很多领域的专家纷纷放弃了这方面课题的研究。

1.5 柳暗花明又一村——ANN研究的复苏和BP神经网络的诞生
所以说真理的果实总是垂青于能够忍受寂寞的科学家。尽管ANN的研究陷入了前所未有的低谷, 但仍有为数不多的学者忍受住寂寞,坚持致力于ANN的研究。在长达10年的低潮时期之间,相 继有一些开创性的研究成果被提出来,但还不足以激起人们对于ANN研究的热情。一直到上世 纪80年代,两个璀璨的成果诞生了:1982年美国加州理工学院的物理学家John J.Hopfield博 士的Hopfield网络和David E.Rumelhart以及James L.McCelland研究小组发表的《并行分布 式处理》。这两个成果重新激起了人们对ANN的研究兴趣,使人们对模仿脑信息处理的智能计 算机的研究重新充满了希望。
前者暂不讨论,后者对具有非线性连续变换函数的多层感知器的误差反向传播(Error Back Propagation)算法进行了详尽的分析,实现了 Minsky 关于多层网络的设想。Error Back Propagation算法的简称就是BP算法,以BP算法实现的多层感知器网络就是BP网络。
所以,BP网络本质上并不是一个新的网络,而是使用BP学习算法的多层感知器网络。
BP算法的基本思想
前面我们说到,多层感知器在如何获取隐层的权值的问题上遇到了瓶颈。既然我们无法直接得到隐层的权值,能否先通过输出层得到输出结果和期望输出的误差来间接调整隐层的权值呢?BP算法就是采用这样的思想设计出来的算法,它的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。
- 正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。
- 反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
图8就是BP算法的信号流向图。

BP网络特性分析——BP三要素
我们分析一个ANN时,通常都是从它的三要素入手,即1)网络拓扑结构;2)传递函数;3)学习算法。如图9所示。

每一个要素的特性加起来就决定了这个ANN的功能特性。所以,我们也从这三要素入手对BP网络的研究。
3.1 BP网络的拓扑结构
前面已经说了,BP网络实际上就是多层感知器,因此它的拓扑结构和多层感知器的拓扑结构(图5)相同。由于单隐层(三层)感知器已经能够解决简单的非线性问题,因此应用最为普遍。三层感知器的拓扑结构如图10所示。

3.2 BP网络的传递函数
BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算法的时候会进行进一步的介绍。S函数有单极性S型函数和双极性S型函数两种,单极性S型函数定义如下:
其函数曲线如图11所示。

双极性S型函数定义如下:
其函数曲线如图12所示。

3.3 BP网络的学习算法
BP网络的学习算法就是BP算法,又叫 δ 算法(在ANN的学习过程中我们会发现不少具有多个名称的术语), 以三层感知器为例,当网络输出与期望输出不等时,存在输出误差 E ,定义如下
将以上误差定义式展开至隐层,有
进一步展开至输入层,有
由上式可以看出,网络输入误差是各层权值ωjκ、υij的函数,因此调整权值可改变误差 E。 显然,调整权值的原则是使误差不断减小,因此应使权值与误差的梯度下降成正比,即
对于一般多层感知器,设共有 h 个隐层,按前向顺序各隐层节点数分别记为 m1,m2,…,mh,各隐层输出分别记为 y1,y2,…,yh,各层权值矩阵分别记为 W1,W2,…,Wh,Wh+1,则各层权值调整公式为
输出层
第 h 隐层
按以上规律逐层类推,则第一隐层权值调整公式
容易看出,BP学习算法中,各层权值调整公式形式上都是一样的,均由3个因素决定,即:
- 学习率 η
- 本层输出的误差信号 δ
- 本层输入信号 Y(或X)
其中输入层误差信号与网络的期望输出与实际输出之差有关,直接反应了输出误差,而各隐层的误差信号与前面各层的误差信号有关,是从输出层开始逐层反传过来的。
可以看出BP算法属于δ学习规则类,这类算法常被称为误差的梯度下降算法。δ学习规则可以看成是Widrow-Hoff(LMS)学习规则的一般化(generalize)情况。LMS学习规则与神经元采用的变换函数无关,因而不需要对变换函数求导,δ学习规则则没有这个性质,要求变换函数可导。这就是为什么我们前面采用Sigmoid函数的原因。
综上所述,BP三要素如图13所示。

BP网实例
由于BP网络具有出色的非线性映射能力、泛化能力和容错能力,因此BP网络成了至今为止应用最广泛的人工神经网络。图14是Matlab下用BP网络做线性拟合的结果,效果很好。

代码如下:
% BP网络函数逼近实例
% .首先定义正弦函数,采样率为20Hz,频率为1Hz
k = ; % 设定正弦信号频率
p = [:0.05:];
t = cos(k*pi*p) + *sin(pi*p);
plot(p, t, '-'), xlabel('时间'); ylabel('输入信号');
% .生成BP网络。用newff函数生成前向型BP网络,设定隐层中神经元数目为10
% 分别选择隐层的传递函数为 tansig,输出层的传递函数为 purelin,
% 学习算法为trainlm。
net =
newff(minmax(p),[,,],{'tansig','tansig','purelin'},'trainlm');
% .对生成的网络进行仿真并做图显示。
y1 = sim(net,p); plot(p, t, '-', p, y1, '--')
% .训练。对网络进行训练,设定训练误差目标为 1e-,最大迭代次数为300,
% 学习速率为0.。
net.trainParam.lr=0.05;
net.trainParam.epochs=;
net.trainParam.goal=1e-;
[net,tr]=train(net,p,t);
%.再次对生成的网络进行仿真并做图显示。
y2 = sim(net,p);
plot(p, t, '-', p, y2, '--')
原文地址:http://hahack.com/reading/ann2/
【转】漫谈ANN(2):BP神经网络的更多相关文章
- 使用HOG特征+BP神经网络进行车标识别
先挖个坑,快期末考试了,有空填上w 好了,今晚刚好有点闲,就把坑填上吧. //-------------------------------开篇---------------------------- ...
- BP神经网络的数学原理及其算法实现
什么是BP网络 BP网络的数学原理 BP网络算法实现 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/44514073 上一篇 ...
- BP神经网络的手写数字识别
BP神经网络的手写数字识别 ANN 人工神经网络算法在实践中往往给人难以琢磨的印象,有句老话叫“出来混总是要还的”,大概是由于具有很强的非线性模拟和处理能力,因此作为代价上帝让它“黑盒”化了.作为一种 ...
- BP神经网络公式推导及实现(MNIST)
BP神经网络的基础介绍见:http://blog.csdn.net/fengbingchun/article/details/50274471,这里主要以公式推导为主. BP神经网络又称为误差反向传播 ...
- BP神经网络原理及python实现
[废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...
- BP神经网络
秋招刚结束,这俩月没事就学习下斯坦福大学公开课,想学习一下深度学习(这年头不会DL,都不敢说自己懂机器学习),目前学到了神经网络部分,学习起来有点吃力,把之前学的BP(back-progagation ...
- 数据挖掘系列(9)——BP神经网络算法与实践
神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...
- BP神经网络推导过程详解
BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...
- 极简反传(BP)神经网络
一.两层神经网络(感知机) import numpy as np '''极简两层反传(BP)神经网络''' # 样本 X = np.array([[0,0,1],[0,1,1],[1,0,1],[1, ...
随机推荐
- absolute独立使用之下拉框最佳实践
说明:传统的做法是给外部盒子relative定位,再给弹出框absolute定位,而这里我们将absolute独立使用 html <div class="searc ...
- PL/SQL学习(三)游标
原文参考:http://plsql-tutorial.com/ 两种类型: 隐式: 执行INSERT.UPDATE.DELETE 或者只返回一条结果的SELECT语句时默认创建 ...
- What is Windows Clustering
A cluster is a group of independent computer systems, referred to as nodes, working together as a un ...
- Python学习_列表推导和Lambda表达式
列表推导目的是减少将一个列表转换为另一个列表时所需编写的代码量,其功能也能用列表迭代完成 1.根据要求创建列表threes_and_fives(列表值包括1到15中能够被3或者5正常的数) three ...
- eclipse开发android程序常见问题解决办法
1:R.java不自动更新或不见,gen文件夹里没生成文件. 解决办法: 这个一般是xml文件中有错误,如有英文大写,属性值错误等,解决了就会好. 如果错都排除了还没有生成或更新,那么可以点击proj ...
- python 遍历字典
dict={"a":"apple","b":"banana","o":"orange&qu ...
- Hbase热点问题
需求描述:扫描(查询)某个区间--->列用hbase多节点的资源,分布式扫描,加快速度==> 然后拼接到一起 如何打散数据 冠字号逆序,hash 并不一定数据连续就会造成热点,这个是由数据 ...
- [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】
题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...
- Html5 跨域通信
H5 跨域通信: 在主页面中通过iframe嵌入外部页面,通过iframe的window对象postMessage方法向iframe页面传递消息. 1 <!DOCTYPE html> 2 ...
- nodejs对静态文件目录的处理
Serving static files in Express To serve static files such as images, CSS files, and JavaScript file ...