深度学习入门基础:感知机详解与逻辑门实现
深度学习入门基础:感知机详解与逻辑门实现
感知机是深度学习中神经网络的基础单元,它能够接受多个输入信号并产生一个输出信号。本文将详细介绍感知机的基本概念,并通过Python代码实现与门、与非门、或门和异或门等逻辑门的实例,帮助读者理解感知机的工作原理及其在深度学习中的应用。
引言
本文将从神经网络最基础、最底层的内容开始,介绍深度学习中的感知机。本系列内容主要参考《深度学习入门-基于Python的理论与实践》。
简述感知机
感知机是什么?
感知机最早是由美国学者Frank Rosenblatt在1957年提出的。感知机能够接受多个信号,最后输出一个信号(信号就是是数据),这事实上和电流很类似。而我们为什么要在深度学习的内容中最先开始提到感知机,主要还是因为感知机是作为神经网络(深度学习)的起源算法,在开始的学习中,了解感知机有利于后面神经网络的神经元的理解。
感知机实例
我们借助一个简单的感知机例子来叙述这部分内容,如图1所示:
其实从图中我们很容易得到这个感知机模型一共有两个输入,分别是x_1和x_2,经过某种运算得到y,事实上,这里的运输就是简单的乘法和加法,输出y的表达式为:
y = x 1 × w 1 + x 2 × w 2 y= x_1×w_1+x_2×w_2y=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 w1 x1 +w2 x2 ≤θ w1 x1 +w2 x2 >θ
其实从图1的信息就可以得知,感知机的输入都会有各自的权重,这些权重就是对输入信息的处理。下面,我们利用感知机对简单逻辑电路中的逻辑门进行实现。
感知机对逻辑电路的实现
与门
与门是有两个输入和一个输出的门电路,两个信息的输入信息与输出信息如下表所示:
x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1
依据表中的数据,我们需要的就是确定特定的w1、w2和θ的值,来使得我们感知机的输出的值满足上述表格。事实上,能够满足条件的参数有很多种,我们这里就用比较常用的一种与门感知机参数,即( 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.5x2 ≤0.7 0.5x1 +0.5x2 >0.7
那么python实现就相当简单了:
def AND(X1,X2):
W1,W2,theta = 0.5,0.5,0.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
与非门、或门
与门我们已经实现了,那么读者可以自行尝试一下将与非门和或门实现一下,两种门的输入输出表如下:
与非门:
x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0
def NAND(x1,x2):
或门:
x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1
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 w1 x1 +w2 x2 ≤θ w1 x1 +w2 x2 >θ
而异或门的结构并不是,这也是属于感知机的局限性的一种体现。
异或门也被称为逻辑异或电路,他的输入输出形式如下表所示:
x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0
前面我们所讲的几种逻辑门,都是一个输入对应一个权值,然后与θ的值进行对比。对比上面异或门的表所示,很容易得到,对于权重w1、w2值,应该会有w1>θ(表中数据第二行),以及w2>θ(表中数据第三行)。但是从输入为(1,1),输出为0,又可以得出w1+w2>θ,这显然前后是矛盾的。因此,简单的感知机并不能实现异或门。
那么异或门如何实现的?
由此,不禁然间产生了这样的疑惑:异或门就不能利用到感知机实现了么?我相信读者应该有一点电路的基础(如果没有的话,可以去查询一下逻辑电路的实现方法)。那么在电路中,异或门要怎么实现?是利用现有的、已经实现的逻辑门来搭建。而我们已经实现了的逻辑门有与门(AND)、与非门(NAND)和或门(OR)。、
怎么利用现有的门实现异或门?
对于这个问题,我们直接给出解决方案,读者也可以依据自己的知识储备去理解为什么是这样的实现的。
我们用电路中对逻辑门的符号来表示几个逻辑门,表示形式如下图所示:
通过组合与,与门、与非门、或门实现异或门的配置如下图所示:
对于不同输入下各个参数的情况如下表所示:
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
基于上述配置,我们也能够通过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代码实现了几个感知机得模型,最后还利用已有得感知机模型完成对异或门的实现。至于最后为什么要完成对异或门的实现,事实上和我们后面学习神经网络的理解有很大的帮助,我们知道,神经网络是各个神经元直接的数据输入输出的传递,这和异或门的实现比较类似。那么感知机的叙述就到这里了,有问题的欢迎提问,虽然因为我也在学习阶段,对一些问题的理解还不够通彻,但我们还是可以讨论讨论的。