由于感知机有局限性,又介绍了异或门(XOR gate),仅当x1或x2中的一方为1时,才会输出1,其他情况都输出0。这里我自己理解的也不是很清楚,就不多讲了
实现异或门的python函数
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
最后就说明了单层感知机无法表示的东西,通过增加一层就可以解决,这里可能是让读者懂得,再复杂的东西都是这些简单的单元组成的。
用图来表示神经网络的话,我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层,有时也叫隐藏层。
引入新函数h(x)式,y = h(b + w1x1 + w2x2),h(x)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数(activation function)。
神经网络中经常使用的一个激活函数就是sigmoid函数(sigmoid function)
式中的exp(-x)表示e-x的意思。e是纳皮尔常数2.7182 …。式表示的sigmoid函数看上去有些复杂,但它也仅仅是个函数而已。而函数就是给定某个输入后,会返回某个输出的转换器。比如,向sigmoid函数输入1.0或2.0后,就会有某个值被输出,类似h(1.0) = 0.731 …、h(2.0) = 0.880 …这样。
上面介绍的感知机和接下来要介绍的神经网络的主要区别就在于这个激活函数。
为了便于后面的操作,我们改为支持NumPy数组的实现:
def step_function(x):
y = x > 0
return y.astype(np.int)
解释一下NumPy数组的实现,对NumPy数组进行不等号运算后,数组的各个元素都会进行不等号运算,生成一个布尔型数组。这里,数组x中大于0的元素被转换为True,小于等于0的元素被转换为False,从而生成一个新的数组y,其实就是将布尔值转变为int。
>>> import numpy as np
>>> x = np.array([-1.0, 1.0, 2.0])
>>> x
array([-1., 1., 2.])
>>> y = x > 0
>>> y
array([False, True, True], dtype=bool)
>>> y = y.astype(np.int)
>>> y
array([0, 1, 1])
注:以上的学习内容均来自《深度学习入门》[斋藤康毅]著