### M-P模型的来源
所谓M-P模型,其实是按照生物神经元的结构和工作原理构造出来的一个抽象和简化了的模型。
下图是生物神经元结构。
![](https://box.kancloud.cn/2016-07-25_5795bdccbb72d.png "")
大家可以查一查一些生物方面的书籍,了解一下这个神经元是如何工作的。我们可以概括出生物神经网络的假定特点:
1. 每个神经元都是一个**多输入单输出**的信息处理单元;
2. 神经元输入**分兴奋性输入**和**抑制性输入**两种类型;
3. 神经元具有**空间整合特性**和**阈值特性**;
4. 神经元输入与输出间有固定的**时滞**,主要取决于突触延搁
### M-P模型
按照生物神经元,我们建立M-P模型。为了使得建模更加简单,以便于进行形式化表达,我们忽略时间整合作用、不应期等复杂因素,并把神经元的突触时延和强度当成常数。下图就是一个M-P模型的示意图。
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdccdfc25.jpg "")
那么接下来就好类比理解了。我们将这个模型和生物神经元的特性列表来比较:
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdcd01c5b.jpg "")
结合M-P模型示意图来看,对于某一个神经元j (注意别混淆成变量了,在这里j 只是起到标识某个神经元的作用),它可能接受同时接受了许多个输入信号,用 χi 表示。
由于生物神经元具有不同的突触性质和突触强度,所以对神经元的影响不同,我们用权值 ωij 来表示,其正负模拟了生物神经元中突出的兴奋和抑制,其大小则代表了突出的不同连接强度。
θj表示为一个阈值(threshold),或称为偏置(bias)。
由于累加性,我们对全部输入信号进行累加整合,相当于生物神经元中的膜电位(水的变化总量),其值就为:
net'j(t)=∑i=1nωijχi(t)−θj
神经元激活与否(外接专用水管流出与否)取决于某一阈值电平(水位高度),即只有当其输入总和超过阈值θj 时,神经元才被激活而发放脉冲,否则神经元不会发生输出信号。整个过程可以用下面这个函数来表示:
yj=f(netj)
yj表示神经元j的输出,函数f称为激活函数 ( Activation Function )或转移函数 ( Transfer Function ) ,net'j(t)称为净激活(net activation)。
若将阈值看成是神经元j的一个输入x0的权重w0j,则上面的式子可以简化为:
net'j(t)=∑i=0nωijχi(t)
yj=f(netj)
若用X表示输入向量,用W表示权重向量,即:
X=[χ0,χ1,…,χn]
M=⎡⎣⎢⎢⎢⎢⎢ω0jω1j⋮ωnj⎤⎦⎥⎥⎥⎥⎥
则神经元的输出可以表示为向量相乘的形式:
netj=XW
yj=f(netj)=f(XW)
若神经元的净激活net为正,称该神经元处于激活状态或兴奋状态(fire),若净激活net为负,则称神经元处于抑制状态。
由此我们可以得到总结出M-P模型的6个特点:
1. 每个神经元都是一个多输入单输出的信息处理单元;
2. 神经元输入分兴奋性输入和抑制性输入两种类型;
3. 神经元具有空间整合特性和阈值特性;
4. 神经元输入与输出间有固定的时滞,主要取决于突触延搁;
5. 忽略时间整合作用和不应期;
6. 神经元本身是非时变的,即其突触时延和突触强度均为常数。
前面4点和生物神经元保持一致。
结合公式来看,输入χij的下标 i=1,2,...,n,输出 yj 的下标j 体现了第1个特点“多输入单输出”;
权重值 ωij 的正负体现了第2个特点中“突触的兴奋与抑制”;
θj 代表第3个特点 中的阈值,当 net'j(t)−Tj>0 时,神经元才能被激活;
为了简单起见,对膜电位的计算net'j(t) 并没有考虑时间整合,只考虑了空间整合,即只对每条神经末梢传来的信号根据权重进行累加整合,而没有考虑输入输出间的突触时延,体现了第5个特点。
这种“阈值加权和”的神经元模型称为**M-P模型 ( McCulloch-Pitts Model )**,也称为神经网络的一个**处理单元( PE, Processing Element )**。
### 常用激活函数
激活函数的选择是构建神经网络过程中的重要环节,下面简要介绍常用的激活函数。
### (1) 线性函数 ( Liner Function )
![](https://box.kancloud.cn/2016-07-25_5795bdcd1be0f.png "")
### (2) 斜面函数 ( Ramp Function )
![](https://box.kancloud.cn/2016-07-25_5795bdcd3410d.png "")
### (3) 阈值函数 ( Threshold Function )
![](https://box.kancloud.cn/2016-07-25_5795bdcd48bb8.png "")
以上3个激活函数都属于线性函数,下面介绍两个常用的非线性激活函数。
### (4) S形函数 ( Sigmoid Function )
![](https://box.kancloud.cn/2016-07-25_5795bdcd5a853.png "")
该函数的导函数:
![](https://box.kancloud.cn/2016-07-25_5795bdcd6fbce.png "")
### (5) 双极S形函数
![](https://box.kancloud.cn/2016-07-25_5795bdcd87d96.png "")
该函数的导函数:
![](https://box.kancloud.cn/2016-07-25_5795bdcd9c940.png "")
S形函数与双极S形函数的图像如下:
![S形函数与双极S形函数图像](https://box.kancloud.cn/2016-01-05_568b36934f39b.jpg "")
双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(−1,1),而S形函数值域是(0,1)。
由于S形函数与双极S形函数都是可导的(导函数是连续函数),因此适合用在BP神经网络中。(BP算法要求激活函数可导)
### 最简单的神经网络结构——感知器
在1958年,美国心理学家Frank Rosenblatt提出一种具有单层计算单元的神经网络,称为感知器(Perceptron)。它其实就是基于M-P模型的结构。我们可以看看它的拓扑结构图。
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdcdb5e70.png "")
这个结构非常简单,如果你还记得前面所讲的M-P神经元的结构的话,这个图其实就是输入输出两层神经元之间的简单连接(如果忘了可以看看第一话的模型示意图)。
由第一话的(2)中我们知道输入层各节点的输入加权和
net'j=∑i=1nωijxi
我们一般采用符号函数来当作单层感知器的传递函数,即输出
oj=sgn(net′j−θj)=sgn(∑i=0nωijxi)=sgn(WTjX)
公式(2)可以进一步表达为:
oj={ 1,−1,WTjX>0WTjX<0
### 单层感知器的局限性
虽然单层感知器简单而优雅,但它显然不够聪明——它仅对线性问题具有分类能力。什么是线性问题呢?简单来讲,就是用一条直线可分的图形。比如,逻辑“与”和逻辑“或”就是线性问题,我们可以用一条直线来分隔0和1。
1)逻辑“与”的真值表和二维样本图如图2:
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdcdd1511.png "")
2)逻辑“或”的真值表如图3:
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdcde47c2.png "")
为什么感知器就可以解决线性问题呢?这是由它的传递函数决定的。这里以两个输入分量 x1 和 x2 组成的二维空间为例,此时节点 j 的输出为
oj={ 1,−1,ω1jx1+ω2jx2−θj>0ω1jx1+ω2jx2−θj<0
所以,方程
ω1jx1+ω2jx2−θj=0
确定的直线就是二维输入样本空间上的一条分界线。对于三维及更高维数的推导过程可以参考其他的Tutorials。
如果要让它来处理非线性的问题,单层感知器网就无能为力了。例如下面的“异或”,就无法用一条直线来分割开来,因此单层感知器网就没办法实现“异或”的功能。
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdce04abb.png "")
### 多层感知器的瓶颈
既然一条直线无法解决分类问题,当然就会有人想到用弯曲的折线来进行样本分类。我们常常听到一句批评人笨的话“你这人脑袋就是不会转弯!”大意就是如此,脑袋会转弯的人才善于解决问题。所以,人们请来了单层感知器他哥——多层感知器来帮忙。所谓多层感知器,就是在输入层和输出层之间加入隐层,,以形成能够将样本正确分类的凸域。多层感知器的拓扑结构如下图所示。
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdce1bf15.png "")
我们可以比较一下单层感知器和多层感知器的分类能力:
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdce2f98f.png "")
由上图可以看出,随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:**双隐层感知器就足以解决任何复杂的分类问题**。
多层感知器确实是非常理想的分类器,但问题也随之而来:隐层的权值怎么训练?对于各隐层的节点来说,它们并不存在期望输出,所以也无法通过感知器的学习规则来训练多层感知器。因此,多层感知器心有余而力不足,虽然武功高强,但却无力可施。
### ANN的低潮期
1966年,Minisky和Papert在他们的《感知器》一书中提出了上述的感知器的研究瓶颈,指出理论上还不能证明将感知器模型扩展到多层网络是有意义的。这在人工神经网络的历史上书写了极其灰暗的一章。对ANN的研究,始于1890年开始于美国著名心理学家W.James对于人脑结构与功能的研究,半个世纪后W.S.McCulloch和W.A.Pitts提出了M-P模型,之后的1958年Frank Rosenblatt在这个基础上又提出了感知器,此时对ANN的研究正处在升温阶段,《感知器》这本书的出现就刚好为这刚刚燃起的人工神经网络之火泼了一大盆冷水。一时间人们仿佛感觉对以感知器为基础的ANN的研究突然间走到尽头,看不到出路了。于是,几乎所有为ANN提供的研究基金都枯竭了,很多领域的专家纷纷放弃了这方面课题的研究。
![这里写图片描述](https://box.kancloud.cn/2016-07-25_5795bdce5116f.png "")
### ANN研究的复苏和BP神经网络的诞生
所以说真理的果实总是垂青于能够忍受寂寞的科学家。尽管ANN的研究陷入了前所未有的低谷, 但仍有为数不多的学者忍受住寂寞,坚持致力于ANN的研究。在长达10年的低潮时期之间,相 继有一些开创性的研究成果被提出来,但还不足以激起人们对于ANN研究的热情。一直到上世 纪80年代,两个璀璨的成果诞生了:1982年美国加州理工学院的物理学家John J.Hopfield博 士的Hopfield网络和David E.Rumelhart以及James L.McCelland研究小组发表的《并行分布 式处理》。这两个成果重新激起了人们对ANN的研究兴趣,使人们对模仿脑信息处理的智能计 算机的研究重新充满了希望。
前者暂不讨论,后者对具有非线性连续变换函数的多层感知器的误差反向传播(Error Back Propagation)算法进行了详尽的分析,实现了 Minsky 关于多层网络的设想。Error Back Propagation算法的简称就是BP算法,以BP算法实现的多层感知器网络就是[BP网络](http://blog.csdn.net/u013007900/article/details/50118945)。
所以,BP网络本质上并不是一个新的网络,而是使用BP学习算法的多层感知器网络。