感知机(Perceptron)是Frank Rosenblatt在1957年提出的概念,其结构与MP模型类似,一般被视为最简单的人工神经网络,也被作为二元线性分类器广泛使用。
在通常情况下,感知机是指单层的人工神经网络,以区别于多层感知机(Multilayer Perceptron)。尽管感知机结构简单,但其能够学习并解决较复杂问题。其结构如图1.15所示。
假设有一个 n 维输入的单层感知机, x 1 ~ x n 为 n 维输入向量的各个分量, w 1 ~ w n 为各个输入分量连接到感知机的权量(或称权值), θ 为阈值, f 为激活函数(又称激励函数或传递函数), y 为标量输出。理想的激活函数 f ( · )通常为阶跃函数或Sigmoid函数。
图1.15 感知机结构
感知机的输出是输入向量 X 与权重向量 W 求内积后经激活函数 f 所得到的标量。
权重向量 W 的初始值一般是随机设置的,往往达不到较好的拟合结果。那如何更改权重数值使标量输出 y 逼近实际值呢?这时需要简单了解感知机的学习过程。
首先按照式(1.1)得到输出值,然后将实际输出值和理论输出值做差,由此来调整每个输出端的权值。学习规则是用来计算新的权重向量 W 及新的偏差 B 的算法。
下面举一个实际的例子来说明。
中国常用的长度单位为厘米(cm),美国常用的长度单位为英寸(in),两者之间有一个固定的转化公式。现在假设我们并不知道该公式,在单层感知机(目前考虑为单输入)的输入端输入以英寸为单位的数值,希望输出端输出相应的以厘米为单位的数值。
首先我们先设定输入值为10英寸,并随机设定隐藏神经元的数值,假设 w 为1。此时单层感知机的输出为
10×1=10(厘米)
但我们知道正确的输出应该为25.4厘米,这时可以计算输出值与真实值之间的差:
误差值=真实值-输出值
=25.4-10
=15.4
下一步用这个误差值对权重 w 进行调整。
如将 w 由1调整至2,可以得到新的结果:10×2=20(厘米)。这个结果明显优于上一个,误差值为5.4。
再次重复上述过程,将 w 调整至3,结果为:10×3=30(厘米),明显超过了真实值,误差为-4.6,与当 w =2时符号相反。
如果误差达到可以接受的范围,就可以停止训练;如果不能接受,可以继续在[2,3]微调 w 。
在上述例子中,感知机接收一个输入,并做出对应的预测,称为预测器。
下面给出一个单层感知机应用于分类问题的Python应用实例。
1.输入数据集与其对应标签
外界输入是4个值,后两个值确定平面上的某个点的位置,前两个值相当于偏置值,与阈值的意义相同, Y 存储每组值对应的正负标签,这里输入了5组数值。现在需要做的是找到一条直线,将正负值区域分开。
2.权重的初始化
随机生成范围为(-1,1)的权重,权重的个数与输入向量维度相同。
3.更新权重函数
若随机生成的权重 W 不能合理区分正负值区域,就要根据当前输出标签和原有标签差值的大小进行权重调整,将二者的差乘以输入 X ,再与学习率lr相乘得到权重改变值,然后与原有权重相加后得到新权重。
完整的代码如下。
感知机分类结果示意如图1.16所示。
单层感知机类似一个逻辑回归模型,可以做线性分类任务,其结构简单,权重更新计算快速,能够实现逻辑计算中的NOT、OR、AND等简单计算。
1969年,美国数学家及人工智能先驱Minsky在其著作中证明了感知机本质上是一种线性模型,只能处理线性分类问题,连最简单的XOR(异或)问题都无法正确解决。这等于直接宣判了感知机的死刑,神经网络的研究也陷入了近20年的停滞。
图1.16 感知机分类结果示意