3.4 感知器
3.4.1 单层感知器
感知器是美国康奈尔大学的罗森布拉特于1958年提出的,之所以称为感知器,是因为这种学习算法可以学习如何将图案进行分类,例如识别字母、数字。在1.3节已经讲过,感知器是深度学习的两大起源之一,如果理解了感知器学习识别图案的基本原理,那么,你已理解了一半的深度学习工作原理,所以,还是有必要简单介绍一下感知器。
与M-P模型一样,单个单层感知器通常可以接收多个输入信号,只输出一个信号,感知器的输入信号只有“0/1”两种。感知器根据其结构有单层和多层之分。
单层感知器是最简单的前馈神经网络,仅包含输入层和输出层。而且,只有输出层的神经元是可计算节点。
如图3-5所示,在单层感知器中,每个可计算节点都是一个线性阈值神经元,当输入信息的加权和大于等于阈值时,其输出为1,否则输出为0。其计算公式为:
图3-5 单层感知器
感知器的作用是完成外部输入的分类识别。罗森布拉特已经证明(感知器收敛定理),如果外部输入是线性可分的,则单层感知器一定能够把它分成两类。
从结构上看,单层感知器与M-P模型是一样的,但这两者的区别是本质的,M-P模型的连接权重参数wi和阈值h是事先设定的,不能改变;而感知器的连接权重参数wi和阈值h是可以通过训练自动修正的。这是一个了不起的进步,人们只需给感知器一组参数,然后再给它足够的样本数据让其学习,它就可以自己找到一组更合适的参数!
训练的方式为有监督学习,就是事先设定期望输出r,然后计算实际输出y和期望输出r之间的误差,如果这个误差没有满足预期控制标准,则调整参数后再继续训练,直至误差满足预期标准,或者参数不再变化。这种方法称为误差修正学习。
为了有一个感性认识,先简单说明如何实现自动调整连接权重和阈值,严格的过程将在误差反向算法中给出。
假设感知器有n个输入信号,其参数调整算法大致为:
第t次输入信号用n+1维输入向量表示,+1是将阈值当作第0个输入,这样做可以将阈值与连接权重一起处理:
x(t)=[1, x1(t), x2(t), …, xn(t)]T
相应地,这n+1个连接权重组成的向量为:
w(t)=[h, w1(t), w2(t), …, wn(t)]T
h为阈值,y(t)为实际输出值,r(t)为期望输出值,注意,输出值是0或1。η为学习率,0<η≤1。
更新参数w的做法:用w+∆w来替代原来的w,即每次迭代时,权重的修正量为∆w:
① 初始化。设w(0)=0,依次对时间步t=1, 2, …执行下列计算
② 输入感知器。在时间步t,输入向量x(t)
③ 计算实际输出。y(i)=f[wT(t)x(t)]
④ 权重向量的自动修正。更新感知器的权重向量
w(t+1)=w(t)+η[r(t)−y(t)]x(t)
⑤ 继续。时间步t增加1,返回第②步。
感知器虽然具备了学习能力,但它还存在一个很大的局限性,无法解决二维平面中简单的线性不可分的分布问题。感知器输出取值的判断依据仍然是边界决策平面:。这是一个线性平面,无法处理线性不可分的情况。如图3-6右侧所示的两种线性不可分情况,用决策平面作为分类工具时就无法进行分类。因此,单层感知器无法处理线性不可分时的数据分类问题。
图3-6 线性可分与不可分图示
受感知器的启发,1995年,俄罗斯数学家弗拉基米尔·瓦普尼克(Vladimir Vapnik)设计了一种新的分类器,称为“支持向量机”(Support Vector Machine),支持向量机可以在有限的样本情况下学习寻求最佳的分类方案。支持向量机分为线性和非线性两类,线性支持向量机是以样本间的欧氏距离大小为依据来决定划分结构的,非线性的支持向量机中以卷积核函数代替内积后,相当于定义了一种广义的距离,以这种广义距离作为划分依据。
3.4.2 多层感知器
为解决线性不可分数据的分类问题,1974年,哈佛大学博士沃波斯的博士论文证明了在单层感知器中多加一层,形成一个多层感知器,就可以解决异或问题的分类。
如图3-7所示,多层感知器是由多个单层感知器叠加组成的前馈网络,通常由输入层、中间层(可以不止一个)和输出层组成。
图3-7 多层感知器
中间层的各神经元连接输入层各单元,同样将每个输入xi乘以相应的连接权重wi,然后再累加,最后通过激活函数计算中间层各单元的输出值,输出层的计算过程也类似。下面通过多层感知器解决线性不可分问题中异或问题的分类来看各层是如何进行运算的。
如图3-8所示,感知器采用的激活函数为阶梯函数,初始输入为x1, x2,输入层与中间层的连接权重为w1=w2=1,中间层的阈值分别为h1=1.5, h2=0.5,中间层与输出层的的连接权重为w3=−2, w4=1,输出层的阈值为h=0.5,输出为y。
图3-8 多层感知器实现异或运算
当x1=1, x2=1时,
f1=f(w1x1+w2x2−h1)=f1(1×1+1×1−1.5)=f1(0.5)=1
f2=f2(1×1+1×1−0.5)=f1(1.5)=1
y=f(w3f1+w4f2−h)=f(−2×1+1×1−0.5)=f(−1.5)=0
同样,当x1=0, x2=0时,可以算出,y=0
当x1=1, x2=0时,y=1;
当x1=0, x2=1时,y=1。
这正是异或运算的结果。
注意,连接权重w3取了负值。
沃波斯的这篇博士论文很好地解决了异或问题,但没有得到应有的反响,因为当时正是神经网络研究的低谷。
当然,多层感知器解决了异或问题并不是说可以解决所有非线性分类问题,要解决线性不可分问题通常需要通过核函数映射到高维空间来解决。