一、感知机介绍
感知机是最早的监督式学习算法,是神经网络和支持向量机的基础。在神经网络方面,可以将它看作神经网络的一个神经元。
感知机接收多个输入信号,输出一个信号。
下图是具有两个输入信号的感知机。x1和x2是输入信号,y是输出信号,w1和w2是权重,图中的圈圈称为神经元或者节点。输入信号传递至神经元时,分别乘以固定的权重(得到w1x1、w2x2)。神经元会计算传递过来的信号的总和,只有当前这个总和超过了某个界限时,才会输出1,这称为“神经元被激活”。我们把界限称为阈值,用表示。
用数学表达式表示感知机的运行原理:
感知机的多个输入信号都有各自故有权重,权重的大小控制各个信号的重要性。也就是说,权重越大的信号越重要。
二、感知机与简单逻辑电路
书中,这一部分介绍了与门,与非门和或门等逻辑电路,并且这三种逻辑电路可以用同一个感知机模型来表示,不同的是模型参数。
通过调整模型参数就能实现不同的逻辑门电路逻辑。
具体不再这里详细介绍,了解以下即可,也比较简单,相信大家都能理解。
三、感知机的实现
1、简单实现
与门的简单实现如下:
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
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
运行结果:
(py_venv) xp@7010:~/work$ /home/xp/work/py_venv/bin/python3.10 /home/xp/work/ML_shao1chuan/ANN/test1.py
0
0
0
1
(py_venv) xp@7010:~/work$ ^C
(py_venv) xp@7010:~/work$
2、导入权重和偏重
将前面的公式里的阈值换成-b,感知机的运行原理可以重新表示为:
式中,b称为便置,w1和w2称为权重。感知机计算输入信号和权重的乘积,然后加上便置,若结果大于0,则输入1,否则输出0.
使用Numpy数组方式实现:
def AND2(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
elif tmp >0:
return 1
四、感知机的局限性
事实上,感知机可以表示与门,与非门和或门,但是不能表示异或门,因为感知机是线性的,只能区分线性数据特性,对于非线性数据是无法用感知机等线性方法区分的。
这个就是感知机的局限性。感知机的局限性在于只能表示由一条直线分开的空间。
五、多层感知机
通过多层感知机可以实现异或门。
实际上,异或门可以由与门、与非门和或门等简单的门电路组合而成,例如下面的组合就是实现异或门的一种组合方法:
用感知机实现的异或门如下:
上图的异或门是一种多层结构的神经网络。将最左边的一列称为第0层,中间的称为第1层,最后一列称为第2层。
像这种叠加了多层的感知机称为多层感知机(Multi-Layered Perceptron)。
从上面的分析可以看出,多层感知机已经能解决一些非线性问题了。
|