[笔记]深度学习入门 基于Python的理论与实现(二)

2. 感知机

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

  • 严格地说,本章所说的感知机应该称为‘人工神经元’或‘朴素感知机’,但是因为很多基本原理是共通的,所以这里简单称为‘感知机’

2.1 感知机是什么

感知机接收多个输入信号,输出一个信号。感知机的信号会形成流,向前方传递信息。感知机的信号只有‘流’/‘不流’(1/0)两种取值。本书中,0
表示‘不传递信号’,1 表示‘传递信号’

下图是一个接收两个输入信号的感知机的例子。x1、x2 是输入信号,y 是输出信号,w1、w2
是权重。圆形是‘神经元’或‘节点’。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1,w2x2)
。神经元会计算传送过来的信号的总和,只有这个总和超过了某个界限值时,才会输出 1。这也称为‘神经元被激活’。这个界限值称为阈值,用符号
θ 表示

在这里插入图片描述

在这里插入图片描述

感知机的多个输入信号都有各自固有的权重,发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高

  • 权重相当于电流里所说的电阻。电阻是决定电流流动难度的参数,电阻越低,通过的电流就越大。而感知机的权重则是值越大,通过的信号就越大。在控制信号流动难度(或者流动容易度)这一点上的作用是一样的。

2.2 简单逻辑电路

2.2.1 与门(AND gate)

与门是有两个输入和一个输出的门电路。与门仅在两个输入均为 1 时输出 1,其他时候输出 0

在这里插入图片描述

如果用感知机来表示,怎么确定 w1、w2、θ 的值才能满足该真值表?

实际上,满足该条件的参数的选择方法有无数个。比如(w1,w2,θ)=(0.5,0.5,0.7) or (w1,w2,θ)=(0.5,0.5,0.8) or (w1,w2,θ)=(
1.0,1.0,1.0)时。设定这样的参数后,仅当 x1 和 x2 同时为 1 时,信号的加权总和才会超过给定的阈值 θ。

2.2.2 与非门(NAND gate)和或门

与非门就是颠倒了与门的输出。仅当 x1 和 x2 同时为 1 时输出 0,其他时候则输出 1

在这里插入图片描述

感知机表示与非门,只需要将实现与门的参数值的符号取反就可以实现

与门是‘只要有一个输入信号是 1,输出就为 1’的逻辑电路

在这里插入图片描述

与门、与非门、或门的感知机构造是一样的。它们只有参数的值(权重和阈值)不同。也就是说,相同构造的感知机只要调整参数的值,就可以变成不同的逻辑电路

  • 这里我们人为决定感知机参数,看着真值表这种‘训练数据’,人工考虑了参数的值。而机器学习的课题就是将这个决定参数值的工作交给计算机自动进行。‘学习’是确定合适参数的过程,人要做的就是思考感知机的构造(模型),并将训练数据交给计算机。

2.3 感知机的实现

2.3.1 简单的实现

先定义一个接收参数 x1 和 x2 的 AND 函数

def AND(x1, x2):w1, w2, theta = 0.5, 0.5, 0.7tmp = x1 * w1 + x2 * w2if tmp <= theta:return 0elif tmp > theta:return 1

在函数内初始化参数 w1、w2、theta,但输入的加权总和超过阈值时返回 1,否则返回 0

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

2.3.2 导入权重和偏置

将之前的式子的阈值换成偏置,即 θ 换成-b

在这里插入图片描述

改变后,表达的内容依然完全相同。b 称为偏置,w 称为权重,感知机计算输入信号和权重的乘积,然后加上偏置,如果这个值大于 0 则输出
1,否则输出 0。

import numpy as npx = np.array([0, 1])  # 输入
w = np.array([0.5, 0.5])  # 权重
b = -0.7  # 偏置
print(w * x)np.sum(w * x)
print(np.sum(w * x) + b)
# -0.19999999999999996 大约为-0.2(由浮点小数造成的运算误差)

这里 numpy 数组乘法运算,当两个数组的元素个数相同时,各个元素分别相乘,之后 sum(w*x)计算相乘后的各个元素的总和。最后加上偏置,完成计算

2.3.3 使用权重和偏置的实现

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 1

权重 w1、w2 是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为 1 的程度)的参数。

  • 偏置这个术语,有‘穿木屐’的效果,即在没有任何输入时(输入为 0 时),给输出穿上多高的木屐(加上多大的值)的意思。

继续实现与非门和或门

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 1def 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 1

2.4 感知机的局限性

2.4.1 异或门

异或门也称为逻辑异或电路。仅当 x1 或 x2 中的一方为 1 时,才会输出 1(‘异或’是拒绝其他的意思)。

在这里插入图片描述

前面介绍的感知机无法实现这个异或门。

我们将或门的动作形象化。或门的情况下,当权重参数(b,w1,w2)=(-0.5,1.0,1.0)时,可以用下面的式子表示

在这里插入图片描述

该式表示感知机会生成由直线-0.5 + x1 + x2 = 0 分割开的两个空间。其中一个空间输出 1,另一个空间输出 0

但是如何用一条直线分割出异或的 0、1 输出空间?事实上,用一条直线无法将 0、1 分开

在这里插入图片描述

2.4.2 线性和非线性

感知机的局限性就在于它只能表示由一条直线分割的空间。如果用曲线分割,就可以实现。由曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。线性和非线性这两个术语在机器学习领域很常见。

在这里插入图片描述

2.5 多层感知机

感知机的绝妙之处在于它可以‘叠加层’(通过叠加层来表示异或门或门是本节的要点)。我们暂不考虑叠加层具体是指什么,先从其他视角来思考一下异或门的问题。

2.5.1 已有门电路的组合

异或门制作方法有很多,其中之一就是与门、或门、与非门的组合。这几个门我们用下面的符号表示,图 2-9 中与非门前端的〇表示反转输出的意思

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.5.2 异或门的实现

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

异或门是一种多层结构的神经网络。这里,将最左边的一列称为第 0 层,中间的一列称为第一层,最右边的一列称为第 2 层。

实际上,与门、或门是单层感知机,而异或门是 2 层感知机。叠加了多层的感知机也称为多层感知机(multi-layered perceptron)

在这里插入图片描述

  • 上图由 3 层构成,但是因为拥有权重的实际上只有两层(第 0 层到第 1 层,第 1 层和第 2 层之间),所以称为‘2 层感知机’,也有的文献认为这是由
    3 层构成,所以称为‘3 层感知机’

在这种多层感知机中,第一层输出变为第二层输入,数据在之间不断传送。通过叠加层,感知机能进行更加灵活的表示。

2.6 从与非门到计算机

多层感知机可以实现比之前见到的电路更复杂的电路。比如加法运算的加法器、二进制转十进制的编码器、满足某些条件就输出 1
的电路(用于等价检验的电路)……甚至可以表示计算机

计算机是处理信息的机器。输入信息,会按照某个既定规则进行计算,然后输出,这和感知机是一样的

只需要通过与非门的组合,就能再现计算机

  • 拓展阅读:《计算机系统要素:从零开始构建现代计算机》

多少层(层级多深)的感知机可以表示计算机?理论上可以说 2 层感知机就可以构建计算机。有研究证明,2 层感知机(严格地说是激活函数使用了非线性的
sigmoid 函数的感知机)可以表示任意函数。但是使用 2 层感知机的构造,通过设定合适的权重来构建计算机是非常累人的事。

实际上,用与非门等低层元件构建计算机的情况下,分阶段地制作所需的零件(模块)会比较自然,即先实现与门和或门,然后实现半加器和全加器,接着实现算数逻辑单元(ALU),然后实现
CPU。使用这种叠加了多层的构造来实现是比较自然的流程。

2.7 小结

  • 感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值
  • 感知机将权重和偏置设定为参数。
  • 使用感知机可以表示与门和或门等逻辑电路
  • 异或门无法通过单层感知机来表示。
  • 使用 2 层感知机可以表示异或门
  • 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
  • 多层感知机(在理论上)可以表示计算机。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt6入门教程 6:Qt元对象系统

目录 一.什么是Qt元对象系统&#xff1f; 二.编译时Qt Creator偷摸做了哪些事情&#xff1f; 1.uic 2.rcc 3.moc 一.什么是Qt元对象系统&#xff1f; Qt中的元对象系统&#xff08;Meta-Object System&#xff09;提供了对象间通信的信号和槽机制、运行时类型信息和动态属…

ArcGIS Pro 拓扑编辑和常见一些拓扑错误处理

7.4 拓扑编辑 拓扑编辑也叫共享编辑&#xff0c;多个数据修改时&#xff0c;一块修改&#xff0c;如使用数据&#xff1a;chp7\拓扑检查.gdb,数据集DS下JZX、JZD和DK&#xff0c;加载地图框中&#xff0c;在“地图”选项卡下选择“地图拓扑”或“ds_Topology(地理数据库)”&…

基于Redis+Lua的分布式限流

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 前面我们了解了如何利用Nginx做网关层限流&#xf…

SpringAMQP的使用

1. 简介&#xff1a; SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声…

【C语言】指针知识点笔记(2)

目录 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组

Java中的异常处理

目录 前言&#xff1a; 异常简介&#xff1a; Error类&#xff1a; Exception类&#xff1a; Exception异常&#xff1a; 运行异常&#xff1a; 编译异常&#xff1a; throw和throws关键字&#xff1a; throw: throws: try-catch关键字&#xff1a; finally: 为…

编译 FastDFS 时报错 fatal error: sf/sf_global.h: No such file or directory 解决办法

编译 FastDFS 时&#xff0c;报错如下 gcc -Wall -D_FILE_OFFSET_BITS64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/local/include In file included from ../common/fdfs_global.c:21:0: ../common/fdf…

教你用五步让千年的兵马俑跳上现代的科目三?

以下是一张我上月去西安拍的兵马俑照片&#xff1a; 使用通义千问&#xff0c;5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 千年兵马俑跳上科目三 全民舞王 第1步 打开通义千问App&#xff0c;我使用的是华为手机&#xff0c;苹果版的没试&#xff1b; 在…

OpenCV-22高斯滤波

一、高斯函数的基础 要理解高斯滤波首先要直到什么是高斯函数&#xff0c;高斯函数是符合高斯分布的&#xff08;也叫正态分布&#xff09;的数据的概率密度函数。 高斯函数的特点是以x轴某一点&#xff08;这一点称为均值&#xff09;为对称轴&#xff0c;越靠近中心数据发生…

单例模式实现最好的方式即枚举实现

单例类作为23种设计模式当中最常用的设计模式&#xff0c;实现方式有很多种&#xff0c;比较流行的是DCL(DoubleCheckLock)双重检查的实现&#xff0c;线程安全&#xff0c;又比较好&#xff0c;除了存在序列化的问题之外&#xff0c;还算不错&#xff0c;如果对DCL模式还不熟悉…

U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig

在上一节中&#xff0c;我们介绍了U-Boot编译和.config配置文件生成分析&#xff0c;我们可以通过make xxx__defconfig来进行一些配置&#xff0c;其中xxx__defconfig对应config目录下的基于不同开发板的一些配置&#xff0c;指令执行完后会根据对应的配置在根目录下生成一个.c…

排序算法6---快速排序(非递归)(C)

回顾递归的快速排序&#xff0c;都是先找到key中间值&#xff0c;然后递归左区间&#xff0c;右区间。 那么是否可以实现非递归的快排呢&#xff1f;答案是对的&#xff0c;这里需要借助数据结构的栈。将右区间左区间压栈&#xff08;后进先出&#xff09;&#xff0c;然后取出…

详细讲解Python连接Mysql的基本操作

目录 前言1. mysql.connector2. pymysql 前言 连接Mysql一般有几种方法&#xff0c;主要讲解mysql.connector以及pymysql的连接 后续如果用到其他库还会持续总结&#xff01; 对于数据库中的表格,本人设计如下:(为了配合下面的操作) 1. mysql.connector mysql.connector 是一…

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(18)——分支语句&#xff08;switch-case&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124039953 一、for循环 当老师进入教室&#xff0c;从门口开始分别按行、列点名&#xff0c;看看哪位翘课&…

Xcode15 升级问题记录

这里写自定义目录标题 新版本Xcode15升级问题1&#xff1a;rsync error: some files could not be transferred (code 23) at ...参考 新版本Xcode15升级 下载地址&#xff1a;https://developer.apple.com/download/all/ 我目前使用的版本是Xcode15.2 我新创建了一个项目&…

transfomer中Decoder和Encoder的base_layer的源码实现

简介 Encoder和Decoder共同组成transfomer,分别对应图中左右浅绿色框内的部分. Encoder&#xff1a; 目的&#xff1a;将输入的特征图转换为一系列自注意力的输出。 工作原理&#xff1a;首先&#xff0c;通过卷积神经网络&#xff08;CNN&#xff09;提取输入图像的特征。然…

开发需求总结9-el-tree获取选中节点,节点全选时返回被全选子级的父节点,未全选则返回被选中的节点

目录 需求描述 代码实现&#xff1a; 需求描述 需要获取树组件选中的节点&#xff0c;假如父节点被选中&#xff08;该节点全选&#xff09;&#xff0c;即只返回父节点的数据&#xff0c;如父节点未被全选&#xff0c;则正常返回被选中节点的数据。 示例一&#xff1a; 如上图…

Python展示 RGB立方体的二维切面视图

代码实现 import numpy as np import matplotlib.pyplot as plt# 生成 24-bit 全彩 RGB 立方体 def generate_rgb_cube():# 初始化一个 256x256x256 的三维数组rgb_cube np.zeros((256, 256, 256, 3), dtypenp.uint8)# 填充立方体for r in range(256):for g in range(256):fo…

编曲混音FL Studio21.2对电脑有什么配置要求

FL Studio 21是一款非常流行的音乐制作软件&#xff0c;它可以帮助音乐人和制作人创作出高质量的音乐作品。然而&#xff0c;为了保证软件的稳定性和流畅性&#xff0c;用户需要知道FL Studio 21对电脑的配置要求。本文将介绍FL Studio 21的配置要求&#xff0c;以帮助用户选择…

32 二叉树的定义

之前的通用树结构 采用双亲孩子表示法模型 孩子兄弟表示法模型 引出二叉树 二叉树的定义&#xff1a; 满二叉树和完全二叉树 对此图要有印象 满二叉树一定是完全二叉树&#xff0c;但是完全二叉树不一定是满二叉树 小结