文章文上下两节
引言
在本章中,我们将深入探讨感知机,这是一个由美国学者Frank Rosenblatt于1957年提出的算法。尽管感知机的概念历史悠久,但它仍然在现代计算和机器学习领域占据着基础性的重要地位。感知机不仅是神经网络和深度学习的原型,而且其设计原理和运作机制为理解更复杂的神经网络模型提供了关键的基础。通过介绍感知机的基本构造和功能,以及如何利用它来解决一些简单的逻辑问题,帮助读者建立对这一经典算法的初步理解。通过学习感知机,我们可以更好地洞察神经网络的核心思想和深度学习的基础结构,为进一步的学习和研究奠定坚实的基础。
第一章:感知机是什么
感知机是一种基本的人工神经网络,被设计成能模拟人类神经元的基本功能。它接收多个输入信号,这些信号可以被想象为具有"流动性"的东西,如电流或数据流。在感知机中,这些输入信号经过加权后,如果加权和超过了某个阈值,则输出一个信号。这种输出通常是二进制的,即"流/不流"(1/0)的形式。
下图展示了一个包含两个输入的基本感知机模型。输入 x 1 x_1 x1 和 x 2 x_2 x2 通过各自的权重 w 1 w_1 w1 和 w 2 w_2 w2 与输出 y y y 相连。这些权重决定了各自输入对输出的贡献。在感知机中,这些输入信号被加权和计算,并与一个固定的阈值 θ \theta θ 比较,这个比较的结果决定输出 y y y 的状态。
感知机的行为可以通过以下数学公式来表示:
y = { 0 if ( w 1 x 1 + w 2 x 2 ≤ θ ) 1 if ( w 1 x 1 + w 2 x 2 > θ ) y = \begin{cases} 0 & \text{if } (w_1 x_1 + w_2 x_2 \leq \theta) \\ 1 & \text{if } (w_1 x_1 + w_2 x_2 > \theta) \end{cases} y={01if (w1x1+w2x2≤θ)if (w1x1+w2x2>θ)
在这个模型中,权重 w 1 w_1 w1 和 w 2 w_2 w2 控制着输入信号的重要性,而阈值 θ \theta θ 则是决定神经元是否被激活的界限。权重的作用类似于电流中的电阻,它们不仅控制信号的强度,还影响信号是否足以触发输出。这种机制使得感知机能够在给定的输入下做出二进制决策。
第二章:简单逻辑电路
在本章中,我们将探讨如何使用感知机来实现几种基本的逻辑电路:与门(AND gate)、与非门(NAND gate)和或门(OR gate)。这些逻辑电路是数字电子中的基本组件,感知机通过简单的权重和阈值调整,能够模拟这些逻辑操作。
与门
与门是一种基本的逻辑电路,要求所有输入都为1时,输出才为1。
考虑一个简单的感知机模型,我们可以通过设置适当的权重和阈值来实现与门的功能。例如,设定权重 w 1 w_1 w1 和 w 2 w_2 w2 为0.5,并设置阈值 θ \theta θ 为0.7。在这种情况下,只有当两个输入 x 1 x_1 x1 和 x 2 x_2 x2 同时为1时,加权和 0.5 × 1 + 0.5 × 1 = 1.0 0.5 \times 1 + 0.5 \times 1 = 1.0 0.5×1+0.5×1=1.0 才会超过阈值0.7,从而输出1。对于其他任何输入组合,输出将为0。
与非门
与非门(NAND gate)是与门的逻辑相反:只有当所有输入都为1时,输出才为0;其他情况下输出为1。通过简单地取反与门的参数设置,我们可以实现与非门。
例如,将与门参数的符号取反,设置 w 1 w_1 w1 和 w 2 w_2 w2 为-0.5,阈值 θ \theta θ 为-0.7。这样,只有当两个输入 x 1 x_1 x1 和 x 2 x_2 x2 同时为1,加权和 − 0.5 × 1 − 0.5 × 1 = − 1.0 -0.5 \times 1 - 0.5 \times 1 = -1.0 −0.5×1−0.5×1=−1.0 才不超过阈值-0.7,输出为0。在所有其他情况下,输出为1。
或门
或门是另一种基本逻辑电路,要求至少一个输入为1时,输出就为1。
为了使用感知机实现或门,可以设置较低的阈值,例如 θ \theta θ 为0.5,同时提高权重 w 1 w_1 w1 和 w 2 w_2 w2 至1.0。这样,任何一个输入为1就足以使加权和超过阈值,从而输出为1。
总结
通过适当设置权重和阈值,单个感知机就能模拟基本的逻辑电路功能。这表明感知机不仅仅是一个简单的分类器,还能执行基本的逻辑运算。这种能力使得感知机成为研究人工智能和计算机科学中逻辑处理的有用工具。我们使用的方法展示了如何通过调整参数,让简单的模型执行多种逻辑任务,类似于演员在不同角色间转换。这种灵活性是感知机在实现复杂功能时的重要基础。
第三章:感知机的实现
下面使用Python来实现基本的逻辑门感知机,从而进一步理解感知机的工作原理。我们将首先实现一个简单的与门(AND gate),然后扩展到与非门(NAND gate)和或门(OR gate),展示如何通过修改参数来调整感知机的行为。
3.1 简单的与门实现
让我们开始实现一个基本的与门。我们将定义一个接收两个参数x1和x2的函数,并使用固定的权重和阈值来判断输出:
def AND(x1, x2):w1, w2, theta = 0.5, 0.5, 0.7tmp = x1 * w1 + x2 * w2if tmp <= theta:return 0else:return 1
这个函数使用了简单的条件判断来模拟感知机的阈值激活特性。下面是测试这个函数的代码,用以确认其表现符合与门的真值表:
print(AND(0, 0)) # 输出 0
print(AND(1, 0)) # 输出 0
print(AND(0, 1)) # 输出 0
print(AND(1, 1)) # 输出 1
3.2 导入权重和偏置
在之前的实现中,我们使用了阈值 θ \theta θ 来控制感知机的激活。为了更接近现代神经网络的实现方式,我们将修改感知机的定义,使用偏置 b b b 替代阈值,从而采用更通用的形式。这种修改不仅有助于理解感知机的行为,还能更好地与其他机器学习模型进行对比。
将原来的阈值 θ \theta θ 转换为偏置 b b b,感知机的行为可以用下面的数学公式表示:
y = { 0 if ( b + w 1 x 1 + w 2 x 2 ≤ 0 ) 1 if ( b + w 1 x 1 + w 2 x 2 > 0 ) y = \begin{cases} 0 & \text{if } (b + w_1 x_1 + w_2 x_2 \leq 0) \\ 1 & \text{if } (b + w_1 x_1 + w_2 x_2 > 0) \end{cases} y={01if (b+w1x1+w2x2≤0)if (b+w1x1+w2x2>0)
此处, b b b 称为偏置,而 w 1 w_1 w1 和 w 2 w_2 w2 继续作为权重。感知机将计算输入信号和权重的乘积和,加上偏置后,根据结果是否大于零来确定输出。
接下来,我们将使用 Python 和 NumPy 库来实现这一修改后的感知机模型。首先,我们定义感知机的权重和偏置,然后使用这些参数计算输出:
import numpy as np# 定义输入
x = np.array([0, 1])# 权重和偏置
w = np.array([0.5, 0.5])
b = -0.7# 计算加权输入和偏置的总和
weighted_sum = np.sum(w * x) + b# 输出结果 -0.2
print("Output:", 1 if weighted_sum > 0 else 0)
在这个例子中,我们首先将权重与输入相乘,然后加上偏置。这个总和决定了感知机的输出。
3.3 使用权重和偏置的实现
实现与门
与门要求所有输入都为1时,输出才为1。通过调整权重和偏置,我们可以如下实现与门:
def AND(x1, x2):x = np.array([x1, x2])w = np.array([0.5, 0.5])b = -0.7tmp = np.sum(w * x) + bif tmp <= 0:return 0else:return 1
在这里,偏置 b b b 被设置为 − 0.7 -0.7 −0.7,而权重 w 1 w_1 w1 和 w 2 w_2 w2 都是 0.5 0.5 0.5。这意味着只有当两个输入都为1时,感知机的输出才为1。偏置 b b b 和权重 w 1 w_1 w1, w 2 w_2 w2 的作用是不同的。权重控制输入信号的重要性,而偏置则调节神经元被激活的难易度。例如,如果 b b b 为 − 0.1 -0.1 −0.1,则相对较容易激活神经元;若 b b b 为 − 20.0 -20.0 −20.0,则需要更大的输入信号总和才能激活神经元。
实现与非门和或门
与非门和或门的实现也采用了类似的方法,只是权重和偏置有所不同:
def NAND(x1, x2):x = np.array([x1, x2])w = np.array([-0.5, -0.5]) # 权重与AND门相反b = 0.7tmp = np.sum(w * x) + bif tmp <= 0:return 0else:return 1def OR(x1, x2):x = np.array([x1, x2])w = np.array([0.5, 0.5])b = -0.2tmp = np.sum(w * x) + bif tmp <= 0:return 0else:return 1
在这些实现中,与门、与非门和或门的构造基本相同,区别仅在于权重和偏置的设置。这种方法展示了如何通过简单的参数调整,让感知机执行不同的逻辑功能。