感知器
感知器是最简单的人工神经网络结构之一,由 Frank Rosenblatt 发明于 1957。它是基于一种稍微不同的人工神经元(见图 10-4),称为线性阈值单元(LTU):输入和输出现在是数字(而不是二进制开/关值),并且每个输入连接都与权重相连。LTU计算其输入的加权和(z = W1×1 + W2×2 + ... + + WN×n = Wt·x
),然后将阶跃函数应用于该和,并输出结果:HW(x) = STEP(Z) = STEP(W^T·x)
。
最常见的在感知器中使用的阶跃函数是 Heaviside 阶跃函数(见方程 10-1)。有时使用符号函数代替。
单一的 LTU 可被用作简单线性二元分类。它计算输入的线性组合,如果结果超过阈值,它输出正类或者输出负类(就像一个逻辑回归分类或线性 SVM)。例如,你可以使用单一的 LTU 基于花瓣长度和宽度去分类鸢尾花(也可添加额外的偏置特征x0=1
,就像我们在前一章所做的)。训练一个 LTU 意味着去寻找合适的W0
和W1
值,(训练算法稍后提到)。
感知器简单地由一层 LTU 组成,每个神经元连接到所有输入。这些连接通常用特殊的被称为输入神经元的传递神经元来表示:它们只输出它们所输入的任何输入。此外,通常添加额外偏置特征(X0=1
)。这种偏置特性通常用一种称为偏置神经元的特殊类型的神经元来表示,它总是输出 1。
图 10-5 表示具有两个输入和三个输出的感知器。该感知器可以将实例同时分类为三个不同的二进制类,这使得它是一个多输出分类器。
那么感知器是如何训练的呢?Frank Rosenblatt 提出的感知器训练算法在很大程度上受到 Hebb 规则的启发。在 1949 出版的《行为组织》一书中,Donald Hebb 提出,当一个生物神经元经常触发另一个神经元时,这两个神经元之间的联系就会变得更强。这个想法后来被 Siegrid Löwel 总结为一个吸引人的短语:“一起燃烧的细胞,汇合在一起。”这个规则后来被称为 Hebb 规则(或 HebBIN 学习);也就是说,当两个神经元具有相同的输出时,它们之间的连接权重就会增加。使用这个规则的变体来训练感知器,该规则考虑了网络所犯的错误;它不加强导致错误输出的连接。更具体地,感知器一次被馈送一个训练实例,并且对于每个实例,它进行预测。对于每一个产生错误预测的输出神经元,它加强了输入的连接权重,这将有助于正确的预测。该规则在公式 10-2 中示出。
其中
Wi,j
是第i
输入神经元与第J
个输出神经元之间的连接权重。xi
是当前训练实例与输入值。Y
帽是当前训练实例的第J
个输出神经元的输出。Yj
是当前训练实例的第J
个输出神经元的目标输出。ε
是学习率。
每个输出神经元的决策边界是线性的,因此感知机不能学习复杂的模式(就像 Logistic 回归分类器)。然而,如果训练实例是线性可分离的,Rosenblatt 证明该算法将收敛到一个解。这被称为感知器收敛定理。
sklearn 提供了一个感知器类,它实现了一个 LTU 网络。它可以像你所期望的那样使用,例如在 iris 数据集(第 4 章中介绍):
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(random_state=42)
per_clf.fit(X, y)
y_pred = per_clf.predict([[2, 0.5]])
您可能已经认识到,感知器学习算法类似于随机梯度下降。事实上,sklearn 的感知器类相当于使用具有以下超参数的 SGD 分类器:loss="perceptron"
,learning_rate="constant"
(学习率),eta0=1
,penalty=None
(无正则化)。
注意,与逻辑斯蒂回归分类器相反,感知机不输出类概率,而是基于硬阈值进行预测。这是你喜欢逻辑斯蒂回归很好的一个理由。
在他们的 1969 个题为“感知者”的专著中,Marvin Minsky 和 Seymour Papert 强调了感知机的许多严重缺陷,特别是它们不能解决一些琐碎的问题(例如,异或(XOR)分类问题);参见图 10-6 的左侧)。当然,其他的线性分类模型(如 Logistic 回归分类器)也都实现不了,但研究人员期望从感知器中得到更多,他们的失望是很大的:因此,许多研究人员放弃了联结主义(即神经网络的研究),这有利于更高层次的问题,如逻辑、问题解决和搜索。
然而,事实证明,感知器的一些局限性可以通过堆叠多个感知器来消除。由此产生的人工神经网络被称为多层感知器(MLP)。特别地,MLP 可以解决 XOR 问题,因为你可以通过计算图 10-6 右侧所示的 MLP 的输出来验证输入的每一个组合:输入(0, 0)
或(1, 1)
网络输出 0,并且输入(0, 1)
或(1, 0)
它输出 1。