经过两天的研究,终于更加清晰地搞明白了所谓BP,做此记录。
M-P模型
M-P模型,其实就是按照生物神经元的结构和工作原理来构造出来的比较简单的模型。下图为M-P模型的示意图:
具体的推论详见http://blog.csdn.net/u013007900/article/details/50066315
抛去繁重的公式,我们可以把这个模型理解为:
要想下一个神经元接收到信息,那么接收到的信号一定要大于某一个阙值θ才能由输出信号yj输出,该阙值由具体的神经元决定;也就是说,输入的信号总和在经过神经元后失去了阙值θ的信号以后,转化为输出信号输出。
我们假每一个输出信号x都输入一定的神经元Wij,那么该神经元共接收到的输入信号即为
这个公式不难理解,于是在神经元中失去了阙值量θ后:
经过信号转化(激活函数f(x)的作用)为输出信号:
然而神经元突触的信号类型又分为兴奋和抑制两种状态,于是,在M-P模型中,这种性质体现为权值w的正负,如果权值是负,那么输出y值就也为负,体现为抑制状态;如果权值是正,那么输出y值就也为正,体现为兴奋状态。
这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。
激活函数
常用的激活函数有五种:
线性激活函数:
非线性激活函数:
在进行BP神经网络进行训练的时候,我们常用的函数是S形函数。
感知器
简单来说,感知器就是一个简单的神经网络模型,以下是感知器的拓扑结构图:
而oi表现形式为两种,1和-1,来表示兴奋和抑制。
多层感知器
我们将突触的兴奋和抑制两种兴奋类型的分类运用到数学计算的分类上面,假设两组数据共有4个数据,每个数据都有两个输入信号:(0,0),(0,1),(1,0),(1,1),每个数据都进行了一个(sgn)与运算,将所求结果进行分类:计算后结果为:因此,单层感知器的作用为可以使用一条直线来对输入数据进行线性分类,如果仍旧不太明白的话,可以从公式入手来进行分析:
所以可以得知,这是一个关于x1,x2的线性函数,而在图1中用于分类的红色直线,则是与函数w1j x1+w2j x2-θj=0成线性关系的函数。
到此,我们已经讲解了单层感知器的实现分类原理,引入多层分类器的原因在于,单层感知器的局限性只能区分二维平面中的线性函数,而对于多维平面,或着非线性函数来说,则无法实现分类。
可以看出,在加入了隐层以后输入层的数据不再直接经过简单的权值激活运算就直接进入输出层,而是在多层的隐层经过复杂计算后,再输入层输出,这样的计算方法,可以保证输出的o和输入信号x1,x2,不再是简单的线性关系,而其中的计算也将会随着隐层的增加而无限度地复杂化。
我们可以比较一下单层感知器和多层感知器的分类能力:
由上图可以看出,随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。
异或问题的解决:
BP算法
在M-P模型中,我们得知,为了实现有效的分类,需要加入一定数量的隐层来加强算法的复杂性,而在隐层内部的计算我们是无法得知的,因此,我们需要进行神经网络的训练。
这样说可能有点突兀,我们不妨这样想,我们已知的是一组数据和它们相对应的分类状况,求解的是如何可以用同类的数据来得到正确的分类。
或者这样说,我们已知:
x1=2,x2=3时,y=5,x1=4,x2=5时,y=9,那么,求解x1=8,x2=0时,y的值,这样是不是好理解很多?
总之,我们需要的是一个可以满足当前条件的“公式”,让它可以计算出更多的数据,这在我们的小学数学里叫做解算式,在这里就可以叫做训练。
我们需要知道这些数据在隐层里是经过怎样的计算,才得到了输出结果,于是,我们需要先进性数据的训练,然后再根据现有未知结果的数据套进去,得到预期结果。
而我们在这里,得出的所谓隐层结构的计算,就是需要训练出的“公式”。
具体的BP训练方式下次更新。