深度学习入门一之感知机

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/BigDream123/article/details/99702207

感知机

1、感知机是什么

感知机是接收多个输入信号,输出一个信号。

 如图就是一个接收两个输入信号的感知机。其中x1,x2是输入信号,w1,w2称为权重,y是输出信号。图中的\bigcirc称为神经元或者节点。输入信号被送往神经元时,会乘以相应的权重w1,w2,神经元会计算传送过来的信号的总和。只有当这个信号和超过某个阈值时,才会输出1,这也称为“神经元被激活”。这里阈值用\theta表示。

通常,除了有权重,还会给其信号和加上一个常数,该常数称为偏置,用b表示。

上图用数学公式表示为:

                                        y=\left\{\begin{matrix}0 & w_{1}x_{1}+w_{2}x_{2}+b \leqslant \theta & \\ 1 & w_{1}x_{1}+w_{2}x_{2}+b > \theta& \end{matrix}\right.

2、感知机实现简单逻辑电路

简单逻辑电路分为与或非,所谓与门就是只在输入全为1时才会输出1,其他情况都输出0;或门是在输入有一个1时就会输出1,当且仅当输入全为0时,才会输出0。

与门的真值表如图所示:

或门的真值表如图所示:

与非门:就是颠倒了与门的输出,真值表如图所示:

利用Python实现与门:(这里我们使用Python的Numpy库实现)

这里我们将w1和w2分别设为0.5,0.5,将偏置设为-0.7,如下所示,可以实现一个简单的与门

import numpy as np
def AND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7
    temp = np.sum(w * x) + b
    if temp <= 0:
        return 0
    else:
        return 1

同理我们可以实现或门和与非门

import numpy as np
def NAND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5])
    b = 0.7
    temp = np.sum(w * x) + b
    if temp <= 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
    temp = np.sum(w * x) + b
    if temp <= 0:
        return 0
    else:
        return 1

3、感知机的局限性

我们用感知机可以实现的与门,或门和与非门。我们这里继续考虑异或门。

异或门是当且仅当只有一个输入为1时,才会输出1,。真值表如图所示:

 实际上,我们利用一个感知机是无法实现如上图所示的异或门的,这里我们利用画图来解释为什么无法实现异或门。

首先以或门为例,之前实现或者的程序中,设(w1,w2,b) = (1,1,-0.5),这里感知机可以用下式表示:

y = \left\{\begin{matrix}0 & -0.5 + x_{1} + x_{2} \leq 0 & \\ 1 & -0.5 + x_{1}+x_{2} > 0 & \end{matrix}\right.

上式所示的感知机会由直线-0.5+x1+x2=0在空间中分为两个空间,其中一个空间输出0另一个空间输出1

其中\bigtriangleup代表1,\bigcirc表示0 。

同理,如果想正确表示出或门,则需要将0和1正确分开。

异或门的输出如图所示,无法做到用一条直线将0和1的空间正确的分开,故无法用单个感知机实现异或门。 

感知机的局限性就在于它只能表示线性分类或者线性回归问题。

4、多层感知机

尽管单个感知机无法实现异或门(非线性运算),但是多个感知机级联在一起就可以实现异或运算(非线性运算)

我们可以用感知机实现与门,或门和与非门,我们可以将与门,或门,与非门级联起来从而实现或门。如下图所示:

其中x1,x2表示输入,s1表示与非门的输出,s2表示或门的输出,y表示与门的输出,通过级联这三个门,可以实现或门运算。

真值表如图所示:

利用Python实现异或门:

def XOR(x1,x2):
    s1 = NAND(x1,x2) # 与非门函数
    s2 = OR(x1,x2) # 或门函数
    return AND(s1,s2) # 与门函数

用感知机的表示方法表示或门如图所示:

 左边第一列称为第0层,中间一列称为第1层,右边一列称为第2层。上图所示感知机称为两层感知机(实际上有权重和偏置的只有两层)。通过叠加了多层的感知机的也称为多层感知机。

由此可见,单层感知机可以表示线性空间,多层感知机可以表示非线性空间。

猜你喜欢

转载自blog.csdn.net/BigDream123/article/details/99702207