深度学习深度学习-推荐系统-CV-NLP

第2章 由感知机导入神经网络

2019-01-13  本文已影响0人  陶不渊

重点:

  1. 感知机将权重与偏置设定为参数。
  2. 不改变结构,只改变参数可以使感知机实现不同的功能。
  3. 单层感知机只能表示线性空间,多层感知机可以表示非线性空间。

2.1 感知机是什么

感知机接收多个(0,1)输入信号,输出一个(0,1)信号。

下图展示了一个二输入的感知机的例子:

x1,x2是输入信号,y是输出信号,w1,w2是权重,⚪表示一个神经元,还有一个重要参数没在图中表示出来,是阈值θ,大于阈值输出1,小于阈值输出0。具体公式如下:


当w1x1+w2x2>θ时,输出为1,称“神经元被激活”。

小结:

  1. 阈值θ决定了输出神经元激活的难易程度
  2. 权重w1,w2决定了输入信号x1和x2的重要性

2.2 简单逻辑电路

2.2.1 与门

与门真值表:

x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1

考虑用上面的二输入感知机实现与门,可调的参数只有3个,分别是权重w1,w2和阈值θ。

w1,w2,θ可取的值为:

w1 w2 θ
0.5 0.5 0.7
0.5 0.5 0.8
1.0 1.0 1.0

可以验证,当参数取上面3种情况时,只有x1,x2都为1,输出y才为1。除了上面3种取法,还有无数种,可见参数的选择不唯一。

2.2.2 与非门

与非门真值表:

x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0

与非门就是在与门基础上,取反

w1,w2,θ可取的值为:

w1 w2 θ
-0.5 -0.5 -0.7
-0.5 -0.5 -0.8
-1.0 -1.0 -1.0

与非门的参数选择亦有无数种,不唯一。

2.2.3 或门

或门真值表:

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

w1,w2,θ可取的值为:

w1 w2 θ
0.5 0.5 0.3
0.5 0.5 0.4
1.0 1.0 0.7

或门的参数选择亦有无数种,不唯一。

重点: 与,或,与非门的感知机构造都是一样的,都是用二输入感知机实现,通过选取不同的参数,实现不同的逻辑计算。

机器学习的目标就是告诉计算机要实现的目标,让计算机自动选择合适的参数。


2.3 感知机的Python实现

2.3.1 用偏置代替阈值

将上面的数学表达式的θ移到右边,令b=-θ,换一种表达方式:


image

我们称b为偏置,效果就像穿木屐,在计算b+w1x1+w2x2的过程中,权重w和输入x都知道的时候,b总是将计算结果抬到一个高度,使其更容易或更难大于0。

权重w1,w2是控制输入信号的重要性的参数。

偏置b是调整神经元被激活的容易程度的参数。

2.3.2 用Python实现与门,与非门,或门

与门:

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   
    
    #mumpy中数组相乘,为其对应位置元素相乘,构成表达式b+w1x1+w2x2
    
    if tmp <= 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
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

或门:

import numpy as np

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

2.4 感知机的局限性

2.4.1 异或门

我们来看一下异或门的真值表:

异或门真值表:

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

只有当输入x1和x2不一样时,输出才为1。

我们用前面使用的二输入感知机无法实现异或门,可以通过画图理解。

下面是或门的输入输出分布图,●表示0,▲表示1,可以通过参数的选取,w1=1,w2=1,b=-0.5。


image

用直线-0.5+x1+x2=0可以将两个不同的输出区域分割开。


但是观察异或门的输入输出分布图:

image

很明显,如果遵从数学公式:

image

无法使用一条直线b+w1x1+w2x2=0将不同的输出区域分割开。

2.4.2 线性和非线性

感知机的局限性就在于它只能表示由一条直线分割的空间。

倘若我们要分割异或门的输入输出空间,就必须使用曲线。


image

这种由曲线分割而成的空间称为非线性空间

而由直线分割而成的空间称为线性空间


2.5 多层感知机

2.5.1 异或门的实现

单层二输入感知机无法实现异或门的表达,但是通过叠加感知机,可以实现更多的逻辑表达。

用下面的符号来表达已有的可以用一个感知机表达的逻辑:


可以通过组合,叠加感知机,实现异或门。


s1是与非门的输出结果,s2是或门的输出结果,将s1,s2作为与门的输入,得到y,可以实现异或门。

x1 x2 s1 s2 y
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

2.5.2 异或门的python实现

#要先从包含与,或,与非门的模块导入对应的函数
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

用感知机表示异或门,如下图所示


image

从图可以看出,异或门是一个多层感知机

最左边一层神经元称为第0层,为的是与Python的列表逻辑符合,由于上图中,拥有权重的层实际上只有2层(第0层和第1层之间,第1层和第2层之间),所以称为2层感知机,有的文献也称为3层,忽略权重。

通过叠加层,感知机能进行更灵活的表示,例如表示非线性空间。

上一篇下一篇

猜你喜欢

热点阅读