从感知器到人工神经网络
在
第
8
章,感知器
里,我们介绍了感知器,一种线性模型用来做二元分类。感知器不是一个通用函数
近似器;它的决策边界必须是一个超平面。上一章里面介绍的支持向量机,用核函数修正了感知器的
不足,将特征向量有效的映射到更高维的空间使得样本成为线性可分的数据集。本章,我们将介绍人
工神经网络(artificial neural networks,ANN),一种用于强大的非线性回归和分类模型,用新的策
略来克服感知器的缺点。
如果把感知器比喻成一个神经元,那么人工神经网络,即神经网,就是一个大脑。人脑就是由十几亿
的神经元和上千亿的突触组成,人工神经网络是一种感知器或其他人工神经的有向图。这个图的边带
有权重,这些权重是模型需要学习的参数。
有许多著作整本书描述人工神经网络;本章主要是对它的结构和训练方法进行介绍。目前scikit-learn
的版本是0.16.1,在2014年Google Summer的项目中,多层感知器已经被作者实现,并提交在scikit-
learn 0.15.1版本中,只是还没有被合并到scikit-learn。在未来的scikit-learn新版本中可能会原封不动
的合并多层感知器的实现。也有一些神经网络模型的Python库,比如PyBrain
(https://github.com/pybrain/pybrain),Pylearn2 (https://github.com/lisa-lab/pylearn2)和scikit-
neuralnetwork (https://github.com/aigamedev/scikit-neuralnetwork)等。
非线性决策边界
在
第
8
章,感知器
里,我们介绍过布尔函数如AND(与),OR(或)和NAND(与非)可以用感知器
近似,而XOR(异或)作为线性不可分函数不能被近似,如下图所示:
让我们深入研究XOR来感受一下人工神经网络的强大。AND是两个输入均为1结果才为1,OR是两个
输入至少有1个1结果即为1。XOR与它们不同,XOR是当两个输入中有且仅有1个1结果才为1。我们
把XOR输出为1的两个输入看出是两个条件均为真。第一个条件是至少有1个输入为1,这与OR的条件
相同。第二个条件是两个输入不都为1,这与NAND的条件相同。我们可以通过处理OR和NAND的输
入,生成同样输出的XOR,然后用AND验证两个函数的输出是否均为1。也就是说,OR,NAND和
AND可以组合生成同样结果的XOR。
下面是XOR,OR,NAND和AND四种函数有两个输入A和B时的输出真值表。从这个表我们可以检验
OR,NAND和AND组合函数的输出,与同样输入的XOR输出相同: