感知机
前言
此为本人学习《深度学习入门》的学习笔记
一、感知机是什么
感知机接受多个输入信号,输出一个信号。感知机的信号只有“流/不流“(1/0)两种取值,0对应不传递信号,1对应传递信号。
神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出 1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ 表示。用数学公式表示就是
二、简单逻辑电路
1、与门(AND gate)
仅在两个输入均为1时输出1,其他时候则输出0
2、与非门(NAND gate)
当两个输入均为1时输出0,其他时候输出1
3、或门(OR gate)
当两个输入均为0时输出0,其他时候输出1
三、感知机的实现
1、简单的实现
利用python实现逻辑电路,先定义一个接受参数x1和x的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, thete, 当输入的加权总和超过阈值时返回1,否则返回0.
2、导入权重和偏置并实现
把式子2.1的θ 换成-b,可改为式2.2表示感知机的行为
此处,b称为偏置,w1和w2称为权重。
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
3、实现与非门和或门
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
四、感知机的局限性
1、异或门(XOR gate)
异或门也称逻辑异或电路。仅当两个输入一方为1时,才会输出1.
实际上,前面介绍的感知机无法实现异或门。
满足异或门条件的式子
如下图,其无法用一条直线将o和△分开。
2、线性和非线性
感知机的局限性就在于它只能表示由一条直线分割的空间。上图这样弯曲的曲线无法用感知机表示。另外,由上图这样的曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。
五、多层感知机
感知机的绝妙之处在于它的叠加层
1、已有门电路的组合
2、将其组合实现异或门
3、异或门的实现
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
4、用感知机表达异或门
异或门是一种多层结构的神经网络。上图所示的叠加了多层的感知机也称多层感知机(multi-layered perceptron)
六 从与非门到计算机
感知机通过叠加层能够进行非线性的表示,理论上还可以表示计算机进行的处理
小结
- 感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值。
- 感知机将权重和偏置设定为参数。
- 使用感知机可以表示与门和或门等逻辑电路。
- 异或门无法通过单层感知机来表示。
- 使用2层感知机可以表示异或门。
- 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
- 多层感知机(在理论上)可以表示计算机。