人人都能懂的机器学习——用Keras搭建人工神经网络02

感知机

1957年,Frank Rosenblatt发明了感知机,它是最简单的人工神经网络之一。感知机是基于一个稍稍有些不同的人工神经元——阈值逻辑元(TLU)(见图1.4),有时也被称为线性阈值元(LTU)。这种神经元的输入和输出不再是二进制的布尔值,而是数字。每一个输入连接都与权重值相关联,TLU将各个输入加权取和

然后将其带入一个阶跃函数,并输出结果:

上述计算过程如下图1.4所示

图1.4阈值逻辑单元:一个人工神经元,计算其输入的加权和,然后应用一个阶跃函数.jpg

感知机中最常用的阶跃函数是Heaviside阶跃函数,有时也会使用符号函数,如下式所示

单个的TLU可以用来简单线性二元分类,计算输入的线性和。如果该结果超过了一个阈值,则输出正值,否则输出负值(就像一个逻辑回归分类器或者一个线性SVM)。你可以用单个TLU来根据花瓣的长度和宽度来识别鸢尾花。而训练一个TLU,就是找到,,的正确的值(稍后就会讨论训练的算法)。

一个感知机就是由一层TLU简单组合而成的,每个TLU都与所有的输入连接。一层中所有的神经元都与前一层的每一个神经元(也就是输入神经元)连接,那么这一层就叫做全连接层,或者叫稠密层。感知机的输入被传递到特殊的传递神经元,叫做输入神经元,他们的功能就是直接输出任何它们接收的内容。输入层就由输入层以及一个额外的偏差特征()组成,这个偏差特征由一种特别的偏差神经元来表示,它总是输出1。下图1.5中展示了一个2个输入和三个输出的感知机。这个感知机可以将案例同时按照三个不同二元类分类,成为一个多元输出分类器。

图1.5拥有2个输入神经元,1个偏差神经元和三个输出神经元的感知机结构.jpg

使用线性代数,我们可以非常高效地一次性计算出人工神经网络的输出结果,如下式所示:

  • 在上式中,表示输入特征矩阵。输入特征矩阵的一行代表一个例子,一列代表一个特征

  • 为权值矩阵,包含了所有神经元间的连接权值,除了偏置神经元。每行代表一个输入神经元的权值,每列代表该层中的一个神经元的权值

  • 函数称为激活函数,当神经元为TLU时,该激活函数为阶跃函数(未来还将展示更多的激活函数)

那么感知机该如何去训练呢?Frank Rosenblatt提出的感知机训练算法很大程度上收到了Hebb学习规则的启发。在Donald Hebb于1949年出版的《The Organization of Behavior》一书中,他指出当一个生物神经元频繁地激活另一个神经元时,两个神经元之间的连接会变得更强。Siegrid Löwel用一句话总结了Hebb的观点:“Cell that fire together, wire together”,也就是说两个神经元同时被激活时,它们的连接权值会增加。这个规则之后就被称为Hebb规则或Hebb学习规则。感知机就利用这个规则的变体进行训练,它将考虑到神经网络在进行预测时所犯的错误,感知机再将加强有助于减少错误的神经元之间的联系。更具体地说,就是感知机接收一个训练实例,对于每个训练实例它将输出一个预测,对于每个产生错误预测的输出神经元,它都会加强与有助于帮其做出正确预测的输入神经元的联系。

  • 上式中,为第i个输入神经元与第j个输出神经元之间的连接权值
  • 为当前训练实例的第i个输入值,也就是当前训练实例中输入给第i个输入神经元的值,也就是第i个特征的值
  • 是第j个输出神经元对当前训练实例输出的结果,也就是第j个输出神经元的预测的值
  • 是第j个输出神经元对当前训练实例期望得到的结果,也就是当前训练实例的实际的结果
  • 为学习率,即learning rate

每个输出神经元的决策边界是线性的,所以感知机无法学习复杂的模式(就像逻辑回归分类器)。然而,如果训练实例是线性可分的,Rosenblatt证明了这个算法会收敛于一个解,这就是感知机收敛定理。注意,这个解并不是唯一的,因为如果训练数据线性可分,那么就会有无数个可以分割它们的平面。

Scikit-Learn提供了一个可以实现单个TLU的Perceptron类,这里有个简单的例子,将这个算法应用在iris数据集上:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron

iris = load_iris()
X = iris.data[:, (2, 3)] 
y = (iris.target == 0).astype(np.int) 
per_clf = Perceptron()
per_clf.fit(X, y)
y_pred = per_clf.predict([[2, 0.5]])

感知机的学习算法与随机梯度下降(Stochastic Gradient Descent)非常相似。实际上Scikit-Learn的感知机就相当于使用一个SGD Classifier,其中的超参是这样的:loss = "perceptron", learning_rate = "constant", eta0 = 1, penalty = None。其中eta0即为学习率,Penalty设为零即为不做正则化处理。

与逻辑回归分类器不同的是,感知机并不输出一个类的概率,而是基于一个阈值直接输出预测。这就是大家相比于感知机更倾向于使用逻辑回归的原因之一。

Marvin Minsky和Seymour Papert在他们1969年发表的著作《感知机》中,强调了感知机的一些重要缺陷,特别是它无法解决一些琐碎的问题,比如异或问题(见图1.6)。这对其他所有的线性分类模型来说都是个问题,比如逻辑回归分类器。研究人员对感知机的期望过高,有些人结果非常失望,结果完全放弃了神经网络,转而去研究更高的问题比如逻辑,问题解决和搜索。

事实证明,有些感知机的局限可以通过多个感知机相叠加而消除。由此而产生的ANN就被称为多层感知机(MLP),并且MLP可以解决XOR问题(异或问题)。你可以通过计算图1.6右侧的MLP的输出来验证这一点:如果输入(0,0)或(1,1),则该网络输出0;输入(0,1)或(1,0),则该网络输出1。除图中标出的4个连接的权值以外,所有连接的权值都等于1。那么由此证明了,这个MLP确实解决了XOR问题。

图1.6XOR分类问题和MLP.jpg

下一篇文章我们讲讲如何训练感知机

尽请期待啦!!

你可能感兴趣的:(人人都能懂的机器学习——用Keras搭建人工神经网络02)