Press "Enter" to skip to content

“Rosenblatt的感知器分类”

机器学习的“hello-world”

Lucie Morel在Unsplash上的照片

最近,我在思考什么是机器学习的最基本介绍。我想要一个简单的任务,比如二元分类,以及一个足够简单的算法,可以从头开始构建,并在一篇简短的文章中解释清楚。如果这个算法有一些历史,那就更好了。没用花费多少时间就找到了候选人:感知机。感知机将我们带到了机器学习的起点。它是由Frank Rosenblatt在60多年前引入的。像神经元一样,感知机规则接受多个输入特征,并拟合权重,当与输入特征向量相乘时,可以决定神经元是否输出信号,或者在机器学习分类的上下文中,输出是否为0或1。感知机可能是最简单的二元分类器,我不知道有哪些实际的机器学习应用可以使用它来解决问题。然而,它具有重要的教育和历史价值,因为它为神经网络铺平了道路。

本文的目的是介绍感知机,并将其用于简单的二元分类任务。感知机已经在scikit-learn中实现,但我们将从头开始构建它,而不是依赖于现成的实现。我们还将创建一系列可视化图表,以了解算法如何设置决策边界,并探索其收敛性。感知机是一个线性模型,包括同时和迭代地调整权重和偏置项的过程。然而,它没有像机器学习历史上的其后继算法——自适应线性神经元(Adaline)算法那样具有连续的损失函数,后者也是一个单层神经网络。感知机的拟合过程只依赖于检测错误分类的样本,并且权重和偏置项在遇到错误分类的样本时立即更新,而不是每个时期(epoch)更新一次(时期是对训练集的完整遍历)。因此,该算法甚至不需要优化器。我敢说它如此简单而优雅,以至于变得美丽。如果你好奇它是如何工作的,请继续关注!

感知机理论

感知机和其他线性模型一样,使用一组权重,每个特征对应一个权重,并通过计算权重和特征值的点积并添加一个偏置项来生成预测。

“Rosenblatt的感知器分类” 四海 第2张

这个线性函数的结果,也称为净输入(net input),被输入到一个激活函数f(z)中,在感知机的情况下,它是一个简单的阶跃函数,即如果z≥0,则f(z)的值为1,否则为0。激活函数的作用是将净输入映射到两个值,即0和1。本质上,我们所做的只是定义了一个超平面。在超平面的同一侧的点属于同一类。权重定义了垂直于超平面的向量,即超平面的方向,偏置项定义了超平面与原点的距离。当拟合过程开始时,我们有一个随机方向和随机距离的超平面。每当我们遇到一个错误分类的样本,我们就微调超平面,并改变它的方向和位置,以便在下一个时期,样本位于超平面的右侧。我们可以决定微调超平面的程度,即学习率应该是多少。

通常,我们需要经过几个时期(epoch)遍历所有样本,直到没有样本被错误分类,或者更准确地说,直到无法再取得更多进展。在每个时期中,我们循环遍历所有样本i = 1,.., nₛₐₘₚₗₑₛ在训练集中,并使用当前的权重和偏置项检查模型是否错误分类,如果是,我们使用学习率η更新所有权重j=1,.., nfₑₐₜᵤᵣₑₛ:

“Rosenblatt的感知器分类” 四海 第3张

其中

“Rosenblatt的感知器分类” 四海 第4张

带有帽子的表示预测输出。我们还使用以下方式更新偏差

“Rosenblatt的感知器分类” 四海 第5张

其中

“Rosenblatt的感知器分类” 四海 第6张

从概念上很容易理解为什么要进行这些操作。假设模型预测为类0,而正确的类别为1。如果xⱼ是正的,那么权重将增加,以增加净输入。如果xⱼ为负,那么权重将减少,以再次增加净输入(无论权重的符号如何)。类似地,偏差将增加,导致净输入进一步增加。通过这些变化,下一个周期中对于错误分类的样本更有可能预测正确的类别。当模型预测为类1,而正确的类别为0时,逻辑类似,唯一的区别是所有的符号都被取反。

如果仔细观察,权重和偏差可以在同一个周期内多次更新,每次都是针对错误分类的样本。每次错误分类都会重新定位和调整决策边界超平面,以便在下一个周期中正确预测样本。

数据准备

我们将使用一个合成数据集,其中包含两个高斯分布。感知机可以与任意维度的特征一起使用,但为了便于可视化,本文将限制在两个维度上。

生成的结果如下图所示

Scatterplot of the two classes in the synthetic dataset. Image by the Author.

通过选择适当的均值和协方差,这两个高斯分布被拉长并分开。我们将在后面再讨论这个问题。

感知机的实现和使用

感知机的实现如下所示。我们使用了scikit-learn的风格来初始化模型,拟合模型,并最终进行预测。

初始化方法设置了学习率、最大迭代次数和随机数生成器的种子,以便进行可复现性。拟合方法创建了一个随机数生成器,然后使用该生成器将权重设置为从均匀分布中随机抽样的一些小数值,而偏差则初始化为零。然后,我们迭代一定次数的周期。对于每个周期,我们计算错误分类的数量,以便监控收敛性并尽早终止。对于每个错误分类的样本,我们按照前面部分所描述的方式更新权重和偏差。如果错误分类的数量为零,则无法再进行进一步改进,因此没有必要继续进行下一个周期。预测方法只是计算权重和特征值的点积,加上偏差,并应用阶跃函数。

如果我们将上述感知机类与合成数据集一起使用

我们可以看到在24个周期内实现了收敛,即不需要耗尽指定的最大迭代次数

Perceptron convergence. Image by the Author.

可以使用scikit-learn的决策边界实用函数直观地可视化决策边界。为了使用该函数,我们生成一个由训练集中的特征值范围跨越的200×200个点的网格。基本上,我们构造了一个轮廓图,显示了预测的类别,并将样本作为散点图叠加在上面,并使用真实标签进行着色。这种绘制决策边界的方法非常通用,可以与任何二维分类器一起使用。

通过这种方法,我们可以使用很少的代码完美地分离了两个合成构造的高斯分布。这种方法的简单性和优雅性使其成为机器学习的一个出色的入门和激励性例子。

拟合感知器模型的决策边界。图像由作者提供。

我们也可以通过提前停止模型拟合过程来可视化不同时期的决策边界的演变。可以通过使用递增的最大时期截断来实现。对于每一次尝试,我们使用已拟合(可能未收敛)模型的权重和偏差,并将决策边界绘制为一条线。这些线使用时期号进行注释。这可能可以通过使用热启动更优雅地实现,但是由于模型拟合非常快,因此增加额外的复杂性是不值得的。

下图显示了各个时期的决策边界演变。最初,少量的类0样本被错误分类,这导致决策边界线的斜率和截距逐渐变化。我们可以看到在24个时期内实现了收敛,这与上面的收敛图一致。拟合在决策边界完全分离类别时停止,而不考虑边界与其周围样本的距离有多近。

“Rosenblatt的感知器分类” 四海 第10张

需要注意的是,不能保证感知器收敛,因此设置最大迭代次数非常重要。实际上,可以在数学上证明,线性可分的类别是收敛的。如果类别不是线性可分的,则权重和偏差将继续更新,直到达到最大迭代次数。这就是合成数据集中两个高斯函数被分开的原因。

另一个重要的说明是感知器没有唯一的解。通常会有无限多个可以分离线性可分类别的超平面,模型将随机收敛到其中一个。这也意味着测量与决策边界的距离不是确定性的,因此并不是很有用。支持向量机解决了这个限制。

感知器本质上是一个单层神经网络。在跳转到多层神经网络和用于非线性问题的反向传播算法之前,了解其工作原理是有帮助的。

Leave a Reply

Your email address will not be published. Required fields are marked *