2.2 感知机
在本节中,我们将介绍一种简单的神经网络——感知机。早在1958年,科学家Frank Rosenblatt在《神经动力学原理:感知机和大脑机制的理论》(Principles of Neurodynamics:Perceptrons and the Theory of Brain Mechanisms)一书中首次提出了“感知机”这个名词,这在当时可以说是里程碑式的开端。在这部著作中,感知机是一个由两层神经元组成的神经网络,尽管结构简洁,但效果突出。
感知机的结构,如图2.5所示。可以看到,在输入层中是我们选取的输入值x1,x2,x3,…,xn,它们会分别乘以一系列初始权重值,在加权传递后求和,得到的值会与某个阈值进行比较,若大于这个阈值就输出1,否则输出0。这个过程想必读者十分熟悉——与2.1节所述的神经元模型相似。但在那个时代,这种能够完成基本逻辑判断的感知机已经很不一般了。
图2.5 感知机的结构
感知机的训练方法也很明确:人工选取N组样本,将样本中的输出与实际的输出进行对比;若相同,则说明权值符合当前模型;若不同,就需要对当前权值进行调整和优化。例如,输出为1但样本为0,就将当前权重加上输入值作为新的权值,继续训练;同理,输出为0但样本为1,就将当前权重减去输入值作为新的权值,继续训练。经过大量样本的训练,模型被不断优化,偏差次数越来越小,最终符合所有的样本。
从上述对感知机学习方式的介绍中可以知道,感知机对线性可分问题有很好的效果,可以通过大量的训练得到一个精准的模型。抽象一点,我们可以想象:在一个二维坐标平面上随意画一条线,然后在线的两侧随机取无数个点,这些点的坐标就是我们的训练样本。假设在线上方的点输出1,在线下方的点输出-1,那么感知机最终可以通过这些点拟合出这条分隔线。之后,任意给出平面上的一个点,就可以判断其位于线的哪一侧了。
然而,人们在随后更加深入的研究中发现,感知机也有一些不足。一是感知机的训练样本是手动输入的,需要事先进行提取;二是感知机不能解决非线性分类问题,例如我们熟悉的异或问题。
针对感知机无法处理非线性分类这一问题,早在20世纪70年代,科学家Paul Werbos就在他的博士毕业论文中进行了论证:将感知机进行叠加,组成多层神经网络,就可以解决非线性不可分的问题。他还提出了可以提高神经网络预测精度的后向传递训练方法。
一个可以解决异或问题的神经网络,如图2.6所示。激活函数使用sigmoid函数,加权和大于0时取1,其他情况下取0。将异或的几组样本值分别带入,计算预测值是否与真实值相等。假设x1=0、x2=0,经过第一层运算,x3=0、x4=0,再进行最后一层运算,得到=0,与真实值y相等。换一组数据进行计算,令x1=0、x2=1,经过第一层运算,x3=0、x4=1,再进行最后一层运算,得到=1,与真实值y相等。对剩余的数据,读者可自行验证。这个神经网络可以完美地拟合异或问题。
图2.6 将感知机叠加后的一个可用于解决异或问题的多层神经网络
可见,当感知机不再只有一个计算层,而变成多个计算层后,将形成多层神经网络,也就是我们常说的深度神经网络(deep neural network,DNN)。对非线性问题,DNN可以经过大量样本训练得到一个较为精准的拟合结果。