00感知机的原理与python实现

目录

1、感知机

2、简单逻辑电路

2.1 与门

2.2 与非门

2.3 或门

 3、感知机的局限性

4、多层感知机


1、感知机

感知机(perceptron)是由美国学者Frank Rosennblatt在1957年提出来的,它是神经网络(深度学习)的起源算法,感知机有多个输入信号,一个输出信号。信号只有1、0两种取值。

最简单的两输入感知机的结构:

图2.1 单层感知机

其中,符号说明:

        x_{1}x_{2}——输入信号

        y——输出信号

        w_{1}w_{2}——权重

        \bigcirc——神经元、节点

根据上图2.1,可以将感知机的输出表示为表达式:

y=w_{1}x_{1}+w_{2}x_{2}                                                     (2.1)

根据式2.1计算出来的y的值是介于(0,1)之间的某一个值,而我们希望y的值只取0或者1。所以需要给定一个阈值\theta来约定y的值。即:大于阈值\theta的为1,小于阈值\theta的为0。所以表达式2.1可以修改为:

y=\left\{\begin{matrix} 1 \, \, \, \, \, \, \, \, \, (w_{1}x_{1}+w_{2}x_{2}>\theta) \\ 0 \, \, \, \, \, \, \,\: (w_{1}x_{1}+w_{2}x_{2}\leqslant \theta) \end{matrix}\right.                                         (2.2)

为了考虑通用性,将表达式2.2中的\theta更改为-b,并移到左端,变为:

                   (2.3)

更改后的形式方便后续使用,其中b称为偏置。

2、简单逻辑电路

根据式2.3可以实现基本的逻辑门电路功能。

2.1 与门

表2.1 与门真值表

从真值表2.1可以看出,只有x全部为1时,y的输出才为1,其余都输出为0。满足表2.1的组合有很多种,比如\left ( w_{1} ,w_{2},\theta \right )=\left ( 0.5,0.5,0.7 \right )

2.2 与非门

       表2.2 与非门的真值表

 从与非门的真值表可以看出,和与门刚好相反,当x全是1的时候输出为0,其它输出均为1。

实现方法也很简单,直接将与门的参数全部取反就可以得到与非门。

2.3 或门

表2.3 或门的真值表

 从或门的真值表可以看出,当x全为0时,y的输出为0,其它情况y的输出全为1.

上面提到的三个门电路的python的实现代码:

#与门使用权重和偏置的实现代码
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


#与非门使用权重和偏置的实现代码

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



#或门使用权重和偏置的实现代码

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

 说明:

偏置b和权重w的作用是不一样的,w是控制输入信号的重要性的参数,w越大说明信号越重要。而偏置是调整神经元被激活的容易程度的参数。比如若b=-0.1,则只要输入信号的加权总和超过0.1,神经元就会被激活;如果b=-20时,则输入信号的加权总和必须超过20,神经元才能被激活。偏置的值决定了神经元被激活的容易程度。

 3、感知机的局限性

当使用上面同样的方法实现异或门的时候,发现无法实现。原因是,异或门的图形是非直线的。

         表2.4 异或门的真值表                                    

根据真值表,画出y与x的平面图,如图2.2。由于感知机只能表示由一条直线分割的空间,而异或门是一个非线性的空间,所以用感知机无法分割,但是可以用曲线进行分割如图2.4。

图2.2 异或门的输入输出平面图

图2.3 用感知机分割空间

图2.4 用曲线分割空间

4、多层感知机

感知机可以实现叠加层

 异或门可以通过与门、与非门和或门来叠加实现

 图2.5 叠加门实现异或门

根据上面的门电路叠加实现异或门的真值表如表2.5.

表2.5 叠加门实现异或门真值表

 实现也很简单,直接调用基本门电路的函数来实现。

异或门的实现代码:

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

print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))

将图2.5更改为感知机的形状,如图2.6

 图2.6 用感知机表示异或门

与门、或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机称为多层感知机。

图2.6为三层感知机。也说明,通过加深层可以实现更复杂的功能。

参考资料:《深度学习入门:基于python的理论与实现》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值