单层感知机无法表示异或门,单层感知机无法分离非线性空间。这让人深感遗憾,但也无需悲观。因为,可以通过组合单层感知机来表示异或门。
也就是说,通过叠加层(加深层),感知机能进行更加灵活的表示。
实际上,与门、或门、与非门是单层感知机,而异或门是2层感知机。
【异或门的Python实现】
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
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 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 XOR(x1,x2):
s1=NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return y
if __name__=='__main__':
for xs in [(0,0),(1,0),(0,1),(1,1)]:
y=XOR(xs[0],xs[1])
print(str(xs)+" -> "+str(y))
【运行结果】
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0