感知机与门电路

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

单层感知机

感知机(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,类似于神经元被激活。
在这里插入图片描述

数学表示

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>thetaend{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>0end{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
几何表示:
在这里插入图片描述

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

无法用一条直线划分两种标记,因为感知机不能表示空间曲线。
在这里插入图片描述

多层感知机

单层感知机无法表示非线性空间,但多层感知机(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层感知机」。
在这里插入图片描述


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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>