感知机简介

news2024/12/23 14:29:34

感知机简介

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

导语

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

感知机

感知机的基本功能是允许接收多个输入信号,随后输出一个信号,有点类似程序设计语言中的函数,现实中比较好理解的例子有很多,比如说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的理论与实践》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32使用L9110驱动电机自制小风扇

1.1 介绍&#xff1a; 该电机控制模块采用L9110电机控制芯片。该芯片具有两个TTL/CMOS兼容输入端子&#xff0c;并具有抗干扰特性&#xff1a;具有高电流驱动能力&#xff0c;两个输出端子可直接驱动直流电机&#xff0c;每个输出端口可提供750800mA动态电流&#xff0c;其峰值…

云动态摘要 2024-05-08

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]即刻畅享自研SaaS产品 腾讯云 2024-04-25 涵盖办公协同、营销拓客、上云安全保障、数据分析处理等多场景 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

vue3 + ts实现canvas绘制的waterfall

实际运行效果&#xff08;仅包含waterfall图表部分&#xff09; component.vue <template><div ref"heatmap" :style"{ height: props.containerHeight px }" /> </template><script setup> import ColorMap from "color…

Spring Boot 整合 socket 实现简单聊天

来看一下实现的界面效果 pom.xml的maven依赖 <!-- 引入 socket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><!-- 引入 Fastjson &#x…

安卓动态加载view

目录 前言一、addview1.1 addView 的重载方法1.2 在 LinearLayout 中的使用1.2.1 addView(View child)方法的分析&#xff1a;1.2.2 addView(View child, int index)方法的分析&#xff1a;1.2.3 小结 1.3 在 RelativeLayout 中的使用 二、addContentview2.1 测试 12.2 测试 22…

如何用画图处理截图【攻略】

如何用画图处理截图【攻略】 前言版权推荐如何用画图处理截图用画图打开图片简单使用操作&#xff1a;重设图片大小操作&#xff1a;简单覆盖 最后 前言 2024-5-9 22:29:27 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于…

安卓开发--新建工程,新建虚拟手机,按键事件响应

安卓开发--新建工程&#xff0c;新建虚拟手机&#xff0c;按键事件响应 1.前言2.运行一个工程2.1布局一个Button2.2 button一般点击事件2.2 button属性点击事件2.2 button推荐点击事件 本篇博客介绍安卓开发的入门工程&#xff0c;通过使用按钮Buton来了解一个工程的运作机制。…

Java 语法 (杂七杂八的知识)

面向对象三大特性 封装, 多态, 继承 基本数据类型 一字节 (Byte) 占八位 (bit) JDK, JRE, JVM JDK (Java Development Kit) : Java 开发工具包, 包括了 JRE, 编译器 javac, 和调试工具 Jconsole, jstack 等 JRE (Java Runtime Environment) : Java 运行时环境, 包括了 JVM , …

代码随想录第四十三天|最后一块石头的重量 II 、目标和

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 代码如下&#xff1a; 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 代码如下&#xff1a;

实战教程:个性化生鲜超市小程序制作与运营全解析

生鲜电商行业一直以来都备受关注&#xff0c;而如今&#xff0c;小程序商城成为了这个行业的新潮流。乔拓云平台提供了一个便捷的平台&#xff0c;让我们可以轻松地进入商城后台管理页面。 浏览器搜索【乔拓云】并登陆平台后&#xff0c;我们可以点击【小程序商城】模块&#x…

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

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

GDAL:Warning 1: All options related to creation ignored in update mode

01 警告说明 首先贴出相关代码&#xff1a; out_file_name Rs_{:4.0f}{:02.0f}.tiff.format(year, month) out_path os.path.join(out_dir, out_file_name) mem_driver gdal.GetDriverByName(MEM) mem_ds mem_driver.Create(, len(lon), len(lat), 1, gdal.GDT_Float32) …

怎么把多个视频合成一个视频?6个软件教你轻松合成视频

怎么把多个视频合成一个视频&#xff1f;6个软件教你轻松合成视频 合成多个视频成为一个视频可以通过专业的视频编辑软件或在线工具来实现。以下是六个方便使用的软件&#xff0c;它们可以帮助你轻松合成视频&#xff1a; 迅捷视频剪辑软件&#xff1a;这是专业的视频编辑软…

PTP 对时协议 IEEE1588 网络对时 硬件基础

前言 在很多应用场景有精确对时的需求&#xff0c;例如车载网络&#xff0c;音视频流&#xff0c;工业网络。本文档将会阐述对时的硬件需求。 协议 流行的协议为 IEEE1588 标准指定的对时方法&#xff0c;名为 PTP 对时协议。 网卡硬件要求 找到某型网卡的特性描述&#x…

SQL STRING_SPLIT函数,将指定的分隔符将字符串拆分为子字符串行

文章目录 STRING_SPLIT (Transact-SQL)1、语法2、参数3、样例样例1样例2 STRING_SPLIT (Transact-SQL) STRING_SPLIT 是一个表值函数&#xff0c;它根据指定的分隔符将字符串拆分为子字符串行。 1、语法 STRING_SPLIT ( string , separator [ , enable_ordinal ] ) 2、参数…

需求为何如此多

同事的心态炸了 最近各种需求倒排给M同事的心态整炸了&#xff0c;直接撂挑子&#xff0c;从一个TL转为安静的开发人员了。我目睹了整个过程&#xff0c;大抵是理解他的心情的。早年从PMP培训&#xff0c;到哈啰火种计划培训&#xff0c;到后来也带项目&#xff0c;有一些看法…

Powerdesigner导入mysql8之后注释丢失

目录 一、问题描述及解决思路 二、导入的步骤 1.先按正常步骤建立一个物理数据模型 &#xff08;1&#xff09;点击“文件-新建模型” &#xff08;2&#xff09;选择物理模型和数据库 2.从sql文件导入表 &#xff08;1&#xff09;点击“数据库-Update Model from Data…

【ai早报-01 project】

今天和大家分享一款有趣的开源项目 01 Project。 The 01 Project is building an open-source ecosystem for AI devices. 其主旨是基于开源生态&#xff0c;构建以LLM为核心的产品&#xff0c;提供软硬件方案。 市面上类似产品: Rabbit R1, Humane Pin。 如上图所示的这款产…

kafka(七)——消息偏移(消费者)

概念 消费者消费完消息后&#xff0c;向_consumer_offset主题发送消息&#xff0c;用来保存每个分区的偏移量。 流程说明 consumer发送JoinGroup请求&#xff1b;coordinator选出一个consumer作为leader&#xff0c;并将topics发送给leader消费者&#xff1b;leader consumer…

如何使用Transformer-TTS语音合成模型

1、技术原理及架构图 ​ Transformer-TTS主要通过将Transformer模型与Tacotron2系统结合来实现文本到语音的转换。在这种结构中&#xff0c;原始的Transformer模型在输入阶段和输出阶段进行了适当的修改&#xff0c;以更好地处理语音数据。具体来说&#xff0c;Transformer-TT…