深度学习入门|第二章 感知机

感知机

前言

此为本人学习《深度学习入门》的学习笔记

一、感知机是什么

感知机接受多个输入信号,输出一个信号。感知机的信号只有“流/不流“(1/0)两种取值,0对应不传递信号,1对应传递信号。

 


图2-1 有两个输入的感知机


神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出 1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ 表示。用数学公式表示就是

二、简单逻辑电路

1、与门(AND gate)

仅在两个输入均为1时输出1,其他时候则输出0

2、与非门(NAND gate)

当两个输入均为1时输出0,其他时候输出1

3、或门(OR gate)

当两个输入均为0时输出0,其他时候输出1

三、感知机的实现

1、简单的实现

 利用python实现逻辑电路,先定义一个接受参数x1和x的AND参数

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

在函数内初始化参数w1, w2, thete, 当输入的加权总和超过阈值时返回1,否则返回0.

2、导入权重和偏置并实现

 把式子2.1的θ 换成-b,可改为式2.2表示感知机的行为

此处,b称为偏置,w1和w2称为权重。

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

3、实现与非门和或门

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同!
    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])
    w = np.array([0.5, 0.5]) # 仅权重和偏置与AND不同!
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

 四、感知机的局限性

1、异或门(XOR gate)

  异或门也称逻辑异或电路。仅当两个输入一方为1时,才会输出1.

    实际上,前面介绍的感知机无法实现异或门

满足异或门条件的式子

 如下图,其无法用一条直线将o和△分开。

 

2、线性和非线性

 感知机的局限性就在于它只能表示由一条直线分割的空间。上图这样弯曲的曲线无法用感知机表示。另外,由上图这样的曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间

五、多层感知机

感知机的绝妙之处在于它的叠加层

1、已有门电路的组合

2、将其组合实现异或门

 3、异或门的实现

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

4、用感知机表达异或门

异或门是一种多层结构的神经网络。上图所示的叠加了多层的感知机也称多层感知机(multi-layered perceptron)

六 从与非门到计算机

感知机通过叠加层能够进行非线性的表示,理论上还可以表示计算机进行的处理

小结

  • 感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值。
  • 感知机将权重和偏置设定为参数。
  • 使用感知机可以表示与门和或门等逻辑电路。
  • 异或门无法通过单层感知机来表示。
  • 使用2层感知机可以表示异或门。
  • 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
  • 多层感知机(在理论上)可以表示计算机。
posted @ 2019-05-04 16:44  砍柴人Ryan  阅读(791)  评论(0编辑  收藏  举报