感应机
康奈尔大学的实验心理学家罗森布拉特(Frank Rosenblatt)在一台IBM-704计算机上模拟实现了一种他发明的叫作“感知机”(Perceptron)的神经网络模型。这个模型可以完成一些简单的视觉处理任务。
罗森布拉特在理论上证明了单层神经网络在处理线性可分的模式识别问题时,可以收敛,并以此为基础做了若干“感知机”有学习能力的实验。
其中可以用于表现简单逻辑电路
- 与门: 两个条件同为一个为1,为true.
- 或门: 其中一个条件为true,为true.
- 非与门: 与门相反,任其中一个条件不为true,为true,即两个都不为true时,为true。
- 异或门: 当两者不相同为true,相同为false
与门,代码如下:
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
使用权重和偏置的实现
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])
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
缺陷:当时罗森布拉特的感应机只能处理线性空间,而无法处理异或门这类曲线空间
通过文中介绍,异或门是一条曲线。而感应机只能表示一条直线分割的空间。
多层感应机
感知机的绝妙之处在于它可以“叠加层”,可以通过叠加感应机来表示异或门。
单层感知机无法表示的东西,通过增加一层就可以解决。弥补了单层感知机只能表示线性空间,从而可以表示非线性空间。
从图看可以是XOR是NAND和OR的共有子集。
代码如下:
def XOR(x1,x2)
s1 = NAND(x1,x2)
s2 = OR(x1,x2)
return AND(S1,S2)
参考 关于感应机由来介绍,参考于 人工智能简史 尼克