原文地址:http://blog.csdn.net/acdreamers/article/details/44657439
今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据
挖掘等领域。接下来介绍BP神经网络的原理及实现。
Contents
1. BP神经网络的认识
2. 隐含层的选取
3. 正向传递子过程
4. 反向传递子过程
5. BP神经网络的注意点
6. BP神经网络的C++实现
1. BP神经网络的认识
BP(Back Propagation)神经网络分为两个过程
(1)工作信号正向传递子过程
(2)误差信号反向传递子过程
在BP神经网络中,单个样本有个输入,有个输出,在输入层和输出层之间通常还有若干个隐含层。实际
上,1989年Robert Hecht-Nielsen证明了对于任何闭区间内的一个连续函数都可以用一个隐含层的BP网
络来逼近,这就是万能逼近定理。所以一个三层的BP网络就可以完成任意的维到维的映射。即这三层分
别是输入层(I),隐含层(H),输出层(O)。如下图示
2. 隐含层的选取
在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少
才合适呢?实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层
节点数目,如下
其中为隐含层节点数目,为输入层节点数目,为输出层节点数目,为之间的调节常数。
3. 正向传递子过程
现在设节点和节点之间的权值为,节点的阀值为,每个节点的输出值为,而每个节点的输出
值是根据上层所有节点的输出值、当前节点与上一层所有节点的权值和当前节点的阀值还有激活函数来实现
的。具体计算方法如下
其中为激活函数,一般选取S型函数或者线性函数。
正向传递的过程比较简单,按照上述公式计算即可。在BP神经网络中,输入层节点没有阀值。
4. 反向传递子过程
在BP神经网络中,误差信号反向传递子过程比较复杂,它是基于Widrow-Hoff学习规则的。假设输出层
的所有结果为,误差函数如下
而BP神经网络的主要目的是反复修正权值和阀值,使得误差函数值达到最小。Widrow-Hoff学习规则
是通过沿着相对误差平方和的最速下降方向,连续调整网络的权值和阀值,根据梯度下降法,权值矢量
的修正正比于当前位置上E(w,b)的梯度,对于第个输出节点有
假设选择激活函数为
对激活函数求导,得到
那么接下来针对有
其中有
同样对于有
这就是著名的学习规则,通过改变神经元之间的连接权值来减少系统实际输出和期望输出的误差,这个规
则又叫做Widrow-Hoff学习规则或者纠错学习规则。
上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调
整量的计算更为复杂。假设是输入层第k个节点和隐含层第i个节点之间的权值,那么有