(BP进阶1)从M-P模型到BP神经网络
2017-11-18 20:41
218 查看
M-P模型
M-P模型,其实就是按照生物神经元的结构和工作原理来构造出来的比较简单的模型。下图为M-P模型的示意图:![](http://upload-images.jianshu.io/upload_images/1825077-cc5decc25ffad5dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
具体的推论详见http://blog.csdn.net/u013007900/article/details/50066315
抛去繁重的公式,我们可以把这个模型理解为:
要想下一个神经元接收到信息,那么接收到的信号一定要大于某一个阙值θ才能由输出信号yj输出,该阙值由具体的神经元决定;也就是说,输入的信号总和在经过神经元后失去了阙值θ的信号以后,转化为输出信号输出。
我们假每一个输出信号x都输入一定的神经元Wij,那么该神经元共接收到的输入信号即为
![](http://upload-images.jianshu.io/upload_images/1825077-6c9a86a45b0f9b6d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这个公式不难理解,于是在神经元中失去了阙值量θ后:
![](http://upload-images.jianshu.io/upload_images/1825077-8c0867cafe129e05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
经过信号转化(激活函数f(x)的作用)为输出信号:
![](http://upload-images.jianshu.io/upload_images/1825077-95edd6b0ab951574.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
然而神经元突触的信号类型又分为兴奋和抑制两种状态,于是,在M-P模型中,这种性质体现为权值w的正负,如果权值是负,那么输出y值就也为负,体现为抑制状态;如果权值是正,那么输出y值就也为正,体现为兴奋状态。
这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。
激活函数
常用的激活函数有五种:线性激活函数:
1.线性函数 ( Liner Function )
![](http://upload-images.jianshu.io/upload_images/1825077-81f1bdbd0a2667e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.斜面函数( Ramp Function )
![](http://upload-images.jianshu.io/upload_images/1825077-547407b56047a285.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.阙值函数( Threshold Function )
![](http://upload-images.jianshu.io/upload_images/1825077-05495afc05c74ffb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
非线性激活函数:
4.S形函数( Sigmoid Function )
![](http://upload-images.jianshu.io/upload_images/1825077-1ca3a398be174072.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.双极性S形函数
![](http://upload-images.jianshu.io/upload_images/1825077-40e3bc616c3f7502.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
S形函数与双极S形函数的图像如下:
![](http://upload-images.jianshu.io/upload_images/1825077-268e0b9c5a9f4866.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在进行BP神经网络进行训练的时候,我们常用的函数是S形函数。
感知器
简单来说,感知器就是一个简单的神经网络模型,以下是感知器的拓扑结构图:![](http://upload-images.jianshu.io/upload_images/1825077-fac6a63762a7733b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
xi表示输入信号,wi表示权值,oi表示输出信号,表现的是输入输出两层神经元的简单连接,
![](http://upload-images.jianshu.io/upload_images/1825077-71158b6ba8784a84.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
而oi表现形式为两种,1和-1,来表示兴奋和抑制。
多层感知器
我们将突触的兴奋和抑制两种兴奋类型的分类运用到数学计算的分类上面,假设两组数据共有4个数据,每个数据都有两个输入信号:(0,0),(0,1),(1,0),(1,1),每个数据都进行了一个(sgn)与运算,将所求结果进行分类:计算后结果为:![](http://upload-images.jianshu.io/upload_images/1825077-cadce922ae6e44dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
分类后:
![](http://upload-images.jianshu.io/upload_images/1825077-77f5bd3bd63b09b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
图1
因此,单层感知器的作用为可以使用一条直线来对输入数据进行线性分类,如果仍旧不太明白的话,可以从公式入手来进行分析:
我们已知在该例中输入信号共有两个,那么就有:
![](http://upload-images.jianshu.io/upload_images/1825077-f15911e01335c4fc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
假设权值w的值是常数,那么,可以根据上述的推论得出公式:
![](http://upload-images.jianshu.io/upload_images/1825077-5d874d2f971fc975.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
所以可以得知,这是一个关于x1,x2的线性函数,而在图1中用于分类的红色直线,则是与函数w1j x1+w2j x2-θj=0成线性关系的函数。
到此,我们已经讲解了单层感知器的实现分类原理,引入多层分类器的原因在于,单层感知器的局限性只能区分二维平面中的线性函数,而对于多维平面,或着非线性函数来说,则无法实现分类。
于是,我们引入了有隐层的多层感知器:
![](http://upload-images.jianshu.io/upload_images/1825077-2f493384882d94ea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以看出,在加入了隐层以后输入层的数据不再直接经过简单的权值激活运算就直接进入输出层,而是在多层的隐层经过复杂计算后,再输入层输出,这样的计算方法,可以保证输出的o和输入信号x1,x2,不再是简单的线性关系,而其中的计算也将会随着隐层的增加而无限度地复杂化。
我们可以比较一下单层感知器和多层感知器的分类能力:
![](http://upload-images.jianshu.io/upload_images/1825077-8c7cdd80a581dc26.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
由上图可以看出,随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。
异或问题的解决:
![](http://upload-images.jianshu.io/upload_images/1825077-d21d0457eb646c7c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
双隐层感知器实现空间的分割
BP算法
在M-P模型中,我们得知,为了实现有效的分类,需要加入一定数量的隐层来加强算法的复杂性,而在隐层内部的计算我们是无法得知的,因此,我们需要进行神经网络的训练。这样说可能有点突兀,我们不妨这样想,我们已知的是一组数据和它们相对应的分类状况,求解的是如何可以用同类的数据来得到正确的分类。
或者这样说,我们已知:
x1=2,x2=3时,y=5,x1=4,x2=5时,y=9,那么,求解x1=8,x2=0时,y的值,这样是不是好理解很多?
总之,我们需要的是一个可以满足当前条件的“公式”,让它可以计算出更多的数据,这在我们的小学数学里叫做解算式,在这里就可以叫做训练。
我们需要知道这些数据在隐层里是经过怎样的计算,才得到了输出结果,于是,我们需要先进性数据的训练,然后再根据现有未知结果的数据套进去,得到预期结果。
而我们在这里,得出的所谓隐层结构的计算,就是需要训练出的“公式”。
相关文章推荐
- (BP进阶2)学习和实现BP神经网络
- Deep Learning-TensorFlow (4) CNN卷积神经网络_CIFAR-10进阶图像分类模型(上)
- Deep Learning-TensorFlow (5) CNN卷积神经网络_CIFAR-10进阶图像分类模型(下)
- Runtime进阶三:字典转模型
- SOCKET编程进阶之Overlapped I/O事件通知模型
- 【C#进阶系列】01 CLR的执行模型——一个Hello World的故事
- Gensim进阶教程:训练word2vec与doc2vec模型
- Swift进阶之内存模型和方法调度
- Django 数据模型进阶
- BP神经网络模型与学习算法
- SOCKET编程进阶之Overlapped I\O事件通知模型
- SOCKET编程进阶之Overlapped I/O完成例程模型
- Django 模型系统(model)&ORM--进阶
- Swift进阶之内存模型和方法调度
- RabbitMQ3.7.2入门到进阶之Topic主题模型
- python进阶之多线程(进程)同步执行的消费者与生产者模型
- BP网络模型的实现(C#)
- SOCKET编程进阶之Overlapped I\O事件通知模型
- SOCKET编程进阶之Overlapped IO完成例程模型
- 简单的bp网络模型