感知机简单逻辑电路实现

1.什么是感知机?

        感知机是由美国学者Frank Rosenblatt在1957年提出来的,是作为神经网络(深度学习)的起源的算法。

        感知机接收多个输入信号,输出一个信号。这里所说的“信号”类似于电流或河流等具备“流动性”的东西。像电流流过导线,感知机的信号也会形成流,向前方输送信息。但是,感知机的信号只有“流/不流”(1/0)两种取值。

感知机简单逻辑电路实现_第1张图片 两个输入神经元的感知机网络结构示意图

        图示为接收两个输入信号的感知机。x1,x2为输入信号,y为输出信号,w1,w2是权重,o为“神经元”或“节点”。输入信号被送往神经元时,会被分别乘以固定的权重 (w1x1、w2x2)。神经元会计算传送过来的信号的总和(w1x1+w2x2),只有当这个总和超过 了某个界限值(θ)时,才会输出1。这也称为“神经元被激活”。感知机的激活函数是阶跃函数。

        公式表示:

感知机简单逻辑电路实现_第2张图片 感知机运行原理数学表示 感知机简单逻辑电路实现_第3张图片 周志华机器学习中典型激活函数图

 2.简单逻辑电路实现

        (1)与门(AND gate):两个输入都为1时,输出1.真值表: 

感知机简单逻辑电路实现_第4张图片

        怎样用感知机来实现与门呢?结合数学公式可以看到 输入信号都为1时,w1、w2之和应该大于θ,输入信号其中一个为1,一个为0时,每一个权重应该小于θ,符合以上条件的参数很多,我们可以任取一个,例(w1,w2,θ)=(0.5,0.5,0.7)。

        代码实现:

感知机简单逻辑电路实现_第5张图片

          现在,我们导入权重和偏置,即对上述公式进行修改:

感知机简单逻辑电路实现_第6张图片

        将-θ赋值给b,b称为偏置,w1和w2称为权重。感知机会计算输入 信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。此时:(w1,w2,b)=(0.5,0.5,0.7)

        在Python中,NumPy的数组类 (numpy.array)中为数组和矩阵的计算提供了很多便捷的方法,我们在此处应用到与门的代码中:

感知机简单逻辑电路实现_第7张图片

       

        (2)与非门(NAND gate):仅当x1和x2同时为1时输出0,其他时候则输出1。真值表:

感知机简单逻辑电路实现_第8张图片

         

        与非门实现比较简单,只要把与门参数取反即可:(w1,w2,b)=(-0.5,-0.5,0.7)。

        代码实现:

感知机简单逻辑电路实现_第9张图片

        (3)或门(OR gate):只要有一个输入信号是1,输 出就为1”的逻辑电路。真值表:

感知机简单逻辑电路实现_第10张图片

         或门的实现:每一个权重应当大于偏置的绝对值,例:(w1,w2,b)=(0.5,0.5,-0.2)代码实现:

感知机简单逻辑电路实现_第11张图片

         3.感知机的局限性

        异或门(OR gate)也被称为逻辑异或电路。仅当x1或x2中的一方为 1时,才会输出1。真值表:

感知机简单逻辑电路实现_第12张图片

         由于感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,学习能力非常有限。上述的与、或、与非问题都是线性可分,即存在一个线性超平面能将他们分开(如图所示)。然而异或门是简单的非线性可分问题,因此无法实现。

感知机简单逻辑电路实现_第13张图片 周志华机器学习线性可分和非线性可分问题

                 但是,可以通过已有门电路组合进行代码实现:

                其他门组合成异或门的过程不做解释。 

你可能感兴趣的:(机器学习,python)