废话不多说,人生甜短,让我们立即开始多层感知机的学习吧。为了循环渐进的理解多层感知机,我们有必要再把门电路拿出来把玩一番。
这些是门电路的符号表示,我们马上就用。你随便记3秒钟就好。
吼吼,你是不是在想,难道这就是异或门?没错哦。这就是。不信你可以捋一下。
是不是经过翻过来调过去的验证,发现那果然是一个异或门的实现?吼吼,捋乱了也没关系。咱还有图。
第1层输入(与非门) 第1层输入(或门) 第2层输入(与门)
00经过与非门-->1 00经过或门-->0 得到10再经过与门--->0
10经过与非门-->1 10经过或门-->1 得到11再经过与门--->1
01经过与非门-->1 01经过或门-->1 得到11再经过与门--->1
11经过与非门-->0 11经过或门-->1 得到01再经过与门--->0
哦哦。这结果与上文里贴的异或门真值表一样一样的。这样的方法果然实现了异或门。
下面我们用代码实现一下
import numpy as np
#实现与门
def AND(x1,x2):
x=np.array([x1,x2])
w=np.array([0.5,0.5])
b=-0.7
tem=np.sum(x*w)+b
return 1 if tem>0 else 0
#实现与非门
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同!
b = 0.7
tem=np.sum(x*w)+b
return 1 if tem>0 else 0
#实现或门
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.2, 0.3]) # 仅权重和偏置与AND不同!
b = -0.1
tem=np.sum(x*w)+b
return 1 if tem>0 else 0
#异或门实现
def XOR(x1,x2):
s1=NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return y
上面几个门,之前已经实现过来。这里只在XOR函数里做了很少的事情。
接下来验证一下
def main():
print(XOR(0, 0),end='|') # 输出0
print(XOR(1, 0),end='|') # 输出1
print(XOR(0, 1),end='|') # 输出1
print(XOR(1, 1),end='|') # 输出0
print()
if __name__ == '__main__':
main()
恭喜,我们得到了十分正确的结果。
多层感知机的表示呼之欲出了。上图。
看起来与门电路如此相像。它们是失散多年的兄弟吧!
--------结语--------
偷偷告诉你,多层感知机可以构造计算机。如果你足够聪明,淘宝买一堆电子元件,通过这些原理就可以制造计算机了。
下一节是(更加)激动人心的开始。因为我们要从感知机过度到神经网络。