《深度学习入门基于python的理论与实现》chap2感知机 笔记

news2024/12/26 0:51:16

《深度学习入门:基于python的理论与实现》chap2 感知机 笔记

3个月前正式开始入坑AI的时候就是看的这本书,当时比较粗略地看到了第六章,没有记笔记,现在来重温一下

文章目录

  • 《深度学习入门:基于python的理论与实现》chap2 感知机 笔记
  • 2.1 什么是感知机
  • 2.2 简单逻辑电路 &2.3 感知机的实现
    • 引入偏置
    • 与门 And gate
    • 与非门(NAND gate)
    • 或门 OR gate
  • 2.4 感知机的局限性(单层感知机无法分离非线性空间)
    • 2.4.1 异或门
    • 2.4.2 线性和非线性
  • 2.5 多层感知机(multi-layered perception)
    • 2.5.1 已有门电路的组合
    • 2.5.2 异或门的实现
  • 2.6 从与非门到计算机
  • 2.7 小结

本chap学习感知机(perceptron)这一算法并利用感知机解决一些简单的问题。感知机是由美国学者Frank Rosenblatt在1957年提出来的。

严格地讲,本章中所说的感知机应该称为“人工神经元”或“朴素感知机”,但是因为很多基本的处 理都是共通的,所以这里就简单地称为“感知机”。

Frank Rosenblatt is known for his work in the field of artificial intelligence and is credited with creating one of the first artificial neural networks, called the perceptron. The perceptron was a simple algorithm designed to simulate the process of human perception and was presented in 1957 by Frank Rosenblatt at Cornell Aeronautical Laboratory in a paper called “The Perceptron: A Probabilistic Model for Information Storage and Organization in The Brain”

The perceptron was able to classify linearly separable patterns, which means it could learn to separate two classes of data with a straight line. Later research showed that the perceptron algorithm could not solve certain types of problems, such as the XOR problem, and that more complex neural networks were needed to solve these problems. However, this work of Rosenblatt inspired many other researchers to continue exploring the potential of neural networks and machine learning.

2.1 什么是感知机

既然是再次看这本书,就尝试自己总结和概况

  • 我觉得学习计算机要实时秉持输入经过某个function得到输出的观念,感知机,从字面上看,感知一些东西,经过某个function,做出反应,那么感知的东西就是输入,作出的反应就是输出

  • 那么输入是什么呢?

    • 感知机会接收信号,这里的信号取值是0或1
      • 0对应不传递信号
      • 1对应传递信号
  • function是什么?

    • 使得每个输入信号乘以其固定的权重(weight)再相加
  • 输出是什么?

    • 这些信号分别与他们的权重相乘之后再相加的结果,也作为一个信号输出,也是0或1
    • 那么什么情况会输出1(称为"神经元被激活"),什么时候输出0呢
      • 前面说的相加的结果,也就是信号的总和,会和一个界限值进行比较,这个界限值称为阈值(threshold)

  • 图示和数学表达式

    • 图示

      image-20230111193553960

    • 数学表达式

      image-20230111193629912


2.2 简单逻辑电路 &2.3 感知机的实现

引入偏置

把前面的式子变一变,这里把−θ命名为偏置b,偏置的值决定了神经元被激活的容易程度。

image-20230111201548071

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

比如,若b为 −0.1,则只要输入信号的加权总和超过0.1,神经元就会被激活。但是如果b 为−20.0,则输入信号的加权总和必须超过20.0,神经元才会被激活。

哈哈 在数电里面学过了这些gates,那这里就记录一些英文表达

与门 And gate

  • 我们尝试找一个能实现与门功能的感知机,与门的输入输出我们知道了,那就是要找剩下的几个参数,两个权重和一个阈值

  • 书上给的这个例子 0.5,0.5,0.7

    tmp那里是把前面的数学公式右边减到左边来了,当且仅当x1=1,x2=1时,0.5x1+0.5x2>0.7

    # coding: utf-8
    import numpy as np
    
    
    def AND(x1, x2):
        x = np.array([x1, x2])
        w = np.array([0.5, 0.5])
        b = -0.7
        tmp = np.sum(w*x) + b
        if tmp <= 0:
            return 0
        else:
            return 1
    
    if __name__ == '__main__':
        for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
            y = AND(xs[0], xs[1])
            print(str(xs) + " -> " + str(y))
    
    
    (0, 0)->0
    (1, 0)->0
    (0, 1)->0
    (1, 1)->1
    

    有无数组参数都可以做到,比如

        w = np.array([0.6, 0.5])
        b = -0.95
    
  • 回忆一下数电,输入的0表示低电平,1表示高电平,输出也是两种情况,低电平or高电平

    • 中间也是经历了一些计算,不过那个涉及模电了,不是这种简单的感知机

与非门(NAND gate)

NAND ,即Not AND

  • 与非门就是颠倒了与门的输出

  • 要表示与非门,可以用(w1, w2, θ) = (−0.5, −0.5, −0.7) 这样的组合(其 他的组合也是无限存在的)。实际上,只要把实现与门的参数值的符号取反, 就可以实现与非门

  • 代码实现

    # coding: utf-8
    import numpy as np
    
    
    def NAND(x1, x2):
        x = np.array([x1, x2])
        w = np.array([-0.5, -0.5])
        b = 0.7
        tmp = np.sum(w*x) + b
        if tmp <= 0:
            return 0
        else:
            return 1
    
    
    if __name__ == '__main__':
        for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
            y = NAND(xs[0], xs[1])
            print(str(xs) + " -> " + str(y))
    
    

或门 OR gate

  • 我们来思考一下参数, 根据或或门的特点,w1和w2都要比θ大,然后θ>=0即可

    也就是 0<=θ< min[w1,w2]

    θ=-b(代码里面)

  • code

    # coding: utf-8
    import numpy as np
    
    
    def OR(x1, x2):
        x = np.array([x1, x2])
        w = np.array([0.5, 0.5])
        b = -0.2
        tmp = np.sum(w*x) + b
        if tmp <= 0:
            return 0
        else:
            return 1
    
    
    if __name__ == '__main__':
        for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
            y = OR(xs[0], xs[1])
            print(str(xs) + " -> " + str(y))
    
    

2.4 感知机的局限性(单层感知机无法分离非线性空间)

2.4.1 异或门

  • 异或门也被称为逻辑异或电路,x1和x2相同时,输出0,不同时输出1

哈哈哈我记得大一学C语言的时候,异或和同或总是傻傻分不清🤣😓😓😓

  • 前面的感知机能否实现这个异或门呢

  • 之前在凑前几个参数的具体值的时候,我是将00,y ;01,y;10,y;11,y四种情况代入进去分析的

    • 那么这里我也尝试代入进去分析(字丑见谅🤐🤐🤐)

      image-20230111203221428
  • 再来看看书上是如何分析的

    • 将或门的动作形象化。或门的情况下,当权重参数 (b, w1, w2) = (−0.5, 1.0, 1.0)时可满足真值表

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

        image-20230111203543007

        • 或门在(x1, x2) = (0, 0)时输出0,在(x1, x2)为(0, 1)、(1, 0)、(1, 1)时输 出1。图2-6中,○表示0,△表示1

        • 如果想制作或门,需要用直线将图2-6中的○和△分开。实际上,刚才的那条直线就将这4个点正确地分开了

    • 换成异或门还能找条直线来分开吗?

      image-20230111203655539

      其实和我前面推导的式子来理解也一样,直线的斜率一会儿大于0,一会儿小于0,分不开的

2.4.2 线性和非线性

  • 图2-7中的○和△无法用一条直线分开,但是如果将“直线”这个限制条件去掉,就可以实现了。比如,我们可以像图2-8那样,作出分开○和△的空间。

  • 感知机的局限性就在于它只能表示由一条直线分割的空间。图2-8这样弯曲的曲线无法用感知机表示。另外,由图2-8这样的曲线分割而成的空间称为 非线性空间,由直线分割而成的空间称为线性空间线性、非线性这两个术语在机器学习领域很常见,可以将其想象成图2-6和图2-8所示的直线和曲线。

    image-20230111203916443

2.5 多层感知机(multi-layered perception)

  • 虽然无法利用一个感知机直接实现异或门,但是我们能不能叠加多层来实现呢?Yes
    • 异或门的制作方法有很多,其中之一就是组合我们前面做好的与门、与 非门、或门进行配置
  • 实际上,与门、或门是单层感知机,而异或门是2层感知机。叠加了多 层的感知机也称为多层感知机(multi-layered perceptron)

2.5.1 已有门电路的组合

image-20230111204634042
  • 书上给了这种做法

    image-20230111204832237

    (与非)和(或)再与

2.5.2 异或门的实现

  • code

    # coding: utf-8
    from and_gate import AND
    from or_gate import OR
    from nand_gate import NAND
    
    
    def XOR(x1, x2):
        s1 = NAND(x1, x2)
        s2 = OR(x1, x2)
        y = AND(s1, s2)
        return y
    
    if __name__ == '__main__':
        for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
            y = XOR(xs[0], xs[1])
            print(str(xs) + " -> " + str(y))
    

2.6 从与非门到计算机

  • 与非门可以使用感知机实现。也就是说,如果通过组合与非门可以实现计算机的话,那么通过组合感知机也可以表示计算机(感知机的组合可以通过叠加了多层的单层感知机来表示)。

  • 哈哈哈这本书也太棒了,这里提到的这本书也是我正准备看的~

    image-20230111204018234

  • 感知机通过叠 加层能够进行非线性的表示,理论上还可以表示计算机进行的处理

2.7 小结

感知机是神经网路的基础

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

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

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

相关文章

【阶段四】Python深度学习05篇:深度学习项目实战:卷积神经网络的定义、卷积网络的结构与卷积层的原理

本篇的思维导图: 卷积神经网络的定义 卷积神经网络,简称为卷积网络,与普通神经网络的区别是它的卷积层内的神经元只覆盖输入特征局部范围的单元,具有稀疏连接(sparse connectivity)和权重共享(weight shared)的特点,而且其中的过滤器可以做到对图像关键特征的…

基于Power BI的品牌销售金额帕累托分析

一、原理 帕累托于1906年提出了著名的关于意大利社会财富分配的研究结论&#xff1a;20&#xff05;的人口掌握了80&#xff05;的社会财富。这个结论对大多数国家的社会财富分配情况都成立。因此&#xff0c;该法则又被称为80/20法则。 二、数据源 已知某终端表1《商品信息》…

GO 语言 Web 开发实战一

xdm&#xff0c;咱今天分享一个 golang web 实战的 demo go 的 http 包&#xff0c;以前都有或多或多的提到一些&#xff0c;也有一些笔记在我们的历史文章中&#xff0c;今天来一个简单的实战 HTTP 编程 Get 先来一个 小例子&#xff0c;简单的写一个 Get 请求 拿句柄 设置…

VMware Workstation 17 Pro的下载和安装

目录 一、下载 二、安装 三、检查网络连接 方式一&#xff08;简便版&#xff09; 方式二&#xff08;麻烦版&#xff09; 一、下载 下载地址&#xff1a; Windows 虚拟机 | Workstation Pro | VMware | CN 1、进入该网址后&#xff0c;往下翻&#xff0c;有两个选项&…

并查集是什么?怎么模拟实现?如何应用?

目录 一、什么是并查集&#xff1f; 二、并查集可以解决哪些问题&#xff1f; 三、并查集的模拟实现 3.1、并查集的定义 3.2、查询两个元素是否是同一个集合 3.3、合并两个集合 3.4、求集合个数 3.5、并查集完整代码 小结 一、什么是并查集&#xff1f; 我们可以想象这…

九、MySQL 常用函数汇总(2)

文章目录一、条件判断函数1.1 IF(expr,v1,v2)函数1.2 IFNULL(v1,v2)函数1.3 CASE函数二、系统信息函数2.1 获取MySQL版本号、连接数和数据库名的函数2.2 获取用户名的函数2.3 获取字符串的字符集和排序方式的函数2.4 获取最后一个自动生成的ID值的函数三、加密函数3.1 加密函数…

东宝商城项目(三)——用户注册功能的实现(后端)

本文是我做项目过程中记录的学习笔记&#xff0c;用于记录项目开发流程&#xff0c;第一次做项目有很多不懂的地方&#xff0c;本文可读性暂时很差。 我目前的学习目标是走完项目开发流程&#xff0c;知道独立开发一个项目并让项目上线需要经历哪些步骤&#xff0c;需要学到哪些…

java.util.ConcurrentModificationException: null异常

创作背景&#xff1a;在加强for循环中使用了remove操作 原因&#xff1a; 在官方文档中ConcurrentModificationException的介绍如下&#xff1a; public class ConcurrentModificationException extends RuntimeException 某个线程在 Collection 上进行遍历时&#xff0c;通…

Spring入门-IOC/DI注解管理与整合mybatis及Junit(2)

1&#xff0c;核心容器 前面已经完成bean与依赖注入的相关知识学习&#xff0c;接下来我们主要学习的是IOC容器中的核心容器。 这里所说的核心容器&#xff0c;大家可以把它简单的理解为ApplicationContext&#xff0c;前面虽然已经用到过&#xff0c;但是并没有系统的学习&a…

1.15日报

完成font.css global.css login.vue request.js 今天完成了前端与后端的联通&#xff0c;并成功响应请求。返回登录成功欣喜。 遇到的问题&#xff1a; 我的body设置了&#xff1a; margin:0; padding:0; 但是页面四周还有白色留边。原因&#xff1a;body设置无边框了&a…

用Scipy理解Gamma函数

文章目录Gamma函数对数Gamma函数复数域的Gamma函数Gamma函数 Γ\GammaΓ函数是阶乘的解析延拓&#xff0c;在概率论中非常常见&#xff0c;例如Gamma分布表示某个事件在某个时刻发生第nnn次的概率&#xff1a;Gamma分布详解 Γ\GammaΓ函数显含在Γ\GammaΓ分布中&#xff0c;其…

linux基本功系列之pwd命令实战

本文目录 文章目录一. pwd命令介绍二. 语法格式及常用选项2.1 语法格式2.2 常用参数三. 参考案例3.1 显示所在目录的完整路径3.2 显示符号链接的路径 -P 参数3.3 查看上一次所在的工作目录3.4 查看PWD的版本四. pwd的命令类型总结前言&#x1f680;&#x1f680;&#x1f680; …

7、redis数据库jedis省份缓存案例

Redis 1. 概念&#xff1a; redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL Not Only SQL)&#xff0c;意即“不仅仅是SQL”&#xff0c;是一项全新的数据库理念&#xff0c;泛指非关系型的数据库。 随着互联网web2.0网站的兴起…

IO流练习(三)

1.编程题 Homework01.java (1)在判断e盘下是否有文件夹mytemp,如果没有就创建mytemp (2)在e:\\mytemp目录下&#xff0c;创建文件hello.txt (3)如果hello.txt已经存在&#xff0c;提示该文件已经存在&#xff0c;就不要再重复创建了。 &#xff08;4&#xff09;并且在hello.tx…

Java加解密(八)数字证书

目录数字证书1 定义2 证书组成结构3 公钥基础设施&#xff08;PKI&#xff09;3.1 PKI的组成3.2 PKI的相关标准3.3 信任模型4 证书的应用场景5 证书链6 生成证书6.1 通过CA生成可信证书6.1.1 国际权威认证机构6.1.2 生成CSR6.1.2.1 使用XCA生成CSR6.1.2.2 使用OpenSSL生成CSR6.…

每日一题-力扣(leetcode)2059. 转化数字的最小运算数

传送门 题目描述 给你一个下标从 0 开始的整数数组 nums &#xff0c;该数组由 互不相同 的数字组成。另给你两个整数 start 和 goal 。 整数 x 的值最开始设为 start &#xff0c;你打算执行一些运算使 x 转化为 goal 。你可以对数字 x 重复执行下述运算&#xff1a; 如果…

AtCoder Beginner Contest 284解题报告(A-D)

A - Sequence of Strings Problem Statement You are given N strings S1​,S2​,…,SN​ in this order. Print SN​,SN−1​,…,S1​ in this order. Constraints 1≤N≤10N is an integer.Si​ is a string of length between 1 and 10, inclusive, consisting of lowe…

【Redis】Redis实现分布式锁

【Redis】Redis实现分布式锁 文章目录【Redis】Redis实现分布式锁1. 分布式锁概念2. 为什么要实现分布式锁2.1 并发安全问题3. 分布式锁的实现方案3.1 Redis实现分布式锁3.1.1 定义分布锁接口和类3.1.2 编写lua脚本3.1.3 使用线程锁3.1.4 总结在实现分布式锁之前&#xff0c;首…

aardio - 升级bindConfig函数,支持多属性和多子组件

一、需求分析 aardio的 winform.bindConfig() 函数&#xff0c;绑定后&#xff0c;一个组件&#xff0c;只能保存一个属性。 有时候需要同时保存多个属性&#xff0c;比如一个comobox组件&#xff0c;需要保存项目列表&#xff0c;同时保存当前选中的项目索引。当前这个bindC…

代码随想录算法训练营第十八天二叉树 java : .106 从中序与后序遍历序列构造二叉树113. 路径总和ii 112 路径总和 513.找树左下角的值

文章目录前言LeetCode 513.找树左下角的值题目讲解思路那么如何找最左边的呢&#xff1f;Leetcode 112 路径总和题目讲解LeetCode 113. 路径总和ii题目讲解Leetcode 106 从中序与后序遍历序列构造二叉树题目讲解前言 人的不幸在于他们不想走自己的那条路&#xff0c;总想走别人…