感知机与门电路

前言:简述单层感知机特征及三种表示方式,并用单层感知机描述门电路,借由单层感知机无法处理非线性空间的问题,引出多层感知机。

单层感知机

感知机(preceptron)接收多个输入信号,输出一个信号。

如下图所示为有两个输入的感知机。其中, x 1 x_1 x1 x 2 x_2 x2 为输入信号, y y y 为输出信号, w 1 、 w 2 w_1、w_2 w1w2 为权重,输入信号分别乘上各自权重,若两者总和超过某一阈值 θ \theta θ,则输出1,类似于神经元被激活。
感知机与门电路_第1张图片

数学表示
y = { 0 , w 1 x 1 + w 2 x 2 ⩽ θ 1 , w 1 x 1 + w 2 x 2 > θ y= \begin{cases}0 , w_1 x_1+w_2 x_2 \leqslant \theta \\ 1 , w_1 x_1+w_2 x_2>\theta\end{cases} y={0,w1x1+w2x2θ1,w1x1+w2x2>θ
权重 w w w 表示信号的重要程度;阈值 θ \theta θ 表示神经元被激活的难易程度,若 θ \theta θ 为 -50,则神经元被激活难度大,反之难度小。

另一种数学表示
y = { 0 , w 1 x 1 + w 2 x 2 + b ⩽ 0 1 , w 1 x 1 + w 2 x 2 + b > 0 y= \begin{cases}0 , w_1 x_1+w_2 x_2+b \leqslant 0 \\ 1 , w_1 x_1+w_2 x_2+b>0\end{cases} y={0,w1x1+w2x2+b01,w1x1+w2x2+b>0
较上式,令 b = − θ b=-\theta b=θ,称为偏执。这种表示方法便于编程时借助矩阵运算。

几何表示:表示空间中的一条直线,无法表示曲线。由直线划分的空间称为线性空间,由曲线划分的空间表示非线性空间。



感知机 与 门电路

感知机能够表示与门、或门、非门。

与门

与门(AND gate)是有两个输入和一个输出的门电路,与门特点是全1则1,其余为0。下表为与门真值表,即输入和输出信号的对应表。

x 1 x_1 x1 x 2 x_2 x2 y y y
0 0 0
0 1 0
1 0 0
1 1 1

数学表示:
y = { 0 , 0.5 x 1 + 0.5 x 2 ⩽ 0.7 1 , 0.5 x 1 + 0.5 x 2 > 0.7 y= \begin{cases}0 ,0.5x_1+0.5x_2 \leqslant 0.7 \\ 1 , 0.5x_1+0.5x_2>0.7 \end{cases} y={0,0.5x1+0.5x20.71,0.5x1+0.5x2>0.7
几何表示:
感知机与门电路_第2张图片

Python 实现:

#数学表示1
def AND_gate(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = w1*x1 + w2*x2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1
    
# ===========================
# 数学表示2
import numpy as np
def AND_gate_1(x1, x2):
    x = np.array([x1, x2, 1])
    w = np.array([0.5, 0.5, -0.7])
    tmp = np.sum(w*x)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

与非门

和「与门」的输出相反。
y = { 0 , − 0.5 x 1 − 0.5 x 2 ⩽ − 0.7 1 , − 0.5 x 1 − 0.5 x 2 > − 0.7 y= \begin{cases}0 ,-0.5x_1-0.5x_2 \leqslant -0.7 \\ 1 , -0.5x_1-0.5x_2>-0.7 \end{cases} y={0,0.5x10.5x20.71,0.5x10.5x2>0.7
Python实现:

import numpy as np
def NAND_gate(x1, x2):
    x = np.array([x1, x2, 1])
    w = np.array([-0.5, -0.5, 0.7])
    tmp = np.sum(w*x)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

或门

有1则1,全0则0。
y = { 0 , 0.5 x 1 + 0.5 x 2 ⩽ 0.2 1 , 0.5 x 1 + 0.5 x 2 > 0.2 y= \begin{cases}0 ,0.5x_1+0.5x_2 \leqslant 0.2 \\ 1 , 0.5x_1+0.5x_2>0.2 \end{cases} y={0,0.5x1+0.5x20.21,0.5x1+0.5x2>0.2
Python 实现:

import numpy as np
def OR_gate(x1, x2):
    x = np.array([x1, x2, 1])
    w = np.array([0.5, 0.5, -0.2])
    tmp = np.sum(w*x)
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

异或门

仅当 x 1 、 x 2 x_1、x_2 x1x2 中一方为1时,才会输出 1。

x 1 x_1 x1 x 2 x_2 x2 y y y
0 0 0
0 1 1
1 0 1
1 1 0

无法用一条直线划分两种标记,因为感知机不能表示空间曲线。
感知机与门电路_第3张图片

多层感知机

单层感知机无法表示非线性空间,但多层感知机(multi-layered perceptron)可以表示。

通过叠加与、非与、或门实现异或门,Python 实现如下:

def XOR(x1, x2):
    s1 = NAND_gate(x1, x2)
    s2 = OR_gate(x1, x2)
    y = AND_gate(s1, s2)
    return y

如下图所示为2层感知机,感知机总共由 3 层构成,但是因为拥有权重的层实质上只有 2 层(第 0 层和第 1 层之间,第 1 层和第 2 层之间),所以称为「2层感知机」。不过,若从 3 层结构来看,也可称为「3层感知机」。
感知机与门电路_第4张图片


参考书籍:
深度学习入门:基于Python的理论与实现 (斋藤康毅)

你可能感兴趣的:(机器学习,感知机)