学习笔记-共读深度学习D2-感知机

本章介绍的感知机,严格上应该成为“人工神经元”或“朴素感知机”

感知机是什么

  • 两层神经元组成的结构,输入层 + 输出层
  • 感知机的信号只有“流|不流”(0|1)两种取值
  • “输入信号*权值”的和大于某个界限值(阈值,用符号 θ 表示)时,输出1,这也称为“神经元激活”
  • 用数学公式来表示感知机的原理:y = (w1 * x1 + w2 * x2) > θ ? 1 : 0

简单逻辑电路

与门

与门的真值表

X1x2y
000
010
100
111

与非门

与非门的真值表

X1x2y
001
011
101
110

或门

或门的真值表

X1x2y
000
011
101
111

用感知机来描述上述逻辑,即转化为对 w1、w2、θ模型的设定,使其满足真值表。举个例子:

  1. 与 门 --(w1,w2,θ) = (0.5,0.5,0.7)
  2. 与非门-(w1,w2,θ) = (-0.5,-0.5,-0.7)
  3. 或 门 --(w1,w2,θ) = (0.5,0.5,0.4)

感知机的实现

简单实现
与门的实现
def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

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

运行结果:在这里插入图片描述

与非门的实现
def AND(x1, x2):
    w1, w2, theta = -0.5, -0.5, -0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

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

运行结果:
在这里插入图片描述

或门
def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.4
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

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

运行结果:
在这里插入图片描述

导入权重和偏置

把上一小节的公式中的θ 换成 -b,即可用类似如下的三目表达式来表示感知机的行为:

y = (b + x1 * b1 + x2 * b2  > 0) ? 1 : 0

此时,b我们称之为偏置,w1和w2称为权重

使用权重和偏置的实现
import numpy as np

def AND(x1,x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7 
    tmp = b + np.sum(w*x)
    if (tmp <= 0):
        return 0
    else:
        return 1

print("----test and----")
print(AND(0, 0))    # 0 
print(AND(0, 1))    # 0
print(AND(1, 0))    # 0
print(AND(1, 1))    # 1

def NAND(x1, x2):
    x = np.array([x1, x2])
    weight = np.array([-0.5, -0.5])
    b = 0.7
    tmp = b + np.sum(weight*x)
    if (tmp <= 0):
        return 0
    else:
        return 1

print("----test nand----")   
print(NAND(0, 0))   # 1
print(NAND(0, 1))   # 1
print(NAND(1, 0))   # 1
print(NAND(1, 1))   # 0

def OR(x1, x2):
    x = np.array([x1, x2])
    weight = np.array([0.5, 0.5])
    b = -0.4
    tmp = b + np.sum(weight*x)
    if (tmp <= 0):
        return 0
    else:
        return 1

print("----test or----")
print(OR(0, 0))   # 0
print(OR(0, 1))   # 1
print(OR(1, 0))   # 1
print(OR(1, 1))   # 1

感知机的局限

异或门

异或门的真值表

x1x2y
000
101
011
110

感知机无法构建出满足上述的函数模型

线性和非线性

感知机的局限在于它只能表示由一条直线分割的空间,也就是线性空间

多层感知机

感知机可以“叠加层”,通过叠加层来表示异或门
通过组合与门、与非门、或门实现异或门

x1x2s1s2y
00100
01111
10111
11010
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

print("----test XOR----")
print(XOR(0, 0))   # 0
print(XOR(0, 1))   # 1
print(XOR(1, 0))   # 1
print(XOR(1, 1))   # 1

输出结果:
在这里插入图片描述


  • 异或门是一种多层结构的神经网络
  • 与门、或门以及与非门是单层感知机,而异或门是 2 层感知机
  • 叠加了多层的感知机也称为多层感知机(multi-layered perceptron)
  • 多层感知机能够进行复杂的表示,甚至可以构建计算机
  • 理论上可以说 2 层感知机就能构建计算机,但是,使用 2 层感知机的构造,权重的构造比较考究和烧脑
  • 通过感知机表示计算机时,使用叠加了多层的构造来实现是比较自然的流程
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值