BP神经网络

最近几年来,神经网络算法大热。BP神经网络作为神经网络中入门级别的算法,是很有必要了解的。

BP神经网络的作者大概是在生物神经元中得到了启发,通过算法模拟了神经元学习的过程以及连接方式,下面开始介绍BP神经网络。

神经元

神经元在结构是模拟了生物神经元的结构,我们知道的是生物神经元由树图输入信息,经过神经元的处理之后,由轴突输出信息,而神经网络算法中的神经元也是如此,不过名称要简化一下,输入就叫输入,输出就叫输出,而中间的信息处理叫做**函数。下图是神经元结构图。

BP神经网络

在上图中出了输入、输出和**函数以外,还出现了w1、w2等参数,这些参数被称为权重。而训练神经网络的过程也就是更新权重的过程。

那么权重是怎么工作的呢?

现在假设我们有一个分类任务,有着两个属性X1和X2,下面将数据绘制在二维坐标系中,很明显要对这些数据进行分类,其实就是绘制出一条决策边界,将数据划分为两类即可。当你想要预测新数据的类别时,只需要将数据输入,根据数据在决策边界的哪一侧来判断类别即可。由下面的图像同时结合数学知识我们可以明白权重决定了决策边界的斜率。所以说当训练出合适的权值后,分类的准确率也就提高了。

BP神经网络

那么决策边界怎么绘制呢?

假设分类的类别为r和p,r = x1w1 + x2w2,p = x1w3+x2w4(如下图是神经网络连接方式)。当r>p时分类为r,反之则为p

BP神经网络

而决策边界就是指r==p的线,同时我们需要添加一个偏移量让决策边界覆盖的面更广,这时r和p也就变成了r = x1w1 + x2w2 + b1,p = x1w3 + w2w4 + b2。如果数据过于复杂的话,则需要添加隐含层,让决策边界的范围更广。下图是添加了隐含层的神经网络结构。

BP神经网络

这种情况只适合数据是线性可分的情况,对于线性不可分的数据,**函数的作用就出来了。**函数可以完成线性到非线性的映射,如下图所示,是加入了sigmod**函数的神经网络结构图。

BP神经网络

上面就是BP神经网络工作的原理,接下来就是最重要的一步了,如何更新权重。

在BP神经网络的训练过程中分为两个部分工作,前向传播和反向传播,整体的策略为通过梯度下降的方法降低误差的值,让误差降到最低,训练的流程图如下图所示。

BP神经网络

更新权值的公式为:新的权值=原权值+学习速率×该节点的误差×激励函数的导函数的值(f(e)的倒数)×与该节点相连的输入值