欢迎光临散文网 会员登陆 & 注册

鱼书(深度学习入门):第二章 感知器

2023-07-17 17:01 作者:棒棒x  | 我要投稿

一、感知器的原理

    感知机(perceptron)接收多个输入信号,输出一个信号。x1、x2是输入信号, y是输出信号,w1、w2是权重(w是weight的首字母)。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号θ表示。

有两个输入的感知器

    其数学原理如下:

数学表达式

    其中权重控制了各个输入的重要程度,而阈值控制了感知器被激活的难易程度。

    将上式中的θ改为-b,可得新的表达方式。


新的表达式

    此处,b称为偏置,w1和w2称为权重。感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。

二、简单逻辑电路

    1.与门(AND gate)

与门真值表

示例代码:

import numpy as np #利用向量完成感知机

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

2.与非门(NAND gate)

与非门真值表

示例代码:

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

3.或门(OR gate)

或门真值表

示例代码:

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

三、感知器的局限性

    下图是感知器的可视化,其中灰色部分与白色部分分别输出不同的结果。

感知器可视化

    感知器的局限性在于,其只能用直线分割空间。由直线分割的空间称为线性空间,由曲线分割而成的空间成为非线性空间,如下图。

非线性空间

四、多层感知机

    通过“叠加层”,构建多层感知机,便可以表示非线性空间。此处以构建异或门(XOR gate)为例。

异或门真值表

    通过组合上一节中的与门,或门,与非门便可以构造出异或门。如下图所示。

构造异或门

其代码实现:

def XOR(x1,x2):  #利用多个门实现新门,也即多层感知机

    s1=NAND(x1,x2)

    s2=OR(x1,x2)

    y=AND(s1,s2)

    return y

    这样,我们便实现了异或门。异或门是一种多层结构的神经网络。其过程真值表如下。

构造的异或门真值表

    这里,将最左边的一列称为第0层,中间的一列称为第1层,最右边的一列称为第2层。实际上,与门、或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机也称为多层感知机(multi-layered perceptron)。

用感知器表示异或门

五、感知器与计算机

    计算机可以通过组合感知器表示。理论上可以说2层感知机就能构建计算机。这是因为,已有研究证明,2层感知机(严格地说是激活函数使用了非线性的sigmoid函数的感知机)可以表示任意函数。

鱼书(深度学习入门):第二章 感知器的评论 (共 条)

分享到微博请遵守国家法律