二、感知机

(1)
"""
感知机是什么?感知机接受多个输入信号,输出一个信号。感知机的多个输入信号都有各自固有的权重,这些权重发挥着各个信号的重要性作用。
也即权重越大,对应该权重的信号的重要性就越高。
如下例子:x1,x2是输入信号,y是输出信号,w1、w2是权重,当输人信号被送往神经元时,会被分别乘以固定权重(w1*x1,w2*x2)。
神经元会计算传送过来的信号总和,只有当这个总和超过了某个界限值时,才会输出1.此处将这个界限值称为阈值,用theta表示。

"""

"""
感知机的运行原理用数学式表示如下:

y={0,1}
(w1*x1+w2*x2<=theta时,y=0)
(w1*x1+w2*x2>theta时,y=1)
"""

#简单逻辑电路
"""
与门(And gate):是有两个输入和一个输出的门电路。与门仅在两个输入值均为1时输出1,其他时候则输出0。
真值表如下:
x1  x2   y
0   0    0
1   0    0
0   1    0
1   1    1
"""

"""
与非门(Not AND Gate):颠倒了与门的输出,用真值表表示,仅当x1和x2同时为1时输出0,其他时候输出1.
x1   x2   y
0    0    1
1    0    1
0    1    1
1    1    0
"""

"""
或门:只要有一个输入信号为1,输出就为1的逻辑电路
x1   x2   y
0    0    0
1    0    1
0    1    1
1    1    1
"""
#这里决定感知机参数并不是计算机,而是我们人。我们看着真值表这种“训练数据”,人工想到了参数的值。而机器学习的课题就是将
#这个决定参数值的工作交由计算机自动进行。"学习"是确定合适的参数的过程,而人要做的就是思考感知机的构造(模型),并把训练数据交给计算机。
#感知机的简单实现:现在使用Python来实现刚才的逻辑电路,此处先定义一个接收参数x1和x2的AND函数
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
#在函数内初始化参数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)导入权重和偏置

#2.导入权重和偏置
"""
刚才的与门实现比较直接、容易理解,此处我们将其修改为另外一种实现方式;先将上式的theta换为:-b,

y={0,1}
(b+w1*x1+w2*x2<=0时,y=0)
(b+w1*x1+w2*x2>0时,y=1)
此处b成为偏置,w1和w2称为权重,感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0.
"""
import numpy as np
x=np.array([0,1])#输入
w=np.array([0.5,0.5])#权重
b=-0.7 #偏置

print(w*x)#[0,0.5]
print(np.sum(w*x))#计算相乘后各个元素的总和
print(np.sum(w*x)+b)#结果再加上偏置#-0.19999999999999996

#使用权重和偏置可以如下面所示实现与门
def AND(x1,x2):
    x=np.array([0,1])
    w=np.array([0.5,0.5])
    b=-0.7
    tmp=np.sum(w*x)+b
    if tmp<=0:
        return 0
    else:
        return 1

#注意:偏置b和权重w1、和w2的作用不同。具体来说。w1和w2是控制输入信号的重要性的参数,而偏置b是调整神经元被激活的容易程度的参数。

#接着实现非门
def NAND(x1,x2):
    x=np.array([x1,x2])
    w=np.array([-0.5,-0.5])#仅权重和偏置与AND不同!
    b=0.7
    tmp=np.sum(w*x)+b
    if tmp<=0:
        return 0
    else:
        return 1

#实现或门
def OR(x1,x2):
    x=np.array([x1,x2])
    w=np.array([0.5,0.5])#仅权重和偏置与AND不同!
    b=-0.2
    tmp=np.sum(w*x)+b
    if tmp<=0:
        return 0
    else:
        return 1



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

事实上用前面介绍的感知机是无法实现这个异或门的。
"""

 

 

 感知机的局限性就在于它只能表示由一条直线分割的空间。上图这样弯曲的曲线无法用感知机表示。上图这样的曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。

 

 多层感知机不能直接表示异或门有点遗憾,严格来说,应该是“单层感知无法分离非线性空间”。但实际上感知机的绝妙之处在于它可以“叠加层”(通过叠加层来表示异或门)。

 

 

#异或门的实现
def XOR(x1, x2):
 s1 = NAND(x1, x2)
 s2 = OR(x1, x2)
 y = AND(s1, s2)
 return y
#这个XOR函数会输出预期的结果。
XOR(0, 0) # 输出0
XOR(1, 0) # 输出1
XOR(0, 1) # 输出1
XOR(1, 1) # 输出0

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值