斋藤康毅的书终于到了!《深度学习入门-基于Python的理论与实现》
刚读了一章就觉得深入浅出,好书啊!一直搞不懂的与、或、非与、异或都弄明白了。在这里记录一下算法实现吧~~
【感知机】
英文:perceptron
定义:又称人工神经元/朴素神经元,可以接收多个输入信号,输出一个信号。其运行原理简单表示为:
其中θ是阈值,当把θ移到左边,称作偏置,偏置b=-θ,如下所示:
使用感知机来思考逻辑电路的问题,包括与门、与非门和或门。
1、与门
#x1和x2均为1时,y才输出1
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:return 1
elif tmp<=0:return 0
2、或门
#x1和x2均为0时,y才输出0
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:return 1
elif tmp<=0:return 0
3、与非门
#x1和x2均为1时,y才输出0
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:return 1
elif tmp<=0:return 0
-------分界线---------
4、异或门
当问题来到异或门时,就变得不一样了。
上面的三个门都是可以一层感知机直接实现,因为其实现过程是对线性空间的分割。而异或门里,x1x2均为0、x1x2均为1都会输出0,只有x1x2一个为0一个为1时才会输出1。属于对非线性空间的划分,单层感知机不再适用,故引入多层感知机的概念。
如果x1,x2先实现或门,则x1x2只有均为0时才输出0,其他情况输出1,满足了异或门的一个条件;
如果x1,x2先实现非与门,则x1x2只有均为1时才输出0,其他情况输出1,满足了异或门的另一个条件;
以上二者的其他情况和异或门的其他输出1的情况是一致的!
也就是说,第一层感知机,可以并行计算x1x2或门的结果s1,以及x1x2非与门的结果s2;第二层感知机,利用s1和s2计算与门的结果y,y即是x1x2异或门的结果!
异或门可以利用之前定义好的三个函数,简单定义为:
#x1和x2均为1时,或者x1和x2均为0时,y输出0
def XOR(x1,x2):
s1=OR(x1,x2)
s2=NAND(x1,x2)
y=AND(s1,s2)
return y
从理论上来说,多层感知机可以表示计算机!
介绍了一本书,有空看^_*
《计算机系统要素:从零开始构建现代计算机》