数学的终极目标,建模这个世界——掌握最底层的人工智能基础

360影视 2024-12-25 07:29 3

摘要:感知器(perceptron)的世界令人着迷,因为这些模型是现代人工智能的基础。这篇文章,我将简要介绍感知器的故事,从其神经网络的起源到它进化为多层感知器及更高级的模型。我们将探讨支撑这一模型的基础数学。此外,我们还将研究感知器模型如何为更高级的分类器奠定基础

感知器(perceptron的世界令人着迷,因为这些模型是现代人工智能的基础。这篇文章,我将简要介绍感知器的故事,从其神经网络的起源到它进化为多层感知器及更高级的模型。我们将探讨支撑这一模型的基础数学。此外,我们还将研究感知器模型如何为更高级的分类器奠定基础,包括逻辑回归和深度学习。

1. 引言

1.1 感知器模型的简史

1943年,Warren McCulloch 和 Walter Pitts 在人工神经元方面的研究启发了一位名叫Frank Rosenblatt的心理学家,他在1957年创建了感知器模型。Rosenblatt的感知器是第一个用算法描述的神经网络(NN),为现代机器学习(ML)技术铺平了道路。感知器一经发现,就引起了科学家和公众的广泛关注。有些人认为这项新技术对智能机器至关重要。

然而,感知器的受欢迎程度并没有持续太久。1969年,Marvin Minsky 和 Seymour Papert 出版了他们的著作《感知器》(Perceptrons),书中强调了感知器模型的局限性,并揭示了它无法解决如 XOR 分类等问题。这一工作导致了对神经网络兴趣的显著下降,人们的注意力转向了其他方法。感知器的早期发展历程如下:

1943年
McCulloch-Pitts神经元——开始
McCulloch-Pitts神经元,一种人工神经元的模型被提出,开启了神经网络领域。

1957年
感知器的诞生
Frank Rosenblatt 开发了感知器,第一个用于训练单层神经网络的算法。

1974年
第一个反向传播模型
Paul Werbos 引入了第一个用于训练多层感知器的反向传播模型。

1974年
使用链式法则的反向传播
Paul Werbos 提出了使用链式法则训练神经网络的反向传播算法。

1980年
多层神经网络
多层神经网络的概念被引入,使得更复杂的函数建模成为可能。

1980年
第一个卷积神经网络(CNN)架构
Kunihiko Fukushima 提出了Neocognitron,第一个卷积神经网络(CNN)架构。

1980年
感知器的衰落
由于感知器能力的局限性和多层神经网络的兴起,感知器的影响力减弱。

1982年
反向传播被编程实现
Paul Werbos 使用链式法则提出了反向传播算法,用于训练神经网络。

1982年
Hopfield网络——早期的RNN
John Hopfield 引入了Hopfield网络,一种早期的循环神经网络(RNN)。

虽然花费了十多年时间,但到了20世纪80年代,人们对神经网络(NNs)的兴趣重新燃起。这在很大程度上要感谢Rumelhart、Hinton和Williams引入的通过反向传播算法进行多层神经网络训练的方法。

2012年,计算能力的显著提升、大数据的涌现、非线性激活函数(如RELU)和dropout技术的发展,促成了最为全面的卷积神经网络的诞生。ImageNet提供的大规模标注数据集在这一过程中起到了关键作用。

1985年
神经网络深入发展
深度神经网络的概念被引入,使得特征的层次化学习成为可能。

1985年
玻尔兹曼机
Geoffrey Hinton 和 Terrence Sejnowski 引入了玻尔兹曼机,这是一种随机神经网络。

1986年
在人工神经网络中提出反向传播
David Rumelhart、Geoffrey Hinton 和 Ronald J. Williams 正式提出了用于训练人工神经网络的反向传播算法。

1986年
反向传播的实现
反向传播算法在多层神经网络中实现,成为标准方法。

1987年
NetTalk——人工神经网络学习语音
NetTalk 是一个神经网络,通过在文本到语音的数据集上进行训练来学习语音。

1989年
使用反向传播训练的卷积神经网络
卷积神经网络(CNN)通过反向传播进行训练,使得图像识别功能更加强大。

1989年
通用逼近定理
通用逼近定理被证明,显示了神经网络逼近任何连续函数的能力。

1991年
梯度消失问题出现
梯度消失问题被发现,阻碍了深度神经网络的训练。

1997年
长短期记忆(LSTM)的诞生
长短期记忆(LSTM)被引入,解决了循环神经网络中的梯度消失问题。

随之而来的是当今对深度学习的狂热兴起。因此,感知器模型在这一基础中扮演了关键角色。

2006年
受限玻尔兹曼机
Geoffrey Hinton 引入了受限玻尔兹曼机,一种生成神经网络模型。

2006年
深度信念网络
Geoffrey Hinton 引入了深度信念网络,一种多层生成模型。

2007年
GPU革命开始
GPU的使用加速了深度神经网络的训练,促进了更快的进展。

2009年
ImageNet的发布
ImageNet数据集发布,提供了一个用于图像分类的大规模数据集。

2010年
应对梯度消失问题
开发了应对深度神经网络中梯度消失问题的技术。

2012年
AlexNet开启深度学习热潮
AlexNet(一个深度卷积神经网络)赢得了ImageNet竞赛,引发了深度学习热潮。

2014年
生成对抗网络的诞生
生成对抗网络(GANs)引入了一种新的生成模型类别。

2016年
AlphaGo战胜人类
AlphaGo,一个深度学习系统,击败了一位人类围棋冠军,展示了深度学习的强大力量。

2018年
三人组因深度学习获图灵奖
三人组(Yoshua Bengio、Geoffrey Hinton 和 Yann LeCun)因对深度学习的贡献而获得图灵奖。

1.2 感知器模型在机器学习中的重要性

尽管存在局限性,感知器模型仍然是机器学习中重要的基石。它是人工神经网络的基本组成部分,这些网络如今被广泛应用于从图像识别到语音识别的各种领域。

感知器模型的简单性使其成为机器学习初学者的良好起点。它使得线性分类和从数据中学习变得易于理解。此外,感知器算法可以很容易地修改为更复杂的模型,例如多层感知器(MLP)和支持向量机(SVM),这些模型可以应用于更多的场景,并解决原始感知器模型中的许多问题。

在接下来的部分中,我们将讨论感知器模型背后的数学原理,它如何用作二分类器以及用于创建逻辑门,还将探讨它如何像计算机的晶体管一样执行乘法任务。我们还将讨论感知器模型与逻辑回归之间的区别,并展示如何以新颖而激动人心的方式使用感知器模型。

2. 感知器模型背后的数学原理

2.1 线性可分性

从本质上讲,感知器模型是一个线性分类器。它的目标是找到一个“超平面”(在二维空间中是直线,在三维空间中是平面,或在更高维空间中的类似物),用以区分两类数据。对于一个数据集来说,若能找到一个超平面将所有数据点正确分类,则称该数据集是线性可分的。

数学上,感知器模型可以表示为:

其中,x 是输入向量;w是权重向量;b是偏置项;而f是激活函数。在感知器的情况下,激活函数是一个阶跃函数,它将输出映射为 1 或 0,代表两个类别,见下图。

单位阶跃函数的描述,具有将输出映射到0或1的分段条件。

感知器模型可以扩展为在输入 x 中具有多个特征,其定义如下:

上述方程连同其输出的阶跃函数一起被激活(即,通过0或1进行开启或关闭),如以下图所示。

2.2 感知器学习算法

感知器学习算法是一种更新权重和偏置的方法,以减少分类错误。该算法可以总结如下:

初始化权重和偏置为小的随机值。

对于每一个输入-输出对 (x,d),计算预测输出 y=f(w*x+b)。

根据误差 e=d−y 更新权重和偏置:

其中 η(eta) 是学习率,一个控制更新步长的小正数常量。

对步骤2和3重复固定次数或直到误差收敛。

我们可以使用Python和Sklearn快速实现上述步骤:

import numpy as npfrom sklearn.linear_model import PerceptronX = np.array([2, 3], [1, 4], [4, 1], [3, 2])y = np.array([1, 1, 0, 0])perceptron = Perceptronperceptron.fit(X, y)

然后,使用训练好的模型,我们可以如下进行预测:

new_data_point = np.array([[1, 2]])prediction = perceptron.predict(new_data_point)print(prediction)

如果数据是线性可分的,感知器学习算法保证收敛。

2.3 感知器收敛定理

Rosenblatt 在1960年证明了感知器收敛定理。该定理指出,如果一个数据集可以线性分离,那么感知器学习算法将在有限步数内找到解决方案。定理表明,给定足够的时间,感知器模型将找到最佳的权重和偏置,以对线性可分的数据集中的所有数据点进行分类。

但如果数据集不是线性可分的,感知器学习算法可能无法找到合适的解决方案或收敛。因此,研究人员开发了更复杂的算法,如多层感知器和支持向量机,以应对无法通过直线分离的数据。

3. 感知器模型作为二分类器

3.1 线性分类

如前所述,感知器模型是一个线性分类器。它创建一个决策边界,即将两类分隔开的特征空间中的一条线。当添加一个新数据点时,感知器模型根据它在决策边界上的位置进行分类。由于其简单性,感知器使用方便且速度快,但只能解决那些能够线性分离的数据问题。

3.2 感知器模型的局限性

感知器模型的一个主要问题是,它无法处理不能通过直线分离的数据。XOR问题就是一个例子,有些数据集无法通过单一超平面分隔开,这使得感知器无法找到解决方案。研究人员开发了更先进的方法来解决这个问题,比如多层感知器,它有多个神经元层,可以学习到不遵循直线的决策。

感知器模型还对学习率和初始权重的设置敏感。例如,如果学习率太低,收敛可能会很慢,而较大的学习率可能导致振荡或发散。同样,初始权重的选择也会影响解的收敛速度和结果。

3.3 使用感知器模型进行多类分类

尽管基本的感知器模型是为两类问题设计的,但它可以通过训练多个感知器分类器来解决多类问题,每个类别对应一个分类器。最常见的方法是“一对全”(OvA),其中为每个类别训练一个单独的感知器来区分各类。然后,在对一个新数据点进行分类时,选择输出最高的感知器作为预测类别。

另一种方法是“一对一”(OvO)方法,其中为每对类别训练一个感知器。最终的分类决定是通过投票机制做出的,每个感知器为其预测的类别投票,并选择得票最多的类别。虽然OvO需要比OvA训练更多的分类器,但每个感知器只需要处理较小的数据子集,这对大型数据集或具有高计算复杂度的问题来说可能更有利。

4. 逻辑门与感知器模型

4.1 感知器如何用于生成逻辑门

感知器模型可以用来表示逻辑门,逻辑门是数字电路的最基本构建块。通过适当地调整感知器的权重和偏置,它可以被训练来执行逻辑运算,如与(AND)、或(OR)和非(NOT)。这种感知器与逻辑门之间的联系表明,神经网络可以执行计算,并且有潜力模拟复杂系统。

4.2 示例:使用感知器实现 NAND 门

NAND 门是一种基本的逻辑门,当且仅当两个输入都是1时,输出为0,在其他情况下输出为1。NAND 门的真值表如下:

要使用感知器实现一个 NAND 门,我们可以手动设置权重和偏置,或者使用感知器学习算法来训练感知器。以下是可能的权重和偏置配置:

使用这些参数,感知器可以表示为:

训练数据、图形描述和 AND 门的线性函数。

这里,f是阶跃函数,A和B是输入。如果你用真值表中的值测试这个设置,将获得 NAND 门的正确输出:

在 Python 中,可以通过以下代码实现 NAND门:

def nand_gate(x1, x2): w1, w2, b = -1, -1, 1.5return int(w1 * x1 + w2 * x2 + b > 0)binary_inputs = [(0,0), (0,1), (1,0), (1,1)]for A and B in binary_inputs:print(f"(A, B) --> nand_gate(A, B)")

如预期的那样,上述代码再现了 NAND 门的真值表:

(0, 0) --> 1(0, 1) --> 1(1, 0) --> 1(1, 1) --> 0

NAND 门可以用来构建所有其他逻辑门,因为它是功能完备的,这意味着任何其他逻辑函数都可以仅通过 NAND 门实现。以下是如何使用 NAND 门创建一些基本逻辑门的简要说明:

NOT 门:将 NAND 门的两个输入都连接到输入值。

AND 门:首先创建一个 NAND 门,然后将输出传递给一个 NOT 门。

OR 门:在将输入传递给 NAND 门之前,对每个输入应用一个 NOT 门。

要创建一个接受任意数量输入的 NAND 门,可以使用 Python 定义一个函数,该函数接受一个输入列表并返回 NAND 输出。以下是展示这一点的代码片段:

def nand_gate(inputs):assert len(inputs) > 1, "At least two inputs are required." # Helper function to create a 2-input AND gatedef and_gate (x1, x2): w1, w2, b = 1, 1, -1.5return int(w1 * x1 + w2 * x2 + b > 0) Reduce the inputs to a single NAND output using the helper function.result = and_gate(inputs[0], inputs[1])for i in range (2, len (inputs)):result = and_gate(result, inputs[i]) return 0 if result > 0 else 1# Example usageinputs = [(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0), (0, 1, 0, 1), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]for A0, A1, A2, and A3 inputs: output = nand_gate((A0, A1, A2, A3)) print(f"({A0}, {A1}, {A2}, {A3}) --> {output}")

该函数使用一个辅助函数(例如,and_gate)来创建一个具有两个或多个输入的 NAND 门。然后对给定的输入重复执行 AND 操作。最终结果是 NAND 门的输出,这里可以接受任意数量的输入位,并且结果是 AND 门的取反值。

4.3. 扩展到其他逻辑门:AND、OR、XOR

类似地,感知器也可以用于模拟其他逻辑门,如 AND、OR 和 NOT。例如,具有权重w1 = 1, w2 = 1和偏置 b=−1.5 的感知器可以表示为一个 AND 门。

def and_gate(x1, x2): w1, w2, b = 1, 1, -1.5 return int(w1 * x1 + w2 * x2 + b > 0)binary_inputs = [(0,0), (0,1), (1,0), (1,1)]for A, B in binary_inputs: print(f"({A}, {B}) --> {and_gate(A, B)}")

输出再现了预期的 AND 门结果。

(0, 0) --> 0(0, 1) --> 0(1, 0) --> 0(1, 1) --> 1

然而,单个感知器无法模拟 XOR 门,因为 XOR 门不是线性可分的。相反,必须使用多层感知器或感知器的组合来解决 XOR 问题。

5. 用于乘法和类晶体管功能的感知器

5.1. 感知器与晶体管之间的类比

晶体管是电子设备的基本构建块。它们负责简单的任务,如加法和乘法。有趣的是,感知器也可以看作具有类似功能的计算单元。例如,感知器被用于机器学习和人工神经元。相反,晶体管是改变电信号流动的物理部件。尽管如此,正如上一节所示,两种系统都可以模拟并执行逻辑操作。

5.2. 使用感知器进行乘法

我们可以利用感知器的二进制操作能力来执行乘法。例如,考虑两个二进制数字(即A和B)的乘法,这可以表示为一个简单的 AND 门。正如第4节所示,AND 门可以用感知器来模拟。

但是,对于涉及两个以上位的二进制数的更复杂的乘法任务,我们需要添加更多部件,如半加器和全加器,这些部件需要逻辑门的组合。使用感知器构建这些部件可以使构建一个能够执行二进制乘法的人工神经网络成为可能。

例如,假设我们想要乘两个 2 位二进制数A1A0和B1B0。那么,我们可以将乘法分解为一系列 AND 操作和加法:

计算部分积:P00 = A0 * B0, P01 = A0 * B1, P10 = A1 * B0, and P11 = A1 * B1。

使用半加器和全加器加上部分积,得到一个4位的二进制积。

每个 AND 操作和加法都可以用感知器或代表所需逻辑门的感知器组来完成。

使用上一节中设置的 AND 门函数,我们可以在 Python 中执行以下操作来实现基于感知器的乘法:

A1A0 = [1, 0]B1B0 = [1, 1]P00 = and_gate(A1A0[1], B1B0[1])P01 = and_gate(A1A0[1], B1B0[0])P10 = and_gate(A1A0[0], B1B0[1])P11 = and_gate(A1A0[0], B1B0[0])# Implement a simple adder using perceptron-based logic gatesresult = [P00, P01 ^ P10, (P01 & P10) ^ P11, P11]print(result)

5.3. 感知器和硬件实现的未来

尽管感知器可以像晶体管一样执行基本的数学运算,但它们的硬件实现效率不如传统的晶体管。然而,神经形态计算的最新进展表明,可能制造出像感知器这样的神经网络行为的硬件。这些神经形态芯片可以帮助机器学习任务减少能耗,并为计算机的新思路打开大门。

6. 感知器模型与逻辑回归的比较

6.1. 感知器与逻辑回归的相似性

感知器模型和逻辑回归都是线性分类器,可用于解决二元分类问题。它们都依赖于找到一个将类别分隔在特征空间中的决策边界(超平面)。此外,它们可以通过一对全(one-vs-all)和一对一(one-vs-one)等技术扩展到处理多类分类问题。

让我们来看一下 Python 实现中的差异:

from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegressionlog_reg.fit(X, y)new_data_point = np.array([[1, 2]])prob_prediction = log_reg.predict_proba(new_data_point)print(prob_prediction)import numpy as npfrom sklearn.linear_model import Perceptron, LogisticRegression# DatasetX = np.array([[2, 3], [1, 4], [4, 1], [3, 2]])y = np.array([1, 1, 0, 0])# Train Perceptronperceptron = Perceptronperceptron.fit(X, y)# Train Logistic Regressionlog_reg = LogisticRegressionlog_reg.fit(X, y)# New data pointnew_data_point = np.array([[1, 2]])# Perceptron predictionperc_prediction = perceptron.predict(new_data_point)print("Perceptron prediction:", perc_prediction)# Logistic Regression predictionlog_reg_prediction = log_reg.predict(new_data_point)print("Logistic Regression prediction:", log_reg_prediction)# Logistic Regression probability predictionprob_prediction = log_reg.predict_proba(new_data_point)print("Logistic Regression probability prediction:", prob_prediction)

这会输出:

Perceptron prediction: [1]Logistic Regression prediction: [1]Logistic Regression probability prediction: [[0.33610873 0.66389127]]

6.2 感知器与逻辑回归的区别

尽管感知器模型和逻辑回归有一些相似之处,但两者之间存在一些关键的区别:

激活函数:感知器模型使用阶跃函数作为其激活函数,而逻辑回归使用逻辑(Sigmoid)函数。这种差异导致感知器有一个二元输出(0 或 1),而逻辑回归则生成一个概率值(在 0 和 1 之间),表示实例属于某个特定类别的可能性。

损失函数:感知器学习算法最小化误分类错误,而逻辑回归最小化对数似然或交叉熵损失。这种区别使得逻辑回归对数据集中的噪声和异常值更加鲁棒,因为它不仅考虑了错误分类的数量,还考虑了错误的大小。

收敛性:如果数据是线性可分的,感知器学习算法可以收敛,但在其他情况下可能无法收敛。另一方面,逻辑回归采用基于梯度的优化技术,如梯度下降或牛顿-拉夫森法,这些方法保证在凸损失函数(如对数似然)上达到全局最优。

非线性可分数据:虽然感知器模型在处理非线性可分数据时表现不佳,但逻辑回归可以通过引入高阶多项式特征或使用核方法来扩展,以处理非线性决策边界。

6.3 在感知器与逻辑回归之间的选择

感知器模型和逻辑回归的选择取决于问题和数据集。由于基于概率并且可以模拟非线性决策边界,逻辑回归更为可靠,并且能够处理更广泛的问题。然而,在某些情况下,尤其是处理线性可分数据时,感知器模型可能更易于使用且消耗更少的计算资源。

7. 感知器模型的创新和独特应用

7.1 光学字符识别(OCR)

感知器模型已被用于光学字符识别(OCR)任务,其目标是识别并将打印或手写的文本转换为机器编码的文本。感知器或其他机器学习算法通常用于 OCR 任务中,以对将要读取的图像进行预处理,提取特征并对其进行分类。对于可以通过直线分隔的字符,感知器模型是 OCR 任务的一个不错的选择,因为它使用简单并且计算效率高。

7.2 音乐类型分类

感知器还可以用于音乐类型分类,这涉及识别给定音轨的类型。可以训练感知器模型来将音频分类为预先设定的类型。这是通过提取音频信号的相关部分(如频谱特征或时间特征)并对其进行组合来完成的。尽管更高级的方法,如深度学习和卷积神经网络通常能获得更好的结果,但感知器模型在只有少数可以线性分隔的类型或特征时,仍然可以发挥良好作用。

7.3 入侵检测系统

入侵检测系统(IDS)在网络安全中用于检测恶意行为或未经授权的网络访问。IDS 可以通过分析数据包大小、协议类型和网络流量连接长度等特征,使用感知器作为分类器来判断活动是正常还是恶意的。尽管支持向量机和深度学习在检测方面表现得更好,但感知器模型可以用于简单的 IDS 任务或作为对比参考点。

7.4 情感分析

感知器可以应用于情感分析,这是一种自然语言处理任务,旨在确定文本中表达的情感(例如,正面、负面或中立)。通过将文本转换为数值特征向量,如词频-逆文档频率(TF-IDF)表示,可以训练感知器模型根据语气对文本进行分类。虽然感知器在情感分析性能上已被更高级的技术(如循环神经网络或转换器)所超越,但在某些特定用例中,感知器仍可以作为文本分类的入门工具或更简单的替代方案。

8. 感知器模型的演变与在深度学习中的遗产

8.1 感知器向多层感知器(MLP)的演变

感知器模型能够解决具有明确决策边界的问题,但在需要非线性决策的任务中存在困难。多层感知器(MLP)的引入标志着人工神经网络的重大进步,MLP 由多个类似感知器单元的层组成。给定足够数量的隐藏层和神经元,MLP 可以逼近任何连续函数。通过使用反向传播算法,MLP 可以被训练来解决更复杂的任务,例如 XOR 问题,这是单个感知器无法解决的。

8.2 深度学习与感知器的遗产

感知器模型为深度学习奠定了基础,深度学习是机器学习的一个子领域,专注于具有多个层的神经网络(深度神经网络)。感知器模型是深度学习技术的基础,如卷积神经网络(CNN)和循环神经网络(RNN),这些技术在图像分类、自然语言处理和语音识别等任务中达到了最先进的性能【24】。

在 CNN 中,感知器的加权输入信号和激活函数的思想被引入卷积层。这些层对相邻的输入区域应用滤波器,以学习数据中的空间层次结构。同样,RNN 通过增加循环连接,基于感知器模型扩展,这使得网络能够学习顺序数据中的时间依赖关系。

8.3 感知器与深度学习的未来

尽管感知器模型是基础,但更复杂的深度学习技术已经在很大程度上取代了它。然而,感知器模型仍然在机器学习中具有重要价值,因为它是教授神经网络基础知识的简单而有效的方法,并为构建更复杂的模型提供了灵感。随着深度学习的不断进步,感知器模型的核心思想和原则可能会保持不变,并继续影响新架构和算法的设计。

9. 结论

这篇文章全面探讨了感知器模型,包括其数学原理、二分类应用及逻辑门生成。通过理解这些基础知识,我们解锁了利用感知器在各种应用中的潜力,甚至可以构建更先进的模型,如多层感知器(MLP)和卷积神经网络(CNN)。

我们还比较了感知器和逻辑回归,强调了它们的区别和相似之处,探讨了感知器作为更高级机器学习技术基础的角色。我们进一步讨论了感知器在人工智能中的作用、历史意义及其持续影响。

让我们记住,感知器只是拼图的一部分。还有无数其他模型和技术,已经被发现或正在等待被发现,它们各自具有独特的优势和应用。然而,通过本教程提供的坚实基础,你已经做好了应对人工智能旅程中的挑战和机遇的准备。

来源:老胡说科学

相关推荐