目录
2.1 感知机是什么
感知机接收多个输入信号,输出一个信号。下图展示一个接收两个输入信号的感知机例子。x1,x2是输入信号,y是输出信号,w1,w2是权重。⚪称为神经元或节点,即输入信号被送往神经元时,会分别乘以固定的权重。神经元会计算传送来的信号的总和,总和超过某个界限值时,输出1,也叫做神经元被激活。此处界限值即阈值θ。
上述即感知机的运行原理,使用公式来表示如下:
感知机每个输入信号都有各自固有的权重。权重越大,对应该权重的信号的重要性就越高。(权重相当于电流中所说电阻,电阻越低,通过电流越大。而感知机权重值越大,通过的信号就越大。)
2.2 感知机实现简单逻辑电路
2.2.1 与门
现在考虑使用感知机表示该与门。即确定能满足上图的w1,w2,θ。实际上满足上图条件的参数有无数个,现取(w1,w2,θ)=(0.5, 0.5, 0.7)。使用python来实现与门电路。
现将感知机的公式中θ换成-b,则有
b称为偏置,w1,w2称为权重。如上式所示,感知机会计算输入信号和权重的乘积,加上偏置。按照上式使用python来实现与门:
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
在感知机中,w1,w2是控制输入信号重要性的参数,偏置是调整神经元被激活容易程度的参数。
2.2.2 与非门
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
2.2.3 或门
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
2.3 异或门
使用朴素感知机无法实现异或门,原因如下:
对于或门,取(b,w1,w2) = (-0.5,1.0,1.0),此时感知机可用下式表示
由上式表示的感知机会生成由直线-0.5 + x1 + x2 = 0分割开的两个空间,其中一个空间输出1,另一个空间输出0.
图中,⚪表示0,▲表示1。若想制作或门,需要使用直线将⚪和▲分开,即上图所示这样。而对于异或门,如下图,无法用一条直线将其分开。
2.4 线性和非线性
感知机的局限性就在于它只能表示由一条直线分割的空间(因其数学模型限制,即y=wx+b)。由曲线分割而成的空间称为非线性空间,由直线分割成的空间称为线性空间。
2.5 多层感知机
感知机可以叠加层,通过叠加层也可以表示出异或门。具体实现方法此处不再赘述。单层感知机无法分离非线性空间。
上图的感知机共由3层构成,但是拥有权重的层只有2层(第0层和第1层之间,第1层和第2层之间),所以称为2层感知机。
第0层的两个神经元接收输入信号,并将信号发送到第1层的神经元。第1层的神经元将信号发送到第2层的神经元,第2层的神经元输出y。
通过叠加层,感知机可以进行更加灵活的表示。单层感知机只能表示线性空间,多层感知机可以表示非线性空间。多层感知机理论上可以表示计算机。