1.什么是感知机?
感知机是由美国学者Frank Rosenblatt在1957年提出来的,是作为神经网络(深度学习)的起源的算法。
感知机接收多个输入信号,输出一个信号。这里所说的“信号”类似于电流或河流等具备“流动性”的东西。像电流流过导线,感知机的信号也会形成流,向前方输送信息。但是,感知机的信号只有“流/不流”(1/0)两种取值。
![](https://i-blog.csdnimg.cn/blog_migrate/25118e7acf0e5dbe1a4526577f580d69.png)
图示为接收两个输入信号的感知机。x1,x2为输入信号,y为输出信号,w1,w2是权重,o为“神经元”或“节点”。输入信号被送往神经元时,会被分别乘以固定的权重 (w1x1、w2x2)。神经元会计算传送过来的信号的总和(w1x1+w2x2),只有当这个总和超过 了某个界限值(θ)时,才会输出1。这也称为“神经元被激活”。感知机的激活函数是阶跃函数。
公式表示:
![](https://i-blog.csdnimg.cn/blog_migrate/96560e6b43857518c247ac487319f6ca.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f55380d93155778fcf5ad1e6d30438ca.jpeg)
2.简单逻辑电路实现
(1)与门(AND gate):两个输入都为1时,输出1.真值表:
怎样用感知机来实现与门呢?结合数学公式可以看到 输入信号都为1时,w1、w2之和应该大于θ,输入信号其中一个为1,一个为0时,每一个权重应该小于θ,符合以上条件的参数很多,我们可以任取一个,例(w1,w2,θ)=(0.5,0.5,0.7)。
代码实现:
现在,我们导入权重和偏置,即对上述公式进行修改:
将-θ赋值给b,b称为偏置,w1和w2称为权重。感知机会计算输入 信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。此时:(w1,w2,b)=(0.5,0.5,-0.7)
在Python中,NumPy的数组类 (numpy.array)中为数组和矩阵的计算提供了很多便捷的方法,我们在此处应用到与门的代码中:
(2)与非门(NAND gate):仅当x1和x2同时为1时输出0,其他时候则输出1。真值表:
与非门实现比较简单,只要把与门参数取反即可:(w1,w2,b)=(-0.5,-0.5,0.7)。
代码实现:
(3)或门(OR gate):只要有一个输入信号是1,输 出就为1”的逻辑电路。真值表:
或门的实现:每一个权重应当大于偏置的绝对值,例:(w1,w2,b)=(0.5,0.5,-0.2)代码实现:
3.感知机的局限性
异或门(OR gate)也被称为逻辑异或电路。仅当x1或x2中的一方为 1时,才会输出1。真值表:
由于感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,学习能力非常有限。上述的与、或、与非问题都是线性可分,即存在一个线性超平面能将他们分开(如图所示)。然而异或门是简单的非线性可分问题,因此无法实现。
![](https://i-blog.csdnimg.cn/blog_migrate/879fb017102dd04de1026a01b0ab4f17.jpeg)
但是,可以通过已有门电路组合进行代码实现:
其他门组合成异或门的过程不做解释。