鱼书(深度学习入门):第二章 感知器
一、感知器的原理
感知机(perceptron)接收多个输入信号,输出一个信号。x1、x2是输入信号, y是输出信号,w1、w2是权重(w是weight的首字母)。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号θ表示。

其数学原理如下:

其中权重控制了各个输入的重要程度,而阈值控制了感知器被激活的难易程度。
将上式中的θ改为-b,可得新的表达方式。

此处,b称为偏置,w1和w2称为权重。感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。
二、简单逻辑电路
1.与门(AND gate)

示例代码:
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
2.与非门(NAND gate)

示例代码:
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
3.或门(OR gate)

示例代码:
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
三、感知器的局限性
下图是感知器的可视化,其中灰色部分与白色部分分别输出不同的结果。

感知器的局限性在于,其只能用直线分割空间。由直线分割的空间称为线性空间,由曲线分割而成的空间成为非线性空间,如下图。

四、多层感知机
通过“叠加层”,构建多层感知机,便可以表示非线性空间。此处以构建异或门(XOR gate)为例。

通过组合上一节中的与门,或门,与非门便可以构造出异或门。如下图所示。

其代码实现:
def XOR(x1,x2): #利用多个门实现新门,也即多层感知机
s1=NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return y
这样,我们便实现了异或门。异或门是一种多层结构的神经网络。其过程真值表如下。

这里,将最左边的一列称为第0层,中间的一列称为第1层,最右边的一列称为第2层。实际上,与门、或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机也称为多层感知机(multi-layered perceptron)。

五、感知器与计算机
计算机可以通过组合感知器表示。理论上可以说2层感知机就能构建计算机。这是因为,已有研究证明,2层感知机(严格地说是激活函数使用了非线性的sigmoid函数的感知机)可以表示任意函数。