从生物学到人工智能:感知机(Perceptron)

点击上方关注,All in AI中国

Python中的生物启发线性分类器

Perceptron的硬件实现(Mark I)

你的大脑包含数十亿个神经元,每个神经元都可以看作是一个处理单元,它集成输入并根据阈值标准创建二进制响应。在生物学术语中,输入是神经元的树突处的膜去极化,其向体细??胞扩散。如果去极化足够强,神经元将通过产生将沿轴突行进的动作电位作出响应。在轴突末端,神经递质将释放到突触间隙中,这将使下游神经元的树突膜去极化。可在此处找到有关此过程的更详细说明。(
https://towardsdatascience.com/usingal-processing-to-extract-neural-events-in-python-964437dc7c0)现在真正的线索是生物神经元 络可以学习如何响应其输入。此功能的术语是可塑性,正是这一特性使静态软件和能够适应其环境的智能代理之间产生差异。然而,1943年麦卡洛克和皮茨的论文没有解决这个问题,而是专注于神经元之间的关系。另一方面,Perceptron为塑性问题提供了一个优雅的解决方案:权重。 Perceptron的每个输入都乘以一个权重,然后进行结果总结。因此,通过改变输入的权重,我们可以改变Perceptrons响应。下图给出了Perceptron如何运行的示意图。

图1:Perceptron的示意图

在图1的左侧,输入表示为x1,x2,x3,… xn。每个输入乘以权重w0,w1,w2,… wn。在该乘法步骤之后,结果总结并通过激活函数。在感知器的情况下,激活功能类似于生物神经元通过重质阶梯功能的“all-or-none”特征。这意味着任何值≤0都将转换为0,而任何值> 0将变为1。我们也可以将上面的值写为:

其中w是权重向量,x是输入向量,b是偏差项。在图1中,我们已经将偏置包括在输入向量中作为1(红色方块)并且将权重向量作为w0包括在内。所以在这种情况下,我们需要计算输入和权重向量的点积。但仍有一个问题:我们如何调整权重?毕竟这是Perceptron学习的方式。考虑这一点的一种方法如下。我们的Perceptron应根据其输入做出二元决策(0或1)。因此,假设我们有两个数据点,一个属于1类,另一个属于0类,Perceptron必须学习每个数据点的类。该任务在下面的图2中可视化。

图2:几何解释

从图2中我们可以看到问题可以被视为找到决策边界,也称为超平面(红色虚线),将两个组分开。红色虚线上方的所有内容都是0级,超平面下方的所有内容都是1类。超平面由与其垂直的权重向量w’定义(红色实心向量)。因此,使用权重向量计算输入向量的点积并将结果通过激活函数将给出输入的分类。因此,如果我们看一下数据点1,我们也可以将其绘制为矢量并垂直于它,我们可以绘制另一个超平面(纯黄色线)。接下来,观察输入向量2,我们可以再次绘制垂直于它的超平面(实线蓝色)。由于分离两组的超平面需要垂直于我们正在寻找的权重向量,从图2中可以明显看出w’必须位于黄色和蓝色超平面之间(标记为“x的范围”)。因此,按照上述方法,我们可以实现如下学习规则。

首先,我们将权重向量中的所有值设置为零,包括偏差项。在二维输入的情况下,如图2所示,这意味着:w = [0 0 0]。然后我们将偏差1加到我们的第一个输入向量上,它给出了X(1)= [1,x1,x2]。现在我们计算X1和w的点积。这个计算的结果是0。通过激活函数传递0然后将X1分类为0级,这是正确的。因此不需要更新w。对X(2)做同样的事情也给我们0级错误,所以我们需要通过以下学习规则来更新w:

在这种情况下,它意味着从正确的类(1)中减去我们的结果(类0),将结果乘以当前输入向量并将其添加到w。这将导致:w = [1 x1,x2]。如果有更多的数据点,我们将继续对每个输入向量使用此过程,并且每次迭代时,我们将更接近描述超平面的权重向量,该超平面线性地分离我们的两个组。为了测试这个,我们接下来将在Python代码中实现Perceptron。

实现

为了开发我们的Perceptron算法,我们将使用用scikit-learn生成的toy data,所有其他功能将使用NumPy实现。可以在此处找到所有代码(http://www.numpy.org/)。下面的代码将创建并可视化我们的toy data。

图3:用于测试Perceptron算法的数据

图3显示了我们刚刚创建的两个集群,我们可以看到它们可以通过超平面线性分离,这是Perceptron工作的前提条件。接下来,我们需要将偏差项添加到输入向量并用零??初始化权重向量。

好的,现在我们准备编码Perceptron算法。正如我们从下面的代码中可以看到的,它是一个非常简单和优雅的算法。由于无法保证Perceptron会在一次通过中收敛,我们将连续10次将所有训练数据输入Perceptron,同时不断应用学习规则以确保。

那么让我们来看看结果。下面的动画可视化Perceptron如何搜索分隔两个群集的超平面。正如我们所看到的,它最终提出了一种解决方案,其中1类数据点之一位于超平面上。就像我们之前在激活函数中指定的那样,该解决方案实际上是正确的:如果x> = 1则返回1,否则0,如果您感兴趣,可以使用以下激活函数重新运行上述代码,以查看结果如何更改:return 0如果x <= 0,则为1

结论

正如我们所看到的,Perceptron算法是实现有监督线性分类器的一种简单方法。然而,它也有缺点,例如,当组不可线性分离时,它不起作用。它也是一种在线算法,这意味着我们一次只能将一个训练样例传递给它,如果我们有一个更大的数据集,训练过程就会变慢。

如果您想要这个项目的完整代码,可以在这里找到它。(
https://github.com/akcarsten/Perceptron/blob/master/perceptron.ipynb)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年10月8日
下一篇 2018年10月8日

相关推荐