深度学习入门:基于Python的理论与实现——第二章——感知机

本文介绍了感知机的基本原理,包括输入信号处理、权重和阈值的作用,以及与门、与非门、或门和异或门的实现。强调了单层感知机的线性限制,指出通过叠加多层可实现非线性表示的多层感知机。
摘要由CSDN通过智能技术生成

第二章——感知机

  1. 感知机是什么

    感知机接收多个输入信号,输出一个信号。这里所说的“信号”可以想象成电流或河流那样具备“流动性”的东西。像电流流过导线,向前方输送电子一样,感知机的信号也会形成流,向前方输送信息。但是,和实际的电流不同的是,感知机的信号只有“流/不流”(1/0)两种取值。在本书中,0对应“不传递信号”,1对应“传递信号”。

    比如某个感知机由输入信号x1、x2和输出信号y组成,x1的权重是w1,x2的权重是w2。x1、x2、y都是一个“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(x1w1,x2w2)。神经元会计算传过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1.这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号θ表示。

    感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。

  2. 感知机的实现

    (1)简单的实现

    import numpy as np
    ​
    ​
    # 与门
    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(1, 0))
    print(AND(0, 1))
    print(AND(1, 1))
    ​
    ​
    # 使用numpy来实现
    # 与门
    def AND2(x1, x2):
        x = np.array([x1, x2])
        w = np.array([0.5, 0.5])
        b = -0.7
        tmp = np.sum(x * w) + b
        if tmp <= 0:
            return 0
        else:
            return 1
        
    # 与非门
    def NAND(x1, x2):
        x = np.array(x1, x2)
        w = np.array([-0.5, -0.5])
        b = 0.7
        tmp = np.sum(x * w) + b
        if tmp <= 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
        tmp = np.sum(x * w) + b
        if tmp <= 0:
            return 0
        else:
            return 1
    ​

    这里把-θ命名为偏置b,但偏置和权重的作用是不一样的。具体的说,权重是控制输入信号重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。有时候,根据上下文语义,也会将b、w1、w2这些参数统称为权重。

    与门、与非门、或门是具有相同构造的感知机,区别只在于权重参数的值。

  3. 感知机的局限性

    (1)异或门,也被称为逻辑异或电路,仅当x1或x2中的一方为1时,才会输出1(“异或”是拒绝其他的意思)。

    用前面介绍的感知机是无法实现异或门的,因为感知机的局限性就在于它只能表示由一条直线分割的空间,而不能表示由曲线分割的空间。由曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。

  4. 多层感知机

    虽然单层感知机不能表示异或门,但感知机可以“叠加层”。

    异或门可以通过与门、与非门、或门的组合来实现:

    # 或门
    def OR(x1, x2):
        x = np.array([x1, x2])
        w = np.array([0.5, 0.5])
        b = -0.2
        tmp = np.sum(x * w) + b
        if tmp <= 0:
            return 0
        else:
            return 1

    异或门是一种多层结构的神经网络。与门、与非门、或门是单层感知机,异或门是2层感知机(因为有权重的层实质上只有2层)。叠加了多层的感知机称为多层感知机。通过叠加层(加深层),感知机能进行更加灵活的表示。多层感知机在理论上可以表示计算机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值