感知机perceptron算法是Frank Rosenblatt于1957年提出,它是神经网络和深度学习的起源算法。

感知机接受多个信号,输出一个信号,具体更多原理,请参见这篇博文

本文用python实现三个简单的逻辑电路,实际上这三种逻辑门电路用感知机实现都不是唯一的,都可以有很多种实现方式(区别只是权重和偏置不一样);且三个门电路之间也只是权重偏置不一样,代码实际上是一样的,也就是感知机的结构都一样,如下图:


三种门电路的感知机结构如上图,均为2输入单输出,
(1)y={0,x1w1+x2w2+b≤01,x1w1+x2w2+b>0y=\left\{ \begin{aligned} 0&,&x_1w_1+x_2w_2+b\leq0\\ 1&,&x_1w_1+x_2w_2+b>0\\ \end{aligned} \right.\tag1y={01​,,​x1​w1​+x2​w2​+b≤0x1​w1​+x2​w2​+b>0​(1)

权重w1,w2表示各个输入的重要程度。

偏置b表示神经元激活的难易程度,b越大则越易被激活。

(1)式描述的是一条直线把二维空间线性地分割为两部分。
实际上,如果引入激活函数的概念,则感知机使用的激活函数是阶跃函数:
h(x)={0,x≤01,x>0h(x)=\left\{ \begin{aligned} 0,x\leq0\\ 1,x>0\\ \end{aligned} \right.h(x)={0,x≤01,x>0​

激活函数就是连接NN和感知机的桥梁。

感知机使用阶跃函数作激活函数,而只要把激活函数换成其他函数(sigmoid或Relu),就得到了NN.


一、与门(AND gate)

真值表

x1x_1x1​ x2x_2x2​ y
0 0 0
0 1 0
1 0 0
1 1 1

代入(1)则有:
{b≤0w2+b≤0w1+b≤0w1+w2+b>0\left\{ \begin{aligned} b\leq0\\ w_2+b\leq0\\ w_1+b\leq0\\ w_1+w_2+b>0 \end{aligned} \right.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​b≤0w2​+b≤0w1​+b≤0w1​+w2​+b>0​
满足这组关系的w1,w2,b{w_1,w_2,b}w1​,w2​,b很多,我们取0.5,0.5,-0.7

import numpy as np
def AND(x1,x2):x = np.array([x1,x2])w = np.array([0.5,0.5])b=  -0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))

pycharm脚本运行后输出结果:


二、或门(OR gate)

真值表

x1x_1x1​ x2x_2x2​ y
0 0 0
0 1 1
1 0 1
1 1 1

代入(1)则有:
{b≤0w2+b&gt;0w1+b&gt;0w1+w2+b&gt;0\left\{ \begin{aligned} b\leq0\\ w_2+b&gt;0\\ w_1+b&gt;0\\ w_1+w_2+b&gt;0 \end{aligned} \right.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​b≤0w2​+b>0w1​+b>0w1​+w2​+b>0​
满足这组关系的w1,w2,b{w_1,w_2,b}w1​,w2​,b很多,我们取0.5,0.5,-0.2

import numpy as np
def OR(x1,x2):x = np.array([x1,x2])w = np.array([0.5,0.5])b = -0.2tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))

pycharm脚本运行后输出结果:


三、与非门(NAND gate)

真值表

x1x_1x1​ x2x_2x2​ y
0 0 1
0 1 1
1 0 1
1 1 0

代入(1)则有:
{b&gt;0w2+b&gt;0w1+b&gt;0w1+w2+b≤0\left\{ \begin{aligned} b&gt;0\\ w_2+b&gt;0\\ w_1+b&gt;0\\ w_1+w_2+b\leq0 \end{aligned} \right.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​b>0w2​+b>0w1​+b>0w1​+w2​+b≤0​
满足这组关系的w1,w2,b{w_1,w_2,b}w1​,w2​,b很多,我们取-0.5,-0.5,0.7

import numpy as np
def NAND(x1,x2):x = np.array([x1,x2])w = np.array([-0.5,-0.5])b = 0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1print(NAND(0,0))
print(NAND(0,1))
print(NAND(1,0))
print(NAND(1,1))

pycharm脚本运行后输出结果:

如上,单层感知机只能表示线性的空间划分,对于异或门,单层感知机则无法通过简单的一条直线划分开。这就是单层感知机的局限性。


四、异或门

真值表

x1x_1x1​ x2x_2x2​ y
0 0 0
0 1 1
1 0 1
1 1 0

学习数电时我们知道,简单门电路的组合可以实现复杂的门电路。所以:

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

pycharm脚本运行后输出结果:

异或门是一个两层的感知机:


总结:

  1. 可以看出,单层感知机无法表示的东西,加一层就解决了,所以加深层可以进行更复杂更灵活的表示,这就是深度神经网络可以学到复杂表示的理论源头。
  2. 本文实现的感知机的权重都是人工设置的,如果用感知机实现复杂的函数,权重的人工确定十分困难。而这个问题的解决就引入了神经网络,或者说神经网络解决了这个问题。因为NN的重要性质是他可以自动从数据中学得合适的参数(权重,偏置)。

单层感知机实现与门,或门,与非门双层感知机实现异或门(python)相关推荐

  1. 感知机实现与门,与非门,或门,异或门

    感知机: 感知机接收多个输入信号,输出一个信号.这里所说的"信号"可以想象成电流或河流那样具备"流动性"的东西.像电流流过导线,向前方输送电子一样,感知机的信号 ...

  2. MUX实现逻辑功能(反相器/与门/或门/与非门/或非门/异或门/同或门)

  3. Python实现感知器的逻辑电路(与门、与非门、或门、异或门)

    在神经网络入门回顾(感知器.多层感知器)中整理了关于感知器和多层感知器的理论,这里实现关于与门.与非门.或门.异或门的代码,以便对感知器有更好的感觉. 此外,我们使用 pytest 框架进行测试. p ...

  4. 双层感知机解决异或问题

    双层感知机解决异或问题 参考文章: (1)双层感知机解决异或问题 (2)https://www.cnblogs.com/china520/p/10591652.html 备忘一下.

  5. FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)

    目录 一.验证与门 二.验证与非门 三.验证二选一数据选择器 四.验证2-4译码器 五.验证半加器 六.验证全加器 0.初始化定义 1.第一个半加器 2.第二个半加器 3.得到最终进位Co 代码 0决 ...

  6. 【深度学习】(一)感知机:与门、与或门、或门、异或门

    感知机(perceptron)是具有输入和输出的算法.给定一个输入以后,将输出一个既定的值. 类似于用编程实现数字逻辑中的电路. 感知机将权重和偏置设定为参数.感知机会计算输入信号和权重的乘积,然后加 ...

  7. 使用python来实现逻辑电路(与门、与非门、或门)

    使用python来实现逻辑电路 与门 与非门 或门 与门 感知机: 感知机就是接受多个信号,然后输出一个信号,而且信号只有"流/不流"(1/0)两种情况,其中的1也就是传递信号,0 ...

  8. 【Verilog基础】CMOS逻辑门实现基础功能(反相器/与非门/或非门/与门/或门)

    文章目录 CMOS 反相器 CMOS 与非门 CMOS 或非门 CMOS 与门 CMOS 或门 参考 CMOS 反相器 CMOS 与非门 CMOS 或非门

  9. 逻辑门图解—与门、或门、非门、与非门、或非门、异或门、同或门

    逻辑门图解 一:与门--(且 A&&B) 二:或门--(或 A || B) 三:非门--(非 !A) 四:与非门 --!(A&&B) 五:或非门--!(A||B) 六: ...

最新文章

  1. 中科院院士指出“万物互联”只是开始,“万物控制”是物联网下一个挑战
  2. 天天象棋 残局闯关 第17关
  3. shell编程系列23--shell操作数据库实战之mysql命令参数详解
  4. Approximation and fitting、Statistical estimation
  5. vc 通过句柄修改窗口大小_VC应用(1)通过VC修改销售订单行项目的字段
  6. java 定义和导入包
  7. mongodb----副本集搭建及故障自动切换
  8. 【docker】docker持续集成CI/持续部署CD
  9. 网络安全与黑客工具TOP100
  10. 合成孔径 saft matlab,合成孔径聚焦超声成像系统的计算机仿真
  11. java 文字串叠字检查_Java 正则表达式详细实例解析
  12. Markdown文件的标题分级自动编号——Typora
  13. windows10家庭中文版设置共享文件密码访问
  14. Fastdfs预留空间问题排查分析
  15. Arcgis for Android加载tpk文件遇到的错误,求大神指导下。
  16. 【毕业设计】深度学习图像风格迁移算法研究与实现 - python 卷积神经网络
  17. 国内自动化、计算机部分期刊排名
  18. 计算机与科技课题题目,新颖的计算机科学技术专业论文选题 计算机科学技术专业论文题目选什么比较好...
  19. 以太坊智能合约开发2-Solidity语法学习
  20. Zigbee协调器主动使终端节点退网

热门文章

  1. 任何计算机病毒一定会有清楚的办法,计算机病毒及其防治等级考试练习题
  2. java 店铺装修_基于jsp的网店装修-JavaEE实现网店装修 - java项目源码
  3. 深度无盘服务器网卡,无盘网吧网卡参数设置建议
  4. QML Drawer使用
  5. Java微信支付servlet实现
  6. 电动车爆炸事故频发!如何基于EasyGBS技术实现电动车禁入电梯的智能化防控?
  7. 一款轻便易用的物联网组态软件
  8. 小米4联通4G_2014719_官方线刷包_救砖包_解账户锁
  9. 现代车型表示说明(SUV,CRV,SRV,RAV,HRV,MPV,CUV,NCV,RV)
  10. 分解人力资源管理的范围