感知机(perceptron)是由美国学者FrankRosenblatt在1957年提出来的。感知机也是作为神经网络(深度学习)的起源的算法。因此,学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。
2.1 感知机是什么
感知机接收多个输入信号,输出一个信号。
神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值
时,才会输出1。这也称为“神经元被激活” 。这里将这个界限值称为阈值
,用符号θ表示。
把上述内容用数学式来表示,就是式(2.1)
2.2 简单逻辑电路
与门(AND gate)
与非门(NAND gate)
或门
与门、与非门、或门的感知机构造是一样的
。实际上, 3个门电路只有参数的值(权重和阈值)不同。也就是说,相同构造的感知机,只需通过适当地调整参数的值,就可以像“变色龙演员”表演不同的角色一样,变身为与门、与非门、或门。
2.3 感知机的实现
# 实现与门
# AND(0, 0) # 输出0
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
把式(2.1)的θ换成−b,于是就可以用式(2.2)来表示感知机的行为。
式(2.1)和式(2.2)表达的内容是完全相同的。此处, b称为偏置, w1和w2称为权重。
使用NumPy,按式(2.2)的方式实现感知机
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
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
偏置和权重w1、 w2的作用是不一样的。具体地说, w1和w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。
2.4 感知机的局限性
异或门也被称为逻辑异或电路
实际上,用前面介绍的感知机是无法实现这个异或门的。
2.5 多层感知机
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
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
# 异或门的实现
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
与门、或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机也称为多层感知机(multi-layered perceptron)。
感知机通过叠加层能够进行非线性的表示,理论上还可以表示计算机进行的处理。
本章所学的内容
- 感知机是具有输入和输出的算法。给定一个输入后,将输出一个既
定的值。 - 感知机将权重和偏置设定为参数。
- 使用感知机可以表示与门和或门等逻辑电路。
- 异或门无法通过单层感知机来表示。
- 使用2层感知机可以表示异或门。
- 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
- 多层感知机(在理论上)可以表示计算机。
系列文章:
【啃书】《深度学习入门 基于Python的理论与实现》第1章 Python入门
中 深度学习入门 基于Python的理论与实现 原作名- Deep Learning from Scratch[文字版][[日]斋藤康毅[译] 陆宇杰][人民邮电出版社][2018-7][9787115485588]