1. 深入浅出BP神经网络算法的原理
深入浅出BP神经网络算法的原理
相信每位刚接触神经网络的时候都会先碰到BP算法的问题,如何形象快速地理解BP神经网络就是我们学习的高级乐趣了(画外音:乐趣?你在跟我谈乐趣?)
本篇博文就是要简单粗暴地帮助各位童鞋快速入门采取BP算法的神经网络。
BP神经网络是怎样的一种定义?看这句话:一种按“误差逆传播算法训练”的多层前馈网络。
BP的思想就是:利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。这里的误差估计可以理解为某种偏导数,我们就是根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出误差。直到输出的误差达到符合的要求或者迭代次数溢出设定值。
说来说去,“误差”这个词说的很多嘛,说明这个算法是不是跟误差有很大的关系?
没错,BP的传播对象就是“误差”,传播目的就是得到所有层的估计误差。
它的学习规则是:使用最速下降法,通过反向传播(就是一层一层往前传)不断调整网络的权值和阈值,最后使全局误差系数最小。
它的学习本质就是:对各连接权值的动态调整。
拓扑结构如上图:输入层(input),隐藏层(hide layer),输出层(output)
BP网络的优势就是能学习和储存大量的输入输出的关系,而不用事先指出这种数学关系。那么它是如何学习的?
BP利用处处可导的激活函数来描述该层输入与该层输出的关系,常用S型函数δ来当作激活函数。
我们现在开始有监督的BP神经网络学习算法:
1、正向传播得到输出层误差e
=>输入层输入样本=>各隐藏层=>输出层
2、判断是否反向传播
=>若输出层误差与期望不符=>反向传播
3、误差反向传播
=>误差在各层显示=>修正各层单元的权值,直到误差减少到可接受程度。
算法阐述起来比较简单,接下来通过数学公式来认识BP的真实面目。
假设我们的网络结构是一个含有N个神经元的输入层,含有P个神经元的隐层,含有Q个神经元的输出层。
这些变量分别如下:
认识好以上变量后,开始计算:
一、用(-1,1)内的随机数初始化误差函数,并设定精度ε,最多迭代次数M
二、随机选取第k个输入样本及对应的期望输出
重复以下步骤至误差达到要求:
三、计算隐含层各神经元的输入和输出
四、计算误差函数e对输出层各神经元的偏导数,根据输出层期望输出和实际输出以及输出层输入等参数计算。
五、计算误差函数对隐藏层各神经元的偏导数,根据后一层(这里即输出层)的灵敏度(稍后介绍灵敏度)δo(k),后一层连接权值w,以及该层的输入值等参数计算
六、利用第四步中的偏导数来修正输出层连接权值
七、利用第五步中的偏导数来修正隐藏层连接权值
八、计算全局误差(m个样本,q个类别)
比较具体的计算方法介绍好了,接下来用比较简洁的数学公式来大致地概括这个过程,相信看完上述的详细步骤都会有些了解和领悟。
假设我们的神经网络是这样的,此时有两个隐藏层。
我们先来理解灵敏度是什么?
看下面一个公式:
这个公式是误差对b的一个偏导数,这个b是怎么?它是一个基,灵敏度δ就是误差对基的变化率,也就是导数。
因为?u/?b=1,所以?E/?b=?E/?u=δ,也就是说bias基的灵敏度?E/?b=δ等于误差E对一个节点全部输入u的导数?E/?u。
也可以认为这里的灵敏度等于误差E对该层输入的导数,注意了,这里的输入是上图U级别的输入,即已经完成层与层权值计算后的输入。
每一个隐藏层第l层的灵敏度为:
这里的“?”表示每个元素相乘,不懂的可与上面详细公式对比理解
而输出层的灵敏度计算方法不同,为:
而最后的修正权值为灵敏度乘以该层的输入值,注意了,这里的输入可是未曾乘以权值的输入,即上图的Xi级别。
对于每一个权值(W)ij都有一个特定的学习率ηIj,由算法学习完成。
2. BP人工神经网络方法
(一)方法原理
人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统。理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势。人工神经元是神经网络的基本处理单元,其接收的信息为x1,x2,…,xn,而ωij表示第i个神经元到第j个神经元的连接强度或称权重。神经元的输入是接收信息X=(x1,x2,…,xn)与权重W={ωij}的点积,将输入与设定的某一阈值作比较,再经过某种神经元激活函数f的作用,便得到该神经元的输出Oi。常见的激活函数为Sigmoid型。人工神经元的输入与输出的关系为
地球物理勘探概论
式中:xi为第i个输入元素,即n维输入矢量X的第i个分量;ωi为第i个输入与处理单元间的互联权重;θ为处理单元的内部阈值;y为处理单元的输出。
常用的人工神经网络是BP网络,它由输入层、隐含层和输出层三部分组成。BP算法是一种有监督的模式识别方法,包括学习和识别两部分,其中学习过程又可分为正向传播和反向传播两部分。正向传播开始时,对所有的连接权值置随机数作为初值,选取模式集的任一模式作为输入,转向隐含层处理,并在输出层得到该模式对应的输出值。每一层神经元状态只影响下一层神经元状态。此时,输出值一般与期望值存在较大的误差,需要通过误差反向传递过程,计算模式的各层神经元权值的变化量
(二)BP神经网络计算步骤
(1)初始化连接权值和阈值为一小的随机值,即W(0)=任意值,θ(0)=任意值。
(2)输入一个样本X。
(3)正向传播,计算实际输出,即根据输入样本值、互联权值和阈值,计算样本的实际输出。其中输入层的输出等于输入样本值,隐含层和输出层的输入为
地球物理勘探概论
输出为
地球物理勘探概论
式中:f为阈值逻辑函数,一般取Sigmoid函数,即
地球物理勘探概论
式中:θj表示阈值或偏置;θ0的作用是调节Sigmoid函数的形状。较小的θ0将使Sigmoid函数逼近于阈值逻辑单元的特征,较大的θ0将导致Sigmoid函数变平缓,一般取θ0=1。
(4)计算实际输出与理想输出的误差
地球物理勘探概论
式中:tpk为理想输出;Opk为实际输出;p为样本号;k为输出节点号。
(5)误差反向传播,修改权值
地球物理勘探概论
式中:
地球物理勘探概论
地球物理勘探概论
(6)判断收敛。若误差小于给定值,则结束,否则转向步骤(2)。
(三)塔北雅克拉地区BP神经网络预测实例
以塔北雅克拉地区S4井为已知样本,取氧化还原电位,放射性元素Rn、Th、Tc、U、K和地震反射
S4井位于测区西南部5线25点,是区内唯一已知井。该井在5390.6m的侏罗系地层获得40.6m厚的油气层,在5482m深的震旦系地层中获58m厚的油气层。取S4井周围9个点,即4~6线的23~25 点作为已知油气的训练样本;由于区内没有未见油的钻井,只好根据地质资料分析,选取14~16线的55~57点作为非油气的训练样本。BP网络学习迭代17174次,总误差为0.0001,学习效果相当满意。以学习后的网络进行识别,得出结果如图6-2-4所示。
图6-2-4 塔北雅克拉地区BP神经网络聚类结果
(据刘天佑等,1997)
由图6-2-4可见,由预测值大于0.9可得5个大封闭圈远景区,其中测区南部①号远景区对应着已知油井S4井;②、③号油气远景区位于地震勘探所查明的托库1、2号构造,该两个构造位于沙雅隆起的东段,其西段即为1984年钻遇高产油气流的Sch2井,应是含油气性好的远景区;④、⑤号远景区位于大涝坝构造,是yh油田的组成部分。
3. BP神经网络方法
人工神经网络是近几年来发展起来的新兴学科,它是一种大规模并行分布处理的非线性系统,适用解决难以用数学模型描述的系统,逼近任何非线性的特性,具有很强的自适应、自学习、联想记忆、高度容错和并行处理能力,使得神经网络理论的应用已经渗透到了各个领域。近年来,人工神经网络在水质分析和评价中的应用越来越广泛,并取得良好效果。在这些应用中,纵观应用于模式识别的神经网络,BP网络是最有效、最活跃的方法之一。
BP网络是多层前向网络的权值学习采用误差逆传播学习的一种算法(Error Back Propagation,简称BP)。在具体应用该网络时分为网络训练及网络工作两个阶段。在网络训练阶段,根据给定的训练模式,按照“模式的顺传播”→“误差逆传播”→“记忆训练”→“学习收敛”4个过程进行网络权值的训练。在网络的工作阶段,根据训练好的网络权值及给定的输入向量,按照“模式顺传播”方式求得与输入向量相对应的输出向量的解答(阎平凡,2000)。
BP算法是一种比较成熟的有指导的训练方法,是一个单向传播的多层前馈网络。它包含输入层、隐含层、输出层,如图4-4所示。
图4-4 地下水质量评价的BP神经网络模型
图4-4给出了4层地下水水质评价的BP神经网络模型。同层节点之间不连接。输入信号从输入层节点,依次传过各隐含层节点,然后传到输出层节点,如果在输出层得不到期望输出,则转入反向传播,将误差信号沿原来通路返回,通过学习来修改各层神经元的权值,使误差信号最小。每一层节点的输出只影响下一层节点的输入。每个节点都对应着一个作用函数(f)和阈值(a),BP网络的基本处理单元量为非线性输入-输出的关系,输入层节点阈值为0,且f(x)=x;而隐含层和输出层的作用函数为非线性的Sigmoid型(它是连续可微的)函数,其表达式为
f(x)=1/(1+e-x) (4-55)
设有L个学习样本(Xk,Ok)(k=1,2,…,l),其中Xk为输入,Ok为期望输出,Xk经网络传播后得到的实际输出为Yk,则Yk与要求的期望输出Ok之间的均方误差为
区域地下水功能可持续性评价理论与方法研究
式中:M为输出层单元数;Yk,p为第k样本对第p特性分量的实际输出;Ok,p为第k样本对第p特性分量的期望输出。
样本的总误差为
区域地下水功能可持续性评价理论与方法研究
由梯度下降法修改网络的权值,使得E取得最小值,学习样本对Wij的修正为
区域地下水功能可持续性评价理论与方法研究
式中:η为学习速率,可取0到1间的数值。
所有学习样本对权值Wij的修正为
区域地下水功能可持续性评价理论与方法研究
通常为增加学习过程的稳定性,用下式对Wij再进行修正:
区域地下水功能可持续性评价理论与方法研究
式中:β为充量常量;Wij(t)为BP网络第t次迭代循环训练后的连接权值;Wij(t-1)为BP网络第t-1次迭代循环训练后的连接权值。
在BP网络学习的过程中,先调整输出层与隐含层之间的连接权值,然后调整中间隐含层间的连接权值,最后调整隐含层与输入层之间的连接权值。实现BP网络训练学习程序流程,如图4-5所示(倪深海等,2000)。
图4-5 BP神经网络模型程序框图
若将水质评价中的评价标准作为样本输入,评价级别作为网络输出,BP网络通过不断学习,归纳出评价标准与评价级别间复杂的内在对应关系,即可进行水质综合评价。
BP网络对地下水质量综合评价,其评价方法不需要过多的数理统计知识,也不需要对水质量监测数据进行复杂的预处理,操作简便易行,评价结果切合实际。由于人工神经网络方法具有高度民主的非线性函数映射功能,使得地下水水质评价结果较准确(袁曾任,1999)。
BP网络可以任意逼近任何连续函数,但是它主要存在如下缺点:①从数学上看,它可归结为一非线性的梯度优化问题,因此不可避免地存在局部极小问题;②学习算法的收敛速度慢,通常需要上千次或更多。
神经网络具有学习、联想和容错功能,是地下水水质评价工作方法的改进,如何在现行的神经网络中进一步吸取模糊和灰色理论的某些优点,建立更适合水质评价的神经网络模型,使该模型既具有方法的先进性又具有现实的可行性,将是我们今后研究和探讨的问题。
4. 神经网络——BP算法
对于初学者来说,了解了一个算法的重要意义,往往会引起他对算法本身的重视。BP(Back Propagation,后向传播)算法,具有非凡的历史意义和重大的现实意义。
1969年,作为人工神经网络创始人的明斯基(Marrin M insky)和佩珀特(Seymour Papert)合作出版了《感知器》一书,论证了简单的线性感知器功能有限,不能解决如“异或”(XOR )这样的基本问题,而且对多层网络也持悲观态度。这些论点给神经网络研究以沉重的打击,很多科学家纷纷离开这一领域,神经网络的研究走向长达10年的低潮时期。[1]
1974年哈佛大学的Paul Werbos发明BP算法时,正值神经外网络低潮期,并未受到应有的重视。[2]
1983年,加州理工学院的物理学家John Hopfield利用神经网络,在旅行商这个NP完全问题的求解上获得当时最好成绩,引起了轰动[2]。然而,Hopfield的研究成果仍未能指出明斯基等人论点的错误所在,要推动神经网络研究的全面开展必须直接解除对感知器——多层网络算法的疑虑。[1]
真正打破明斯基冰封魔咒的是,David Rumelhart等学者出版的《平行分布处理:认知的微观结构探索》一书。书中完整地提出了BP算法,系统地解决了多层网络中隐单元连接权的学习问题,并在数学上给出了完整的推导。这是神经网络发展史上的里程碑,BP算法迅速走红,掀起了神经网络的第二次高潮。[1,2]
因此,BP算法的历史意义:明确地否定了明斯基等人的错误观点,对神经网络第二次高潮具有决定性意义。
这一点是说BP算法在神经网络领域中的地位和意义。
BP算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多是在使用BP算法进行训练[2],包括最近炙手可热的深度学习概念下的卷积神经网络(CNNs)。
BP神经网络是这样一种神经网络模型,它是由一个输入层、一个输出层和一个或多个隐层构成,它的激活函数采用sigmoid函数,采用BP算法训练的多层前馈神经网络。
BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。其算法基本思想为:在2.1所述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
BP算法中核心的数学工具就是微积分的 链式求导法则 。
BP算法的缺点,首当其冲就是局部极小值问题。
BP算法本质上是梯度下降,而它所要优化的目标函数又非常复杂,这使得BP算法效率低下。
[1]、《BP算法的哲学思考》,成素梅、郝中华著
[2]、《机器学习》,周志华著
[3]、 Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
2016-05-13 第一次发布
2016-06-04 较大幅度修改,完善推导过程,修改文章名
2016-07-23 修改了公式推导中的一个错误,修改了一个表述错误