深度学习-----课堂笔记

第二章  感知机(perceptron)

目录

第二章  感知机(perceptron)

2.1 简单感知机

 2.2 简单逻辑电路

 2.2.1  与门 (AND gate)

 2.2.2  与非门 (NAND gate)

 2.2.3  或门 (OR gate)

 2.2.3  异或门 (XOR gate)

 2.3  代码实现

2.3.1  与门代码

2.3.2  与非门代码

2.3.3  或门代码

2.3.4  异或门代码


2.1 简单感知机

1、有两个输入的感知机

输入:x1,x2;

权重:w1,w2;

输出:y

公式如下:

公式(1)

如同大脑中的神经元,感知机的传递方向只能单向传递

 2.2 简单逻辑电路

 

 2.2.1  与门 (AND gate)

1)与门是由两个输入和一个输出的门电路。

2)与门仅在两个输入均为1是输出1,其他时候则输出0;

     如下表所示:

eg. (w1,w2,\theta) = (0.5,0.5,0.7)时,

        (1) 0 * 0.5 + 0 * 0.5  \leq  0.7  \Rightarrow  y = 0

        (2) 1 * 0.5 + 0 * 0.5  \leq 0.7  \Rightarrow  y = 0

        (3) 0 * 0.5 + 1 * 0.5  \leq 0.7  \Rightarrow  y = 0

        (4) 1 * 0.5 + 1 * 0.5   > 0.7  \Rightarrow  y = 1

3)满足与门的参数的选择有无数个;设定这样的参数后,仅当 x1 和 x2 同时为 1 时,信号的加权总和才会超过给定的阈值 \theta

 2.2.2  与非门 (NAND gate)

1)与非门就是颠倒了与门的输出;

2)与非门仅在两个输入均为1是输出0,其他时候则输出1;

     如下表所示:

3)实际上,只要把实现与门的参数值的符号取反,就可以实现与非门。

        【eg. (w1,w2,\theta) = (-0.5,-0.5,-0.7)】

 2.2.3  或门 (OR gate)

 1)或门:只要有一个输入信号是 1 ,输出就为 1 的逻辑电路;

 2)真值表如下:

 2.2.3  异或门 (XOR gate)

1)异或门也称逻辑异或电路;

2)异或门:仅当x1或 x2 中的一方为 1 时,才会输出 1 (“异或”是拒绝其他的意思);

3)真值表如下:

 2.3  代码实现

2.3.1  与门代码

1)简单实现

def AND(x1, x2):
    w1,w2,theta = 0.5,0.5,0.7   #初始化参数
    tmp = x1 * w1 + x2 * w2
    if tmp <= theta:            #当输入的加权总和超过阈值时返回1,否则返回0;
        return 0
    elif tmp > theta:
        return 1

 2)导入权重与偏置

        (1)把  公式(1) 中的 \theta 换成 -b 后,可用下式来表示感知机

 公式(2)

                b:偏置;         w:权重;        参数:b、w;

           (若 b + x1w1 + x2w2 = 0,此时为一条直线)

        (2)与门代码实现可用另一种方法实现:(这种方法更加简洁,运用了Numpy的矩阵运算)

def AND(x1, x2):
    #Numpy数组
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7
    tmp = np.sum(w*x) + b     #w*x:对位相乘,结果为一个数组;
                              #np.sum(w*x):计算相乘后的各个元素的总和;
    if tmp <= 0:
        return 0
    else:
        return 1

2.3.2  与非门代码

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

2.3.3  或门代码

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

2.3.4  异或门代码

1)由于感知机的局限性就在于它只能表示由一条直线分割的空间(即线性空间),而异或门为非线性问题,故其表示的空间则为曲线分割而成的非线性空间,所以单层感知机无法表示异或门

2)组合感知机(叠加层)可以实现异或门,即可通过组合与门、与非门、或门来实现异或门;

3)通过组合后的真值表 可如下表示:

4)代码实现

def XOR(x1,x2):
    s1 = NAND(x1,x2)
    s2 = OR(x1,x2)
    y = AND(s1,s2)
    return y

总结:与门、与非门、或门是单层感知机;异或门是 2 层感知机;叠加了多层的感知机也称为多层感知机。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值