目录
前言
感知机是由美国学者Frank Rosenblatt在1957年提出来的。学习感知机的构造是学习通向神经网络和深度学习的一种重要思想。
1. 感知机是什么
感知机接收多个输入信号,输出一个信号。如图1-1所示,x1、x2是输入信号,y是输出信号,w1、w2是权重。图中的圆是“神经元”,输入信号被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号总和,当这个总和超过某个界限值时,才会输出1,这里的界限值称为阈值,用表示。
图1-1 有两个输入的感知机
将上述内容用数学式来表示,就是式(1-1)。
(1-1)
感知机的多个输入信号都有各自固有的权重,这些权重决定了信号的重要性。
2. 简单逻辑电路
2.1 与门
与门的真值表如下表2-1所示
表2-1 与门的真值表
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
下面用感知机来表示这个与门,需要做的就是确定w1、w2、的值,满足与门真值表条件的参数有无数个,如(w1,w1,
)=(0.5,0.5,0.7),只有当x1和x2同时为1时,信号的加权总和才会超过给定阈值
。
2.2 与非门和或门
接下来看一下与非门的真值表
表2-2 与非门的真值表
x1 | x2 | y |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
把与门的参数取反(w1,w1,)=(-0.5,-0.5,-0.7)就可以实现与非门。
接下来是或门
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
可以设定(w1,w1,)=(0.5,0.5,0.2)。
2.3 感知机的实现
2.3.1 导入偏置
我们将之前的式(1-1)换个形式:
(2-1)
表达的内容是完全相同的,b称为偏置,感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0,接下来我们来实现与门、与非门和或门。
2.3.2 实现与门
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
2.3.3 实现与非门
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
2.3.4 实现或门
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