感知机

感知机是什么

感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值。感知机接收多个输入信号,输出一个信号。

感知机的数学公式如下:

\[y = \begin{cases} 0\;(w_1x_1 + w_2x_2 <= \theta) \\ 1\;(w_1x_1 + w_2x_2 <= \theta) \\ \end{cases} \]

其中 x1、x2 是输入信号, y 是输出信号,w1、w2 是权重。感知机将权重和偏置设定为参数。

感知机实现逻辑门

使用单层感知机可以实现与门、与非门、或门这三种逻辑电路。这 3 个门电路只有参数的值不同,感知机构造一样的。

# 与门
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

但是,使用单层感知机无法实现异或门,这是因为单层感知机的局限性在于它只能表示由一条直线分割的空间(线性空间)。

感知机_或门

表示0,△表示1,用一条直线是无法将○和△分开的

感知机可以使用叠加层,使用 2 层感知机可以表示异或门——通过组合与门、与非门、或门。

感知机_深度学习_02
通过组合与门、与非门、或门实现异或门

异或门的代码实现如下:

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

与门、或门是单层感知机,而异或门是 2 层感知机。叠加了多层的感知机也称为多层感知机(multi-layered perceptron)。