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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

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

文章目录


本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.50.50.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,y10,y11,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层感知机来表示
  • 单层感知机只能表示线性空间而多层感知机可以表示非线性空间
  • 多层感知机在理论上可以表示计算机
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python