导读: 本文是作者 Ajit Jaokar 即将出版的《Mathematical foundations of Data Science》(《数据科学的数学基础》中的一部分。在这篇文章中,作者用感知器算法(Perceptron algorithm)来填补高中数学和深度学习之间的鸿沟。
背景
作为高校课程主任,我负责讲授《Artificial Intelligence: Cloud and Edge Implementations》(《人工智能:云计算和边缘计算的实现》),但我看到的现状是,太多的学生熟悉的是编程方面,而不是数学方面。
他们上次学习数学,还是在大学里学的,已经是几年前的事情了。然后,当他们开始学习数据科学时,突然发现,他们需要跟矩阵、线性代数等等打交道。
他们原本以为,大学毕业以后就不会再碰数学了。更槽糕的是,他们发现,在很多情况下,他们并不知道这些概念到底是用于数据科学的哪些领域。
如果你要考虑学习数据科学所需的数学基础,那么你可以将它们分为四个关键领域:
线性代数
概率论与统计学
多元微积分
优化
所有这些基础都是在高中(14 到 17 岁)所教授的内容(至少是部分内容)。
在本文中,我们从这些想法开始,并将它们与数据科学与人工智能联系起来。
理解线性回归
让我们从线性回归开始讲起。
线性关系意味着可以用直线表示两组变量之间的关系。许多现象可以用线性关系来表示。我们可以用线性方程的形式来表示这种关系,形式如下:
y = mx + b
其中,“m” 表示直线的斜率;“x”表示直线上的任一点(一个输入或 x 值),“b”是直线与 Y 轴相交的位置。
这种关系可以表示如下:
如果我们将这个等式扩展到 n 个变量,我们就会得到:
现在,让我们将工具切换到一种新的模型,即从线性回归到感知器学习。我们展示了这个新模型和线性回归的关系。此外,感知器学习可以扩展到多层感知器,即深度学习算法。
感知器学习
感知器可以看作是“人工神经元”,也就是生物神经元的简化版。感知器如下图所示。感知器接受多个输入:x1、x2、……,并产生一个二进制输出:
图:感知器
展开上面的内容,在下面的示例中,我们现在考虑加权输入。感知器有三个输入,x1、x2、x3 和权重 w1、w2、……。w1、w2、……是实数,用来表示各个输入对输出的重要性。感知器的输出是 0 还是 1,要取决于加权和“∑jwjxj”是小于还是大于某个阈值。我们可以把感知器看作是一种通过权衡证据来作出决策的设备。这个概念类似于我们之前见过的多元线性方程。这个概念可以表示为如下所示的函数:
图:感知器的一般表示
它确实与我们以前所见到的多元线性回归方程相似。
感知器:不仅仅是历史上的一个脚注
作为一种算法,感知器有一段有趣的历史。感知器最初是在硬件上实现的。感知器算法的第一个实现是 Mark I 感知器。感知器算法于 1957 年由 Frank Rosenblatt 在 Cornell Aeronautical Laboratory 发明的。感知器被设计成一台机器而不是一个程序。这台机器是为图像识别而设计的:它有一个由 400 个光电管组成的阵列,随机连接到“神经元”上。权重编码在电位器中,学习过程中的权重更新由电动机执行。事后证明,当时人们对感知器的乐观态度实际上是错误的。在 1958 年由美国海军组织的新闻发布会上,Rosenblatt 发表了关于感知器的声明,引起了当时羽翼未丰的人工智能界的争议。根据 Rosenblatt 的声明,《New York Times》报道称,“感知器是一台电子计算机的雏形,(美国海军)希望它能够走路、说话、看物、写字、复制自己,并能够意识到自己的存在。”
虽然感知器最初看起来很有前途,但人们很快就证明了感知器并不能被训练来识别许多类的模式。这种错位的乐观主义导致神经网络领域多年来停滞不前,直到人们认知到,具有两层或更多层(也成为多层感知器)的前馈神经网络比只具有一层(即单层感知器)的感知器具有更强大的处理能力。单层感知器只能学习线性可分模式。
下面是(单层)感知器的学习算法的示例。一个图表显示了一个感知器随着更多训练样本的增加而更新其线性边界。
图:感知器分类
以上对感知器和图像的描述,改编自 WikiPedia:https://en.wikipedia.org/wiki/Perceptron
因此,虽然感知器具有历史意义,但它毕竟是一种功能性算法,即线性分类器。线性分类器虽然很有趣,但就最初的承诺和潜力而言,它还不够引人注目。
然而,对我们来说,感知器不仅仅是历史上的一个脚注。这是一种将你的高中基础知识与深度学习联系起来的方法。
使用非线性激活函数克服感知器学习的局限性
要克服感知器仅作为线性分类器的局限性,一个步骤是考虑非线性激活函数。在上图中(图:感知器的一般表示),函数 f 表示激活函数。对于感知器来说,激活函数只是一个阶跃函数。阶跃函数输出表示感知器的输出。阶跃函数的输入是加权输入。下面我们将更详细地讨论激活函数。但就目前而言,重要的是要认识到感知器的激活函数是一个阶跃函数。
1969 年,在 Marvin Minsky 和 Seymour Papert 合著的一本知名图书《Perceptrons》(《感知器》)中指出,感知器不可能会学习异或函数(XOR function)。但是,如果我们对感知器使用非线性激活函数(而不是阶跃函数),那么这个限制就不适用了。事实上,通过使用非线性激活函数,我们就可以对比逻辑异或更复杂的函数进行建模(哪怕只有单层)。如果我们添加更多的隐藏层来创建多层感知器,那么这个想法就可以得到扩展。
激活函数的工作原理可以通过在给定 x.sigmoid、tanH、ReLu 的曲线上找到 y 的映射值来理解。例如,sigmoid 激活函数映射 0 到 1 之间的值范围。这意味着,对于 x 在负无穷到正无穷之间的值,y 值将通过 Sigmoid 函数映射到 0 到 1 之间。对于每个节点,Sigmoid 激活将输出作为 sigmoid (dot(input, weights) ) + b,其中,函数的输入表示每个节点的 x 值和权重的点积。矩阵 b 表示偏差矩阵。类似的,tanh 函数表示结语 -1 和 +1 之间的输出。激活函数必须是可微分的,因为函数的导数表示更新步骤时的变化方向。
所以,我们来总结一下:
感知器是生物神经元的简化模型。
感知器是一种学习二元分类器的算法:一种将输入映射到输出值(单个二元指)的函数。
感知器是一个人工神经元,使用阶跃函数作为激活函数。感知器算法也被称为单层感知器,以区别于多层感知器。
虽然感知器算法具有历史意义,但它为我们提供了一种弥补线性回归和多层感知器之间差距的方法,即深度学习。
多层感知器
我们现在来讨论多层感知器(Multi-layer perceptron,MLP)的概念。多层感知器通过以下三种方法克服了上一节中讨论的感知器算法的局限性:
通过使用非线性激活函数
通过使用多层感知器(而非单层感知器)
使用不同的训练方法,即 MLP 需要结合反向传播和梯度下降进行训练
图:多层感知器
因此,多层感知器可以看作是一个复杂的感知器网络(具有非线性激活函数),它们可以在逐层权衡证据的基础上作出微妙而复杂的决策。
英文原文:
评论