感知机简介

感知机简介

  • 导语
  • 感知机
    • 简单逻辑电路实现
      • 权重和配置
      • 与/或/与非
        • 与门实现
        • 与非门实现
        • 或门实现
    • 线/非线性
    • 单/多层感知机
      • 异或
  • 总结
  • 参考文献

导语

学习感知机有助于更好的理解深度学习的神经元、权重等概念,感知机的结构和概念很简单,只要学过基本线性代数、数字电路逻辑就能理解,如果直接学习深度学习的神经元等概念,可能会比较难啃,但是在学过感知机之后,再走入深度学习的殿堂就变得简单了。

感知机

感知机的基本功能是允许接收多个输入信号,随后输出一个信号,有点类似程序设计语言中的函数,现实中比较好理解的例子有很多,比如说74ls138芯片,多路选择器这种,简单的原理如下图。

在这里插入图片描述
在这个感知机中, x 1 , x 2 x_1,x_2 x1,x2作为输入信号, y y y为输出信号, w 1 , w 2 w_1,w_2 w1,w2是权重,圆圈为节点,信号输入时会与对应的权重相乘,并将结果累和,当累和值超过阈值 θ \theta θ时, y y y才会有输出1,否则为0。

以图论的角度来理解的话,整个感知机是一个有向无环图, x 1 , x 2 x_1,x_2 x1,x2为点权, w 1 , w 2 w_1,w_2 w1,w2为边权, y y y的点权由点权×边权的累和与阈值判断来决定。

将图以数学式子来表示的话,就是下式。

y = { 0 , i f ( w 1 x 1 + w 2 x 2 ≤ θ ) 1 , i f ( w 1 x 1 + w 2 x 2 > θ ) y= \begin{cases} 0,&if &(w_1x_1+w_2x_2\le\theta)\\ 1,&if &(w_1x_1+w_2x_2\gt\theta) \end{cases} y={0,1,ifif(w1x1+w2x2θ)(w1x1+w2x2>θ)

权重越大,代表对应输入对最后结果的影响越大。

简单逻辑电路实现

从简单的数字电路逻辑实现来入手有助于对感知机进行理解,在此略过与或非等概念的解释,只给出实现

权重和配置

对于上一部分的式子,如果我们将 θ \theta θ移到左边,用一个新的字符 b b b来代替,可以发现得到的式子和深度学习所用到的式子非常类似,如下图。
y = { 0 , i f ( w 1 x 1 + w 2 x 2 + b ≤ 0 ) 1 , i f ( w 1 x 1 + w 2 x 2 + b > 0 ) y= \begin{cases} 0,&if &(w_1x_1+w_2x_2+b\le0)\\ 1,&if &(w_1x_1+w_2x_2+b\gt 0) \end{cases} y={0,1,ifif(w1x1+w2x2+b0)(w1x1+w2x2+b>0)

b b b在这里被视为偏置,用来修正先前部分计算的结果,按照书上的说法是调整神经元被激活的容易程度,按照我的理解, b b b类似于一种敏感度,一个门槛,当先前部分结果越过了这个门槛,其值才有效。

与/或/与非

下面是书上对各门电路的实现代码,按照自己的编程习惯改了点。

与门实现
import numpy as np

def AND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.6,0.6])#w是可变的
    b=-0.8#b也一样
    #w=[0.5,0.5],b=-0.7也可
    y=np.sum(w*x)+b
    if y<=0:
        return 0
    else:
        return 1

print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))

在这里插入图片描述

与非门实现
import numpy as np

def NAND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([-0.6,-0.6])#w是可变的
    b=0.8#b也一样
    y=np.sum(w*x)+b
    if y<=0:
        return 0
    else:
        return 1

print(NAND(0,0))
print(NAND(0,1))
print(NAND(1,0))
print(NAND(1,1))

在这里插入图片描述

或门实现
import numpy as np

def OR(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.6,0.6])#w是可变的
    b=-0.3#b也一样
    y=np.sum(w*x)+b
    if y<=0:
        return 0
    else:
        return 1

print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))

在这里插入图片描述

线/非线性

在实现前面的各种门电路的时候,可以发现能够满足最后输出的权重值和偏置值是有多组的,为了更好的解释这个问题,书上结合了高中数学的线性规划知识点,用了一个非常巧妙的方法来解释这个问题,以或门的输出为例,具体如下图。
在这里插入图片描述
假设以 x 1 x_1 x1为横坐标, x 2 x_2 x2为纵坐标,图中三角形为输出为1的情况,圆形为输出为0的情况,可以清楚的看到,以虚线 l l l为分界线(即 b + w 1 ∗ x 1 + w 2 ∗ x 2 = 0 b+w_1*x1+w_2*x2=0 b+w1x1+w2x2=0)时,虚线正好把所有输出为0和输出为1的情况分开了,也就是说,构成了一个可以由一条直线分割的线性空间,通常情况下,这条直线是不唯一的,这也解释了偏置值和权重值存在多组的原因。

在实现了与门等简单电路后,我们可以探讨如何实现异或门,异或门是否也能像前三个一样实现?以异或门的输出构造的图如下。
在这里插入图片描述
可以发现,无论取怎样的直线,都不可能将1和0的情况完全分割开了,这个时候,直线已经无法分割了,也就是说不存在可用的线性空间了。

在这里插入图片描述

一计不成再生一计,当我们使用曲线时,就会发现,存在一个曲线能够将0和1的情况分割开来,与直线相对应的,即存在一个可用曲线分割的非线性空间

单/多层感知机

到这里,异或和感知机似乎无缘了,但是如果学习过数字电路逻辑就知道,异或是可以通过与门这些门电路进行实现的,在感知机上的具体体现,就是感知机可以通过“叠加层”来实现更复杂的结构。

像上述实现与门、或门这些的感知机,被称为单层感知机,因其输入输出间只有一层而得名,更具体来说,是因为单层感知机只能分割线性空间,而不能分割非线性空间,与单层感知机相对应的是多层感知机,输入输出间存在多层,可以分割非线性空间。

书中提到,理论上2层感知机可以表示任意函数(激活函数使用sigmod的感知机)。

异或

根据数字电路的知识,可以在与、或、与非门的基础上实现异或门,具体如下。

import numpy as np

def OR(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.6,0.6])#w是可变的
    b=-0.3#b也一样
    y=np.sum(w*x)+b
    if y<=0:
        return 0
    else:
        return 1

def NAND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([-0.6,-0.6])#w是可变的
    b=0.8#b也一样
    y=np.sum(w*x)+b
    if y<=0:
        return 0
    else:
        return 1

def AND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.6,0.6])#w是可变的
    b=-0.8#b也一样
    #w=[0.5,0.5],b=-0.7也可
    y=np.sum(w*x)+b
    if y<=0:
        return 0
    else:
        return 1

def XOR(x1,x2):
    return AND(NAND(x1,x2),OR(x1,x2))

print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))

在这里插入图片描述

图示如下,可以看到是一个有向无环图,其中 x 1 , x 2 x_1,x_2 x1,x2 s 1 , s 2 s_1,s_2 s1,s2是全连接,整个图有点像网络流。

在这里插入图片描述

总结

在数字电路和基本的线性规划基础上,理解感知机是不难的,感知机作为深度学习的起点和敲门砖,实在是一个非常巧妙的结构,此书也讲解的非常透彻、便于理解。

参考文献

  1. 《深度学习入门——基于Python的理论与实践》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/608101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web 安全基础理论

Web 安全基础理论 培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;624032112 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 移动应用开发群&#xff1a;548238632 短视频制作群&#xff1a; 744125867极安云…

Star-CCM+通过将所有部件创建一个区域的方式分配至区域后子区域的分离,子区域材料属性的赋值,以及物理连续体的创建方法介绍

前言 上次介绍了将零部件分配至区域的方法与各个方法之间的区别&#xff0c;本文将继续上次的讲解&#xff0c;将其中的“将所有部件分配至一个区域”的应用进行补充。 如下图所示&#xff0c;按照将所有部件创建一个区域的方式分配至区域后&#xff0c;在区域下就会有一个区域…

Marin说PCB之如何快速打印输出整板的丝印位号图?

当小编我辛辛苦苦加班加点的把手上的板子做到投板评审状态的时候&#xff0c;坐在我旁边的日本同事龟田小郎君说让我把板子上的丝印也要调一下&#xff0c;我当时就急了&#xff0c;这么大的板子&#xff0c;将近1W多PIN 了都&#xff0c;光调丝印都要老半天啊&#xff0c;而且…

【ytb数据采集器】按关键词批量爬取视频数据,界面软件更适合文科生!

一、背景介绍 1.1 爬取目标 用Python独立开发的爬虫工具&#xff0c;作用是&#xff1a;通过搜索关键词采集油管的搜索结果&#xff0c;包含14个关键字段&#xff1a;关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评论数…

MATLAB 点云随机赋色 (68)

MATLAB 点云随机赋色 (68) 一、算法介绍二、算法介绍1.代码2.结果三、数据链接一、算法介绍 读取的点云本身带有颜色信息,有时我们需要为每个点随机赋予一种颜色,下面是具体效果和实现代码,以及使用的数据: 二、算法介绍 1.代码 代码如下(示例): % 读取点云文件 f…

linux中进程相关概念(一)

什么是程序&#xff0c;什么是进程&#xff0c;有什么区别&#xff1f; 程序是静态的概念&#xff0c;当我们使用gcc xxx.c -o pro进行编译时&#xff0c;产生的pro文件&#xff0c;就是一个程序。 进程是程序的一次运行活动&#xff0c;通俗点就是说程序跑起来了就是进程。 …

TypeScript学习日志-第二十一天(声明文件d.ts)

声明文件d.ts 在使用 Typescript 并使用第三方库 的时候 我们会发现会有很多的提示或补全&#xff0c;这都是声明文件起的作用&#xff0c;但是有写冷门的第三方库是没有声明文件的&#xff0c;这时候引用就会报错&#xff0c;我们就使用 express 库作为例子来展示一下&#x…

马蹄集oj赛(双周赛第二十六次)

目录 斐波那契数列的组合 三国杀 数列分段 小码哥的跳棋游戏新编 能量供应 小码哥爱数字 最小串 小船过河 摘果子 泼墨淋漓 很重的枪 小码哥的布阵指挥 斐波那契数列的组合 #include<bits/stdc.h> using namespace std;// 斐波那契数列 1 1 2 3 5 8 13 21 34…

pytorch加载模型出现错误

大概的错误长下面这样&#xff1a; 问题出现的原因&#xff1a; ​很明显&#xff0c;我就是犯了第一种错误。 网上的修改方法&#xff1a; 我觉得按道理哈&#xff0c;确实&#xff0c;蓝色部分应该是可以把问题解决了的​。​但是我没有解决&#xff0c;因为我犯了另外一个错…

[Linux]如何在Ubuntu 22.04系統安裝Node-red?

Node-red是一個建立在Node.js上的視覺化程式設計工具&#xff0c;其常見的應用情境為建置或轉換各項硬體之間的通信協定的物聯網或工聯網場域&#xff0c;其可藉由設置來安裝第三方應用模組來建置多樣的通信協定節點&#xff0c;包含modbus in/out, mqtt in/out, websocket in/…

Mac YOLO V9推理测试

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 工程及模型下载&#xff1a;​​​​​​​https://github.com/WongKinYiu/yolov9 git clone https://github.com/WongKinYiu/yolov9.git 克隆后安装相关依赖&#xff08;没啥依赖好装…

全网最详细教学如何部署JVS-无忧企业文档

无忧企业文档项目直达地址 项目的简单介绍 JVS是面向软件开发团队可以快速实现应用的基础开发框架&#xff0c;采用微服务分布式框架&#xff0c;提供丰富的基础功能&#xff0c;集成众多业务引擎&#xff0c;它灵活性强&#xff0c;界面化配置对开发者友好&#xff0c;底层容…

2024年软件测试最全jmeter做接口压力测试_jmeter接口性能测试_jmeter压测接口(3),【大牛疯狂教学

既有适合小白学习的零基础资料&#xff0c;也有适合3年以上经验的小伙伴深入学习提升的进阶课程&#xff0c;涵盖了95%以上软件测试知识点&#xff0c;真正体系化&#xff01; 由于文件比较多&#xff0c;这里只是将部分目录截图出来&#xff0c;全套包含大厂面经、学习笔记、…

日志打印传值 传引用 右值引用性能测试(Linux/QNX)

结论 Linux平台和qnx平台优化后传值性能都是比传引用的差&#xff0c;也比传右值的差&#xff0c;因此传参时有必要传递引用。 测试代码 #include <cstdint> #include <ctime> #include <string>#ifdef __linux__#define ITERATIONS 10000000 #else#defin…

Windows命令行一键安装、配置WSL的方法

本文介绍在Windows电脑中&#xff0c;通过命令行的方式&#xff0c;快速、方便安装适用于Linux的Windows子系统&#xff08;Windows Subsystem for Linux&#xff0c;WSL&#xff09;的方法。 WSL是由微软开发的一项功能&#xff0c;允许在Windows操作系统上运行Linux发行版系统…

expected an expression报错

“expected an expression” 是一种编程错误&#xff0c;通常发生在程序中某个地方需要一个表达式&#xff08;expression&#xff09;的位置&#xff0c;但实际上没有提供一个有效的表达式。 据此&#xff0c;我在main.h—define宏定义中发现了问题&#xff0c;即&#xff1a;…

excel中怎么跳转到指定的单元格?

也许你会有这样的需求&#xff0c;如A1单元格中显示B100这种单元格地址&#xff0c;怎么做以点一下就跳转到B100&#xff1f; 一、设置公式 B1HYPERLINK("#"&MID(CELL("FILENAME",A1),FIND("]",CELL("FILENAME",A1))1,99)&&…

找出100~200的全部素数

解题思路&#xff1a; 判别 m 是否为素数的算法是这样的&#xff1a;让 m 被2~除&#xff0c;如果 m 不能被2~之中任何一个整数整除&#xff0c;就可以确定 m 是素数。为了记录 m 是否为素数&#xff0c;可以用一个布尔变量 prime 来表示。在循环开始时先设 prime 为真…

品鉴中的精神内涵:如何通过红酒品味生活的美好与哲学

红酒不仅仅是一种物质享受&#xff0c;更是一种精神体验。在品鉴云仓酒庄雷盛红酒的过程中&#xff0c;我们能够品味到生活的美好与哲学&#xff0c;感受到红酒所蕴含的精神内涵。 红酒的精神内涵源于其酿造过程中所融入的时间和匠心。一瓶上好的红酒需要经过长时间的陈年&…

重学java 34.API 5.工具类

有失才有悟&#xff0c;崩塌后的重建只会更牢固 —— 24.5.9 一、System类 1.概述: 系统相关类,是一个工具类 2.特点: a.构造私有,不能利用构造方法new对象 b.方法都是静态的 3.使用: 类名直接调用 4.方法 方法 …