【深度学习初探】Day03 - 感知机(Perceptron)

本文介绍了感知机的基本概念,包括其工作原理和在实现逻辑门电路(如与门、与非门、或门)中的应用。通过Python代码展示了如何用感知机实现这些逻辑门。然而,感知机无法解决非线性问题,如异或门,这引出了多层感知机的概念,它可以模拟更复杂的电路,包括异或门。感知机作为神经网络的前身,是理解深度学习基础的重要一步。
摘要由CSDN通过智能技术生成

【深度学习初探】Day03 - 感知机(Perceptron)



        感知机(Perceptron)这一算法是神经网络(深度学习)的起源算法,我们学习感知机的构造,以了解通向神经网络和深度学习的一种重要思想。

1.1 感知机是什么

        感知机接收多个输入信号,输出一个信号。感知机的信号只有两种取值:1/0。1代表“传递信号”,0代表“不传递信号”。
        下图是一个感知机,接收两个输入信号x1,x2,输出信号y,w1和w2是权重(Weight)。图中的⚪称为“神经元”或“节点”。输入信号进入神经元,会分别乘以固定的权重(即 w1 · x1 、 w2 · x2)。神经元会计算传来的信号总和,只有当这个总和超过某个界限值,才会输出1。这也被称为“神经元被激活”。这个界限值我们称为阈值,用符号θ表示。
在这里插入图片描述
        感知机的原理可以用下面的数学表达式来表示:
在这里插入图片描述
        感知机的多个输入信号都有各自固有的权重,权重越大,对应该权重的信号的重要性就越高。

1.2 简单逻辑电路

1.2.1 与门

        在一个逻辑电路中,与门(AND gate)是有两个输入和一个输出的门电路。给定一个“真值表”,如下表,与门仅在两个输入均为1时输出1,其他时候均输出0。

x1x2y
000
010
100
111

如果用感知机表示与门,那么如何设定w1、w2、θ的值?
        已知输入x1、x2只可能取0或1。那么w1和w2可以有多种取值。(0.5 0.5, 0.8)可以,(1.0,1.0,1.0)也可以。总之仅当x1和x2同时为1时,信号的加权总和才会超过给定的阈值θ。(w1 * x1 + w2 * x2 > θ)

1.2.2 与非门和或门

        与非门(NAND gate)是Not AND的意思,意思是仅当x1、x2同时为0时,才输出为1,真值表与与门的刚好相反。

x1x2y
001
011
101
110

        表示与非门,可以取负值,比如:(w1,w2,θ) = (-0.5,-0.5,-0.7)这样的组合。
        或门(OR gate)是“只要有一个输入信号是1,输出就为1”。真值表如下:

x1x2y
000
011
101
111

        这个时候我们可以取(w1,w2,θ) = (1.0,1.0,0.5)这样的组合。
        经过上面的研究,我们可以看到这些逻辑门和感知机构造是一样的。相同构造的感知机,只需要适当调整参数值,就可以“扮演”不同的角色。在机器学习中,学习就是确定合适参数的过程,这个工作由计算机自动进行,人要做的是思考感知机的构造(模型),并把训练数据交给计算机。

1.3 感知机的实现

1.3.1 使用Python实现逻辑门电路

def AND(x1, x2):
    w1, w2, theta = 0.5,0.5,0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))

        定义一个AND函数,传入参数x1、x2作为输入信号,设置w1、w2、θ为我们刚才选好的与门的参数0.5、0.5、0.7。当满足条件时,返回1。然后进行测试。
输出:

0
0
0
1

1.3.2 引入权重和偏置

        刚才的与门实现比较直接、容易理解,但是为了考虑后续学习,我们将其修改为另一种实现形式,首先我们把感知机的公式改成如下形式:
在这里插入图片描述
        实际上,我们是把 θ 换成了 -b ,然后移到了不等号左侧。此公式和上一个出现的公式虽然有一个符号不同,但表达的内容完全相同。
        此处,我们把 b 称为偏置w1w2称为权重。根据上式,感知机计算输入信号和权重的乘积的和,然后加上偏置,如果这个值大于0则输出1,否则输出0。下面我们使用之前介绍的NumPy来实现这个感知机。

import numpy as np
x = np.array([0, 1])        # 输入信号
w = np.array([0.5, 0.5])    # 权重
b = -0.7                    # 偏置
y = np.sum(w*x) + b         # 计算输出信号:y = w1*x1 + w2*x2 + b
print(y)

输出:

-0.19999999999999996

如上例所示,在NumPy数组乘法运算中,若两个数组元素个数相同,就会将各个元素分别相乘,返回一个新的同形状数组,因此:wx 可以得到 00.5 和 1*0.5。之后,sum函数计算相乘后各个元素的总和,最后把偏置加到加权总和上,就完成了与门的计算。根据感知机公式,得到结果 y ≤ 0,因此输出 0 。

1.3.3 使用权重和偏置的实现

        使用权重和偏置,可以像下面这样实现与门。

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

在这里, b就是偏置,偏置和权重的作用是不一样的。权重 w1w2 是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(也就是输出信号是1的程度)的参数。偏置的值决定了神经容易被激活的程度,在没有任何输入时(x1、x2都是0),无论 b 给多高,输出的只有偏置本身的值,而偏置本身在与门中是 ≤ 0 的,因此一定不会输出信号1。
        在与门基础上,我们只需要修改权重和偏置的值,就能实现与非门和或门。

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

1.4 感知机的局限性

        使用感知机可以简单地实现与门、与非门、或门三种逻辑电路。那么异或门(XOR gate)又该如何实现呢?

1.4.1 异或门

        异或门也被称为逻辑异或电路。仅当x1或x2中的一方为1时,才会输出1。

x1x2y
000
011
101
110

        你会发现,这个异或门,无论你如何设置权重参数都无法实现。我们可以用画图来帮助理解。在或门情况下,权重参数(b,w1,w2) = (-0.5,1.0,1.0)时,可以满足或门的真值表条件。此时感知机可用如下公式表示,然后绘出由直线 -0.5 + x1 + x2 = 0 分割开的两个空间,其中,左下角的空间输出0,右上角的空间输出1。
在这里插入图片描述
在这里插入图片描述
        图中的⚪,表示输出0,🔺表示输出1。如果想制作或门,图中的直线可以将三角和圆圈分隔开,实际上这就已经实现了。但是异或门的三角和圆圈排布是这样的:
在这里插入图片描述
无论如何都无法用一条直线,把🔺和⚪分隔开。这就涉及到线性和非线性问题。

1.4.2 线性和非线性

        上图中的⚪和🔺无法用一条直线分开,但是可以用“曲线”分开。
在这里插入图片描述
感知机的局限性在于它只能表示一条直线分割的空间,这样的曲线分割而成的非线性空间,感知机就无能为力了。但是,一个感知机不行,我们可以利用多台感知机。

1.5 多层感知机

        一语以蔽之,感知机的“叠加层”可以实现异或门。

1.5.1 已有门电路的组合

        异或门的制作,本身就可以利用我们已经做好的门来组装。我们回顾下逻辑门的符号。(⭕表示反转输出)
在这里插入图片描述
通过以下组合,可以实现异或门。
在这里插入图片描述
其真值表如下:

x1x2s1s2y
00100
01111
10111
11010
1.5.2 异或门的Python实现

        利用之前写好的三种门的函数,可以轻松实现异或门。

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y
1.5.3 异或门的感知机实现

        异或门是一种多层结构神经网络。
在这里插入图片描述
        在此,我们将叠加了多层的感知机称为多层感知机(multi-layered perceptron)。如上感知机由三层构成,第0层两个神经元接收输入信号,并将信号发送至第一层的神经元,第1层把信号发送到第2层,第2层的神经元输出y。这就是多层感知机。

1.6 与非门与感知机与计算机

        借助上面的启发,我们意识到,多层感知机可以实现比之前见到的电路更复杂的电路。但我们一定还没想到,计算机本身就是通过与非门的组合,实现复杂的处理。这也说明,使用感知机也可以表示计算机,通过组合感知机的叠加,可以表示计算机。
        感知机是一种非常简单的算法,它是神经网络的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值