bp神经网络变量排序 bp神经网络法
BP神经网络模型各个参数的选取问题
样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃。如果样本数量过多,应增加隐层数或隐层数目,才能增强学习能力。
bp神经网络变量排序 bp神经网络法
bp神经网络变量排序 bp神经网络法
一、隐层数
一般认为,增加隐层数可以降低网络误(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络应优先考虑3层网络(即有1个隐层)。一般地,靠增加隐层数来获得较低的误,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。
二、隐层数
在BP 网络中,隐层数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层数的计算公式都是针对训练样本任意多的情况,而且多数是针对不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层数有时相几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层数的基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层数。研究表明,隐层数不仅与输入/输出层的数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。
BP神经网络
神经网络能很好地解决不同的机器学习问题。神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。
上图显示了人工神经网络是一个分层模型,逻辑上可以分为三层:
输入层 :输入层接收特征向量 x
输出层 :输出层产出终的预测 h
隐含层 :隐含层介于输入层与输出层之间,之所以称之为隐含层,是因为当中产生的值并不像输入层使用的样本矩阵 X或者输出层用到的标签矩阵 y 那样直接可见。
下面引入一些标记法来帮助描述模型:
!$ a^{(j)}_{i} $ 代表第j层的第i个激活单元。 !$ theta^{(j)} $ 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 !$ theta^{(1)} $ 代表从层映射到第二层的权重的矩阵。其尺寸为:以第 j+1层的激活单元数量为行数,以第 j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 !$ theta^{(1)} $ 的尺寸为 34。
对于上图所示的模型,激活单元和输出分别表达为:
!$ a^{(2)}_{1} = g( theta^{(1)}_{10}x_0 + theta^{(1)}_{11}x_1 + theta^{(1)}_{12}x_2 + theta^{(1)}_{13}x_3 ) $
!$a^{(2)}_{2} = g( theta^{(1)}_{20}x_0 + theta^{(1)}_{21}x_1 + theta^{(1)}_{22}x_2 + theta^{(1)}_{23}x_3 ) $
!$a^{(2)}_{3} = g( theta^{(1)}_{30}x_0 + theta^{(1)}_{31}x_1 + theta^{(1)}_{32}x_2 + theta^{(1)}_{33}x_3 ) $
!$h_{theta}{(x)} = g( theta^{(2)}_{10}a^{2}_{0} + theta^{(2)}_{11}a^{2}_{1} + theta^{(2)}_{12}a^{2}_{2} + theta^{(2)}_{13}a^{2}_{3} ) $
下面用向量化的方法以上面的神经网络为例,试着计算第二层的值:
对于多类分类问题来说:
我们可将神经网络的分类定义为两种情况:二类分类和多类分类。
二类分类: !$ S_{L} = 0,y = 0,y = 1$
多类分类: !$ S_{L} = k, y_{i} = 1表示分到第i类;(k>2)$
在神经网络中,我们可以有很多输出变量,我们的 !$h_{theta}{(x)} $ 是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为: !$ h_{theta}{(x)} in R^{K}(h_{theta}{(x)})_{i} = i^{th} output$
我们希望通过代价函数来观察算法预测的结果与真实情况的误有多大,不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同结果,然后在利用循环在K个预测中选择可能性的一个,将其与y中的实际数据进行比较。
正则化的那一项只是排除了每一层 !$theta_0$ 后,每一层的 矩阵的和。里层的循环j循环所有的行(由 +1 层的激活单元数决定),循环i则循环所有的列,由该层( !$ s_l$ 层)的激活单元数所决定。即: !$h_{theta}{(x)}$ 与真实值之间的距离为每个样本-每个类输出的加和,对参数进行 regularization 的 bias 项处理所有参数的平方和。
由于神经网络允许多个隐含层,即各层的神经元都会产出预测,因此,就不能直接利用传统回归问题的梯度下降法来小化 !$J(theta)$ ,而需要逐层考虑预测误,并且逐层优化。为此,在多层神经网络中,使用反向传播算法(Backpropagation Algorithm)来优化预测,首先定义各层的预测误为向量 !$ δ^{(l)} $
训练过程:
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但终的结果可能并不是解。
为了避免这样的问题,我们采取一种叫做梯度的数值检验( Numerical Gradient Checking )方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 ,我们计算出在 !$theta - epsilon$ 处和 !$theta + epsilon$ 的代价值(是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在 !$theta$ 处的代价值。
当 !$theta$ 是一个向量时,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对 !$theta_1$ 进行检验的示例:
如果上式成立,则证明网络中BP算法有效,此时关闭梯度校验算法(因为梯度的近似计算效率很慢),继续网络的训练过程。
BP神经网络连接权值如何确定
BP神经网络的权值是通过对网络的训练得到的。
1、如果使用MATLAB的话不要自己设定,newff之后会自动赋值。
也可以手动:net.IW{}= ; net.bias{}=。
2、一般来说输入归一化,那么w和b取0-1的随机数就行。
开始先随机给一个较小的权值,然后经过不断的训练得出终的权值,从而得出所要求的网络结构。
BP神经网络的权值是通过对网络的训练得到的。
神经网络——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]
真正打破明斯基冰封魔咒的是,Did Rumelhart等学者出版的《平行分布处理:认知的微观结构探索》一书。书中完整地提出了BP算法,系统地解决了多层网络中隐单元连接权的学习问题,并在数学上给出了完整的推导。这是神经网络发展史上的里程碑,BP算法迅速走红,掀起了神经网络的第二次。[1,2]
因此,BP算法的历史意义:明确地否定了明斯基等人的错误观点,对神经网络第二次具有决定性意义。
这一点是说BP算法在神经网络领域中的地位和意义。
BP算法是迄今成功的神经网络学习算法,现实任务中使用神经网络时,大多是在使用BP算法进行训练[2],包括近炙手可热的深度学习概念下的卷积神经网络(s)。
BP神经网络是这样一种神经网络模型,它是由一个输入层、一个输出层和一个或多个隐层构成,它的激活函数采用sigmoid函数,采用BP算法训练的多层前馈神经网络。
BP算法全称叫作误反向传播(error Back Propagation,或者也叫作误逆传播)算法。其算法基本思想为:在2.1所述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误,将误反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
BP算法中核心的数学工具就是微积分的 链式求导法则 。
BP算法的缺点,首当其冲就是局部极小值问题。
BP算法本质上是梯度下降,而它所要优化的目标函数又非常复杂,这使得BP算法效率低下。
[1]、《BP算法的哲学思考》,成素梅、郝中华著
[2]、《机器学习》,周志华著
[3]、 Deep Learning论文笔记之(四)卷积神经网络推导和实现
2016-05-13 次发布
2016-06-04 较大幅度修改,完善推导过程,修改文章名
2016-07-23 修改了公式推导中的一个错误,修改了一个表述错误
BP神经算法是什么?能给点既通俗易懂又比较详细的回答吗
BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误逆传播算法训练的多层前馈网络,是目前应用广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误平方和小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。
BP神经网络算法是在BP神经网络现有算法的基础上提出的,是通过任意选定一组权值,将给定的目标输出直接作为线性方程的代数和来建立线性方程组,解得待求权,不存在传统方法的局部极小及收敛速度慢的问题,且更易理解。
1 传统的BP算法简述
BP算法是一种有监督式的学习算法,其主要思想是:输入学习样本,使用反向传播算法对网络的权值和偏进行反复的调整训练,使输出的向量与期望向量尽可能地接近,当网络输出层的误平方和小于指定的误时训练完成,保存网络的权值和偏。具体步骤如下: (1)初始化,随机给定各连接权[w],[v]及阀值θi,rt。 (2)由给定的输入输出模式对计算隐层、输出层各单元输出 bj=f(■wijai-θj) ct=f(■vjtbj-rt) 式中:bj为隐层第j个神经元实际输出;ct为输出层第t个神经元的实际输出;wij为输入层至隐层的连接权;vjt为隐层至输出层的连接权。 dtk=(ytk-ct)ct(1-ct) ejk=[■dtvjt] bj(1-bj) 式中:dtk为输出层的校正误;ejk为隐层的校正误。 (3)计算新的连接权及阀值,计算公式如下: vjt(n+1)=vjt(n)+?琢dtkbj wij(n+1)=wij(n)+?茁ejkaik rt(n+1)=rt(n)+?琢dtk θj(n+1)=θj(n)+?茁ejk 式中:?琢,?茁为学习系数(0<?琢<1,0<?茁<1)。 (4)选取下一个输入模式对返回第2步反复训练直到网络设输出误达到要求结束训练。 传统的BP算法,实质上是把一组样本输入/输出问题转化为一个非线性优化问题,并通过负梯度下降算法,利用迭代运算求解权值问题的一种学习方法,但其收敛速度慢且容易陷入局部极小,为此提出了一种新的算法,即高斯消元法。
2 改进的BP网络算法
2.1 改进算法概述 此前有人提出:任意选定一组自由权,通过对传递函数建立线性方程组,解得待求权。本文在此基础上将给定的目标输出直接作为线性方程等式代数和来建立线性方程组,不再通过对传递函数求逆来计算神经元的净输出,简化了运算步骤。没有采用误反馈原理,因此用此法训练出来的神经网络结果与传统算法是等效的。其基本思想是:由所给的输入、输出模式对通过作用于神经网络来建立线性方程组,运用高斯消元法解线性方程组来求得未知权值,而未采用传统BP网络的非线性函数误反馈寻优的思想。 2.2 改进算法的具体步骤 对给定的样本模式对,随机选定一组自由权,作为输出层和隐含层之间固定权值,通过传递函数计算隐层的实际输出,再将输出层与隐层间的权值作为待求量,直接将目标输出作为等式的右边建立方程组来求解。 现定义如下符号(见图1):x (p)输入层的输入矢量;y (p)输入层输入为x (p)时输出层的实际输出矢量;t (p)目标输出矢量;n,m,r分别为输入层、隐层和输出层神经元个数;W为隐层与输入层间的权矩阵;V为输出层与隐层间的权矩阵。具体步骤如下: (1)随机给定隐层和输入层间神经元的初始权值wij。 (2)由给定的样本输入xi(p)计算出隐层的实际输出aj(p)。为方便起见将图1网络中的阀值写入连接权中去,令:隐层阀值θj=wnj,x(n)=-1,则: aj(p)=f(■wijxi(p)) (j=1,2…m-1)。 (3)计算输出层与隐层间的权值vjr。以输出层的第r个神经元为对象,由给定的输出目标值tr(p)作为等式的多项式值建立方程,用线性方程组表示为: a0(1)v1r+a1(1)v2r+…+am(1)vmr=tr(1)a0(2)v1r+a1(2)v2r+…+am(2)vmr=tr(2) ……a0(p)v1r+a1(p)v2r+…+am(p)vmr=tr(p) 简写为: Av=T 为了使该方程组有解,方程矩阵A为非奇异矩阵,其秩等于其增广矩阵的秩,即:r(A)=r(A┊B),且方程的个数等于未知数的个数,故取m=p,此时方程组的解为: Vr=[v0r,v2r,…vmr](r=0,1,2…m-1) (4)重复第三步就可以求出输出层m个神经元的权值,以求的输出层的权矩阵加上随机固定的隐层与输入层的权值就等于神经网络后训练的权矩阵。
3 计算机运算实例
现以神经网络简单的XOR问题用VC编程运算进行比较(取神经网络结构为2-4-1型),传统算法和改进BP算法的误(取动量因子α=0.001 5,步长η=1.653)
BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误逆传播算法训练的多层前馈网络,是目前应用广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误平方和小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。
深入浅出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,由算法学习完成。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。