最近想从头开始看起,所以就挑了《深度学习入门:基于Python的理论与实现》这本书来阅读
1、感知机的定义
虽然听起来名字比较高大上,但是结构没有这么恐怖,简单来说可以与电流经过电线进行一个类比,理解为能够接收多个输入信号,输出一个信号的模型,但是,和实际的电流不同的是,感知机的信号只有“流/不流”(1/0)两种取值。
以下图为例,x1,x2是输入信号,w1,w2是权重,如果计算出的结果超过某个阈值,那么就可以输出1或0,即对应的信号。
如果将上面的描述转换成公式,就可以得到如图所示的公式
2、简单的逻辑电路
根据真值表,可以简单的将与门,或门,与非门表示出来
2.1 与门
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.2 与非门
简单来说,与非门就是输出与与门输出结果颠倒了的逻辑电路。
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
2.3 或门
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
3、感知机的局限性
感知机的局限性就在于它只能表示由一条直线分割的空间,只能划分线性的空间,而如果要使用感知机来表示异或门(真值表如下图所示)就会发现不少问题。
将其转换为图表,会发现想要用一条直线将下图中的○和△分开是不可能做到的。
因此,感知机的局限性就在于它只能表示由一条直线分割的空间。但如果去除“直线”这一条件,使用多层感知机,就可以用曲线划分空间,即划分成非线性空间。
因此,我们可以将异或门拆成两个部分,通过 与门,与非门,或门即可实现(如下图所示)
可以进一步写出中间部分的真值表(如果考虑成s1,s2逆推x1,x2,会比较容易理解)
而实现比较简单,其实就是前面部分的组合
def XOR(x1,x2):
s1 = NAND(x1,x2)
s2 = OR(x1,x2)
y = AND(s1,s2)
return y