深度学习入门基础1--感知机(感知机实例:逻辑门与门、与非门、或门、异或门)

引言

正式开始学习深度,然后决定将学习的内容汇总分享一下,这个应该是会做成一个系列,我打算直接从神经网络最基础、最底层的内容开始。

本系列内容主要参考《深度学习入门-基于Python的理论与实践》

简述感知机

感知机是什么?

感知机最早是由美国学者Frank Rosenblatt在1957年提出的。感知机能够接受多个信号,最后输出一个信号(信号就是是数据),这事实上和电流很类似。而我们为什么要在深度学习的内容中最先开始提到感知机,主要还是因为感知机是作为神经网络(深度学习)的起源算法,在开始的学习中,了解感知机有利于后面神经网络的神经元的理解。

感知机实例

那么我们借助一个简单的感知机例子来叙述这部分内容,如图1所示:
图1.两个输入的感知机
其实从图中我们很容易得到这个感知机模型一共有两个输入,分别是x_1和x_2,经过某种运算得到y,事实上,这里的运输就是简单的乘法和加法,输出y的表达式为:
y = x 1 × w 1 + x 2 × w 2 y= x_1×w_1+x_2×w_2 y=x1×w1+x2×w2
而在感知机中y的取值一般只取0或者1,那么上述的式子就变成了:
y = { 0   w 1 x 1 + w 2 x 2 ≤ θ 1   w 1 x 1 + w 2 x 2 > θ y = \begin{cases} 0& \text{ } w_{1}x_{1}+w_{2}x_{2}\le \theta \\ 1& \text{ } w_{1}x_{1}+w_{2}x_{2}> \theta \end{cases} y={01 w1x1+w2x2θ w1x1+w2x2>θ
其实从图1的信息就可以得知,感知机的输入都会有各自的权重,这些权重就是对输入信息的处理。下面,我们利用感知机对简单逻辑电路中的逻辑门进行实现。

感知机对逻辑电路的实现

与门

与门是有两个输入和一个输出的门电路,两个信息的输入信息与输出信息如下表所示:

x 1 x_{1} x1 x 2 x_{2} x2y
000
100
010
111

依据表中的数据,我们需要的就是确定特定的 w 1 w_{1} w1 w 2 w_{2} w2 θ \theta θ的值,来使得我们感知机的输出的值满足上述表格。事实上,能够满足条件的参数有很多种,我们这里就用比较常用的一种与门感知机参数,即 ( w 1 , w 2 , θ ) = ( 0.5 , 0.5 , 0.7 ) (w_{1},w_{2},\theta) =(0.5,0.5,0.7) (w1,w2,θ)=(0.5,0.5,0.7)。当然也可以用其他的参数值,我们这里就只实现这一种。那么对应我们的表达式就是:
y = { 0   0.5 x 1 + 0.5 x 2 ≤ 0.7 1   0.5 x 1 + 0.5 x 2 > 0.7 y = \begin{cases} 0& \text{ } 0.5x_{1}+0.5x_{2}\le 0.7 \\ 1& \text{ } 0.5x_{1}+0.5x_{2}> 0.7 \end{cases} y={01 0.5x1+0.5x20.7 0.5x1+0.5x2>0.7
那么python实现就相当简单了:

def AND(X1,X2):
	W1,W2,theta = 0.50.50.7
	tmp = x1*W1+x2*W2 - theta
	if tmp <= 0:
		return 0
	elif tmp > 0:
		return 1 

验证一下,特别说明,对于电路逻辑门,输入只有1/0,输出结果:

AND(0,0)  #	输出0
AND(1,0)  #	输出0
AND(0,1)  #	输出0
AND(1,1)  #	输出1

与非门、或门

与门我们已经实现了,那么读者可以自行尝试一下将与非门和或门实现一下,两种门的输入输出表如下:
与非门:

x 1 x_{1} x1 x 2 x_{2} x2y
001
101
011
110
def NAND(x1,x2):

或门:

x 1 x_{1} x1 x 2 x_{2} x2y
000
101
011
111
def OR(x1,x2): 

对于与门、与非门、或门都是具有相同构造的感知机,他们之间的区别仅仅只有权重参数的不同而已。

异或门

上面讲到的与门、与非门、或门都是具有相同构造的感知机,也就是可以用下面的表达式来表示: y = { 0   w 1 x 1 + w 2 x 2 ≤ θ 1   w 1 x 1 + w 2 x 2 > θ y = \begin{cases} 0& \text{ } w_{1}x_{1}+w_{2}x_{2}\le \theta \\ 1& \text{ } w_{1}x_{1}+w_{2}x_{2}> \theta \end{cases} y={01 w1x1+w2x2θ w1x1+w2x2>θ而异或门的结构并不是,这也是属于感知机的局限性的一种体现。
异或门也被称为逻辑异或电路,他的输入输出形式如下表所示:

x 1 x_{1} x1 x 2 x_{2} x2y
000
101
011
110

前面我们所讲的几种逻辑门,都是一个输入对应一个权值,然后与 θ \theta θ的值进行对比。对比上面异或门的表所示,很容易得到,对于权重 w 1 w_{1} w1 w 2 w_{2} w2值,应该会有 w 1 w_{1} w1> θ \theta θ(表中数据第二行),以及 w 2 w_{2} w2> θ \theta θ(表中数据第三行)。但是从输入为(1,1),输出为0,又可以得出 w 1 w_{1} w1+ w 2 w_{2} w2> θ \theta θ,这显然前后是矛盾的。因此,简单的感知机并不能实现异或门。

那么异或门如何实现的?

由此,不禁然间产生了这样的疑惑:异或门就不能利用到感知机实现了么?我相信读者应该有一点电路的基础(如果没有的话,可以去查询一下逻辑电路的实现方法)。那么在电路中,异或门要怎么实现?是利用现有的、已经实现的逻辑门来搭建。而我们已经实现了的逻辑门有与门(AND)、与非门(NAND)和或门(OR)。、

怎么利用现有的门实现异或门?

对于这个问题,我们直接给出解决方案,读者也可以依据自己的知识储备去理解为什么是这样的实现的。

我们用电路中对逻辑门的符号来表示几个逻辑门,表示形式如下图所示:
图2.逻辑门

通过组合与,与门、与非门、或门实现异或门的配置如下图所示:
图3.组合与,与门、与非门、或门实现异或门
对于不同输入下各个参数的情况如下表所示:

x 1 x_{1} x1 x 2 x_{2} x2 s 1 s_{1} s1 s 2 s_{2} s2y
00100
10111
01111
11010

基于上述配置,我们也能够通过python代码实现,实现结果如下:

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

代码十分简单,输出结果如下:

输出:
XOR(0,0) #输出0
XOR(1,0) #输出1
XOR(0,1) #输出1
XOR(1,1) #输出0

这样异或门就实现了!

小结

以上是通过python代码实现了几个感知机得模型,最后还利用已有得感知机模型完成对异或门的实现。至于最后为什么要完成对异或门的实现,事实上和我们后面学习神经网络的理解有很大的帮助,我们知道,神经网络是各个神经元直接的数据输入输出的传递,这和异或门的实现比较类似。那么感知机的叙述就到这里了,有问题的欢迎提问,虽然因为我也在学习阶段,对一些问题的理解还不够通彻,但我们还是可以讨论讨论的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小佈要早睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值