深度学习入门学习笔记:感知机
1.感知机是什么?
- 感知机接受多个输入信号,输出一个信号。
- 感知机的信号只有“流/不流“(1/0)两种取值
- 例:接收两个输入信号的感知机的例子

其中,是输入信号,是输出信号, ,是权重。图中的称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1。这也称为*“神经元被激活”*。将这个界限值称为阈值,用符号表示。
将上述内容用数学式来表示,可表示为
感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。
2.逻辑电路回顾
-
与门
真值表如下

用感知机实现与门。需要确定能满足真值表的的值。参数选择方法有无数种,且仅当同时为1时,信号的加权总和才会超过给定的阈值。
-
与非门
真值表如下

只要把实现与门的参数值的符号取反,就可以实现与非门
-
或门
真值表如下

3.感知机的实现
- 简单实现与门
1 | def AND(x1,x2): |
输出结果如下:

按照同样的步骤,也可以实现与非门和或门。
- 导入权重和偏置
为了处理更复杂的情况,我们将修改为
此处,称为偏置。如式所示,感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。按照式实现感知机,利用python解释器来逐一确定结果。

-
使用权重和偏置值实现与,与非和或门
- 与门
1
2
3
4
5
6
7
8
9def 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- 与非门(仅权重和偏置值不同)
1
2
3
4
5
6
7
8
9def 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- 或门(仅权重和偏置值不同)
1
2
3
4
5
6
7
8
9def 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
这里把命名为偏置,但注意,偏置和权重的作用是不一样的。具体说是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。比如,若为,则只要输入信号的加权总和超过,神经元就会被激活。但是如果为,则输入信号的加权总和必须超过,神经元才会被激活。像这样,偏置的值决定了神经元被激活的容易程度。
4.感知机的局限性
用上面的感知机无法实现异或门,原因如下:
将或门的动作情况形象化,假设权重参数为时,感知机可用下式表示:
式表示的感知机会生成由直线分割开的两个空间。其中高一个空间输出1,另一个空间(灰色区域)输出0,如下图所示

或门在时输出0,在为时输出1。
上图中表示0,表示1。
但异或门如下图所示

想要用一条直线分开,无论如何都做不到。但使用一条曲线就可以了,如下图所示

感知机的局限性就在它只能表示由一条直线分割的空间。上图这样弯曲的曲线无法用感知机表示。上图这样的曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。
5.多层感知机
可以通过组合与门、与非门、或门实现异或门,如下图所示

这里,和表示输入信号,表示输出信号。和是与非门和或门的输入,而与非门和或门的输出则是与门的输入。把作为与非门的输入,把作为或门的输出填入真值表,真值表如下

,可以发现确实符合异或门的输出。
那么,通过前面定义的AND函数、NAND函数、OR函数,可以像下面这样轻松地实现异或。
1 | def XOR(x1,x2): |
这个XOR函数输出预期结果

用感知机的表示方法(明确的显示神经元)来表示这个异或门,结果如下图所示

异或门是一种多层结构的神经网络。这里将最左边的一列称为第0层,中间的一列称为第1层,最右边的一列称为2层。叠加了多层的感知机也称为多层感知机。
上图所示的2层感知机中,先在第0层和第1层的神经元之间进行信号的传送和接收,然后在第1层和第2层之间进行信号的传送和接收,具体如下所示。
- 第0层的两个神经元接收输入信号,并将信号发送至第1层的神经元。
- 第1层的神经元将信号发送至第2层的神经元,第2层的神经元输出。