感知机是由美国学者Frank Rosenblatt在1957年提出的。 学习原因:作为神经网络(深度学习)的起源算法。学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。
用感知机来表示这个and gate,需要做的就是确定能满足真值表的w1,w2和theta的值。满足真值表条件的参数选择方法有无数多个。
颠倒了和and gate的输出。要表示与门,实际上只要把实现与门的参数值的符号取反即可。 ⚠️这里决定感知机参数的并不是计算机,而是人。我们看着真值表这种“训练数据”,人工考虑了参数的值。而机器学习的课题就是将这个决定参数值的工作交由计算机自动进行。学习是确定合适参数的过程,而人要做的是思考感知机的构造(模型),并把训练数据交给计算机
改变表达形式,将theta换成b,b称为偏置,w1和w2称为权重,感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值带0则输出1,否则输出0.
import numpy as np x = np.array([0,1]) w = np.array([0.5,0.5]) b = -0.7 print(w*x) print(np.sum(w*x)) print(np.sum(w*x)+b)先简要实现一个然后写成函数
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(x*w)+b if tmp <= 0:#注意这里的theta换了,就不是1了 return 0 else: return 1 print(And(1,0)) print(And(0,1)) print(And(1,1)) print(And(0,0))偏置和权重的作用不同: 偏置:调节神经元被激活的容易程度(输出信号为1的程度),b的绝对值越大,就越不容易被激活 ⚠️有的时候根据上下文也可能把权重和偏置这些参数统称为权重 与门、或门、与非门是具有相同构造的感知机,区别仅在于权重参数的值。
已知感知机可以实现与门、与非门、或门三种逻辑电路。现在考虑异或(XOR)门。 感知机无法实现XOR gate
或门可以正确的使用一条直线将两个区域分开,该得什么值得什么值。而为啥异或门不行呢?就是没有办法使用一条直线将整个区域恰好按照0和1分开。
虽然无法用直线分开但是可以用曲线分开,感知机的局限性就在于它只能表示一条直线分割的空间,曲线无法用感知机表示。 非线性空间:由曲线分割而成的空间称为非线性空间 线性空间:由直线分割的空间称为线性空间
感知机的绝妙之处在于它可以“叠加层” 单层感知机无法表示异或门(单层感知机无法分离非线性空间),但是组合感知机(叠加层)可以实现异或门。
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(x*w)+b if tmp <= 0:#注意这里的theta换了,就不是1了 return 0 else: return 1 def Or(x1,x2): x = np.array([x1,x2]) w = np.array([0.5,0.5]) b = -0.2 tmp = np.sum(x*w)+b if tmp <= 0:#注意这里的theta换了,就不是1了 return 0 else: return 1 def Nand(x1,x2): x = np.array([x1,x2]) w = np.array([-0.5,-0.5]) b = 0.7 tmp = np.sum(x*w)+b if tmp <= 0:#注意这里的theta换了,就不是1了 return 0 else: return 1 def Xor(x1,x2): s1 = Nand(x1,x2) s2 = Or(x1,x2) y = And(s1,s2) return y print(Xor(1,1)) print(Xor(1,0)) print(Xor(0,1)) print(Xor(0,0))将最左边的一列称为第0层,中间的一列称为第1层,最右边的一列称为第2层。异或门是2层感知机。叠加了多层的感知机称为多层感知机(multi-layered perceptron) 图中的感知机总共由3层构成,但是因为拥有权重的层实质上只有两层(第0层和第1层之间,第1层和第2层之间),所以称“2层感知机”,也有的文献认为是“3层感知机”
只要通过与非门的组合,就能再现计算机进行的处理,说明使用感知机可以表示计算机。 理论上说2层感知机就可以构建计算机,这是因为,已有研究证明,2层感知机(严格的说是激活函数使用了费希纳型的sigmoid函数的感知机)可以表示任意函数。 感知机通过叠加层能够进行非线性的表示,理论上还可以表示计算机进行的处理