BP神经网络
2019-4-24 来源:不详 浏览次数:次前言
上篇剑客对神经网络做了科普,还记得嘛神经网络是长这个样子的
运行方式模拟人类神经系统,它由输入层→隐藏层→输出层依次进行数据传递,这就叫正向传播,但输出结果不对呢,如果有人看到‘飞机场’非要告诉你是‘大波’,这肯定神经系统出问题了得修正,那问题来了怎么修正?正常逻辑肯定是从输出层→隐藏层→输入层反向修正权重,跟实际一样你肯定也是对‘大波’哥说‘那是飞机场好不好!’,这种方法就是我们本文要讲的反向传播神经网络。BP神经网络作为神经网络和深度学习力最重要的一个算法,有必要掰开了揉碎了来研究的。老规矩蓄势完毕,开始正题吧。本次分三层第一层先直接给出每一层权重的修正公式,手工走一遍反向修正过程。第二层细讲每个修正公式的数学推导。第三层结合代码,讲实际的使用方法。后续有相对较多不太友善的数学公式,如果只是看故事了解个大概的朋友基本可以转发链接,后文点赞了。第一层手工反向修正我们使用韩老师的经典教科书案例,先讲清楚神经元是怎么正向传播和反向修正的。
神经元的输出由前一网络层的输出乘以相应权重进行累加,加上偏倚后代入挤压函数,这个过程主要是两步分解动作:
第一步,由前面一层的输出乘以相应的权重,再加上一个偏倚得出累加值
第二步,累加值可能无穷小也可能无穷大太不规范,所以把值映射到0~1之间得到。
如何反向修正?
如果我们想得到的是1,算法给出的确是0,那就需要调整权重和,这里先给出公式。
先算输出层的误差,以输出层单元j为例:
是j层挤压后的最终结果,是真实的输出如1。
隐藏层的误差公式是:
k是j的下一层,j是隐藏层k就可能是输出层,是j正向传播后一层k神经元计算出来的误差,从这里就看出来误差及参数的传递是由后向前进行的。
权重的改变如下:
是的变化量,前面有讲是当前层的误差,公式里的l是学习率是梯度下降算法里的概念,简单举例子来讲步子迈太大容易扯着dan,迈太小进度又太慢,学习率就是这个步子,是当上一层挤压的结果。
同样我们也需要对偏倚进行修正:
有了上面粗暴给出的公式,我们来做一个具体的反向推导例子:
神经网络如上图,x1,x2,x3是输入层,x4,x5是隐藏层,x6是输出层,那我们算下净输出和各节点误差如下:
我们依次进行反向修正,由x4,x5到x6的权重,依次到x1,x2,x3到x4,x5的权重,结果如下:
第二层公式的数学推导我们先重新定义正向传递子过程的公式的部分变量。现在设节点和节点之间的权值为,节点的阀值为,每个节点的输出值为,而每个节点的输出值是根据上层所有节点的输出值、当前节点与上一层所有节点的权值和当前节点的阀值还有激活函数来实现的。具体计算方法如下
其中为激活函数,一般选取S型函数或者线性函数。正向传递的过程比较简单,按照上述公式计算即可。在BP神经网络中,输入层节点没有阀值。
反向传递子过程
在BP神经网络中,误差信号反向传递子过程比较复杂,它是基于Widrow-Hoff学习规则的。假设输出层的所有结果为,误差函数如下
而BP神经网络的主要目的是反复修正权值和阀值,使得误差函数值达到最小。Widrow-Hoff学习规则是通过沿着相对误差平方和的最速下降方向,连续调整网络的权值和阀值,根据梯度下降法,权值矢量的修正正比于当前位置上E(w,b)的梯度,对于第j个输出节点有
假设选择激活函数为
对激活函数求导得到
那么接下来针对求导
求导算出的修正公式,跟我们上一层讲的完全对应。
是i到j的误差就是之前讲的
同样对于有
这就是著名的学习规则,通过改变神经元之间的连接权值来减少系统实际输出和期望输出的误差,这个规则又叫做Widrow-Hoff学习规则或者纠错学习规则。上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调整量的计算更为复杂。假设是输入层第k个节点和隐含层第i个节点之间的权值(这里跟上一层的顺序有区别要注意),那么有:
此处公式推导的k是输入层/隐藏层,i是隐藏层,j是输出层区别于上一节里所讲解的顺序需要注意,其中
这样对学习规则理解更为深刻了吧。有了上述公式,根据梯度下降法,那么对于隐含层和输出层之间的权值和阀值调整如下
伊塔是学习率,可以看做我们修正时迈的步子。
而对于输入层和隐含层之间的权值和阀值调整同样有
至此BP神经网络公式推导讲完
第三层BP神经网络的使用本次借助的具体算法是MLPClassifier(多层感知机),MLPClassifier使用了后向传播算法。MLP依靠两个数组进行训练,数组X保存了浮点型特征值,Y数组储存了训练样本的目标值,通过hidden_layer_sizes数组设定每个隐藏层的神经元的个数。
这里我定义一个MLPClassifier类。
这部分的输出为,predict1是预测值,predict2除了预测值还包含预测的概率:
依次输出,各层神经元的连接权重:
输出结果:
BP神经网络要注意的点BP神经网络一般用于分类或者逼近问题。如果用于分类,则激活函数一般选用Sigmoid函数或者硬极限函,如果用于函数逼近,则输出层节点用线性函数,即
BP神经网络在训练数据时可以采用增量学习或者批量学习。
增量学习要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训练效果比较差,适合在线处理。批量学习不存在输入模式次序问题,稳定性好,但是只适合离线处理。
标准BP神经网络的缺陷:
(1)容易形成局部极小值而得不到全局最优值。
BP神经网络中极小值比较多,所以很容易陷入局部极小值,这就要求对初始权值和阀值有要求,要使得初始权值和阀值随机性足够好,可以多次随机来实现。
(2)训练次数多使得学习效率低,收敛速度慢。
(3)隐含层的选取缺乏理论的指导。
(4)训练时学习新样本有遗忘旧样本的趋势。
BP算法的改进:
(1)增加动量项引入动量项是为了加速算法收敛,即如下公式
动量因子一般选取0.1~0.8。
(2)自适应调节学习率
(3)引入陡度因子
部分参考资料:数据挖掘概念与技术csdnBP神经网络sklearn文档
本篇完,后续讲解theano、tensorflow及svm、HMM的算法,欢迎转发
我们专注深度学习,量化投资,欢迎给予建议
分享是种美德欢迎转发
北京看白癜风比较好医院北京中科白殿疯眞棒