6.1 感知机的概念
感知机(Perceptron)是二分类模型,接收多个信号,输出一个信号。感知机的信号只有0、1两种取值。下图是一个接收两个输入信号的感知机的例子:
![图片[1]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-106.png)
![图片[2]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-107.png)
6.2 简单逻辑电路
6.2.1 与门
尝试使用感知机解决简单的问题,如实现逻辑电路中的与门(AND gate)。与门是具有两个输入和一个输出的门电路,仅在两输入均为1时输出1,其他时候输出0。这种输入信号和输出信号对应表称为真值表。
![图片[3]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-109.png)
6.2.2 与非门
![图片[4]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-110.png)
6.2.3 或门
![图片[5]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-111.png)
6.3 感知机的实现
6.3.1 简单实现
![图片[6]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-112.png)
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
res = x1 * w1 + x2 * w2
if res <= theta:
return 0
elif res > theta:
return 1
print(AND(0, 0)) # 0
print(AND(1, 0)) # 0
print(AND(0, 1)) # 0
print(AND(1, 1)) # 1
可以以同样的方式实现与非门和或门,不过在此之前先做一些修改。
6.3.2 导入权重和偏置
![图片[7]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-113.png)
import numpy as np
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
print(AND(0, 0)) # 0
print(AND(1, 0)) # 0
print(AND(0, 1)) # 0
print(AND(1, 1)) # 1
![图片[8]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-114.png)
import numpy as np
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
print(NAND(0, 0)) # 1
print(NAND(1, 0)) # 1
print(NAND(0, 1)) # 1
print(NAND(1, 1)) # 0
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
print(OR(0, 0)) # 0
print(OR(1, 0)) # 1
print(OR(0, 1)) # 1
print(OR(1, 1)) # 1
与门、与非门、或门是具有相同构造的感知机,区别仅在于权重参数的值。因此在与非门和或门的实现中,仅设置权重和偏置的值这一点和与门的实现不同。
6.4 感知机的局限
![图片[9]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-115.png)
![图片[10]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-116.png)
![图片[11]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-117.png)
如果要实现异或门,是无法使用一条直线将0和1分开的:
![图片[12]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-118.png)
但如果将直线这个限制条件去掉就可以了:
![图片[13]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-119.png)
感知机的局限性就在于它只能表示由一条直线划分的空间,而上图中的曲线无法用感知机表示。由曲线划分的空间称为非线性空间,由直线划分的空间称为线性空间。
6.5 多层感知机
![图片[14]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-120.png)
![图片[15]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-121.png)
使用之前实现的与门、与非门和或门代码来实现异或门:
import numpy as np
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
print(XOR(0, 0)) # 0
print(XOR(1, 0)) # 1
print(XOR(0, 1)) # 1
print(XOR(1, 1)) # 0
试着使用感知机的表示方法来表示这个异或门:
![图片[16]-第 6 章 感知机-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-122.png)
如图所示,这是一种多层感知机结构。
第0层的两个神经元接收输入信号,并将信号发送给第1层的神经元。第1层的神经元将信号发送给第2层的神经元。第2层的神经元输出结果。
通过叠加层,感知机能进行更加灵活的表示。
感知机是一种非常简单的算法,也是后续学习神经网络的基础。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
















请登录后查看评论内容