BP神经网络

总述:
在工做中,负责到车牌识别项目,因此特意研究下目前安防行业内广泛用的车牌识别算法:BP神经网络。html

BP网络的结构

BP网络的结构以下图所示,分为输入层(Input),隐含层(Hidden),输出层(Output)。
输入层的结点个数取决于输入的特征个数。
输出层的结点个数由分类的种类决定。
在输入层和输出层之间一般还有若干个隐含层,至于隐含层的个数以及每一个隐含层的结点个数由训练工程师的经验来人为设定。
连接A曾提到由万能逼近定理,通常一个隐含层就足够了。且这个隐含层通常结点个数为:
这里写图片描述
其中:I为输入层结点个数,O为输出层结点个数,a为1~10范围内的调节常数。web

就车牌识别中识别数字0~9的BP网络来讲:输入层的每一个结点就是的待训练的图像每种特征,常见的车牌数字识别有从上到下的每一个结点缩放成规定大小的0~9数字图像的每一个像素点值。那么输出的结点就只有0~9十个结点。算法

这里写图片描述

输入层与隐含层的权重矩阵记为:,其中隐含层的每一个结点与输入层的每一个结点都相连,输入层的每一个结点与隐含层之间都有一个权重,这样就是一个I*H的矩阵,同理就是一个H*O的矩阵。网络

为了便于后续公式的推导以及明确各个参数的意义,这里特意说明,以下图:
输入层的结点个数为I,
隐含层的结点个数为H,
输出层的结点个数为O;svg

设输入层有任一结点i,
设隐含层有任一结点k,
设输出层有任一结点j;函数

其中结点i与结点k之间的权重为开始训练前由人为设定初始值;
其中结点k与结点j之间的权重为开始训练前由人为设定初始值;测试

对于输出层
设结点j的教师信号为
j的当前偏置为开始训练前由人为设定初始值,
设结点j的初始输出的结果为
设结点j的最终输出结果为
注意:通过激励函数做用后的值.net

对于隐含层:
隐含层没有教师信号,
设k的当前偏置为开始训练前由人为设定初始值;
设结点k的初始输出的结果为,
设结点k的最终输出结果为,
注意:通过激励函数做用后的值设计

对于输入层:
输入层结点没有教师信号,没计算值,没有阈值,只有一个结点值
结点i的值为
这里写图片描述3d

BP算法思想

激励函数

下面解释为何每一个结点要由一开始的输出结果通过激励函数处理下:
由于实际上是由以及以线性函数的形式获得,而根据整个BP算法设计思想要根据每次结点的输出来偏微分来调整每一个结点的权重来实现训练目的(这也就是所谓的梯度降低法),这就须要输出是基于输入的可微分函数,同时为方便归一化的比较输出层每一个结点每次输出的结果,就采用下述两种激励函数。

在通常情形下:

下面对他进行求导,后面解释原理时要用:
这里写图片描述

的导数为::
           (X1)

前向传播

在BP神经网络中,每一个节点的输出值是根据上层全部节点的输出值、当前节点与上一层全部节点的权值 和 当前节点的阀值 还有 激活函数来实现的。以上图为例结点k输出值的计算方法:
           (X2)

                 (X3)

以上图为例结点j输出值的计算方法:
           (X4)

                 (X5)

其中f为激活函数,就是上面求导的那个函数。

其实,正向传播很简单,就是结点依次执行这两个公式,从输入层到隐含层,从隐含层到输出层。

返向传播

在BP神经网络的输出层,通过网络处理的输入数据的输出结果与标准结果(教师信号)的偏差能够用以下的公式来衡量::

           (X6)

网络的返向传播过程就是偏差信号的返向传播过程,主要目的就是经过反复修正权值和阀值,使得偏差函数值达到最小。而这其中修正权值与阈值的是经过梯度降低法来实现。根据梯度降低法的原理,权值的修正值与偏差函数成正比:

对上述公式进行展开与推导:
这里写图片描述
令:
则:

一样对于有:

对上述公式进行展开与推导:
这里写图片描述
一样令:
则:  

由上述公式能够获得输出层结点j到隐含层的返向传播的权重W与偏置B的更新策略以下:

下面推导隐含层到输入层的权重与偏置的梯度:
这里写图片描述

令:

由上述公式能够获得隐含层结点k到输入层的返向传播的权重W与偏置B的更新策略以下:

在实际的训练中BP就是不停的迭代实现前向传播与返向传播来修正权重与偏置,获得最终的网络。
在实际的BP网络测试中,对于一个测试目标提取输入层须要的特征做为输入层结点的值,用上面训练好的网络来进行前向传播,最终输出结点处的值最大的结点,就是这个测试目标的分类。

参考:
BP神经网络原理A
BP神经网络原理B
BP神经网络原理C
BP的C源码下
BP的C源码上