深度学习基础--感知器
深度学习基础--感知器
本文将介绍感知机这一算法。感知机是由美国学者Frank Rosenblattt 在1957年提出来的。为何我们现在还要学习以前的算法?因为感知机是作为神经网络起源的算法。
严格的说,本文所说的感知机应该称为“人工神经元”或“朴素感知机”,但是很多基本的处理都是共通的,所以这里简单的称为“感知机”。
本章我们将简单介绍一下感知机,并应用感知机解决一些简单的问题,希望读者通过这个过程熟悉感知机。
2.1 感知机是什么
感知机接受多个输入信号,输出一个信号。这里所说的信号可以想象成电流那样具备流动的东西。像电流流过导线,向前方输送电子一样,感知机的信号也会形成流,向前方输送信息。但是,和实际的电流不同的是,感知机信号只有"流/和不流"两种取值。分别是,0对应"不流",即不传递信号,1对应"流",即传递信号。
图2-1是一个接受两个输入信号的感知机的例子。$x_1$、$x_2$是输入信号,$y$是输出信号,$w_1$、$w_2$是权重。图中的圆圈(O)称为“神经元”或者“节点”。
输入信号被送往神经元时,会被乘以固定的权重($w_1x_1$)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个阈值 $\theta$,才会输出1。这也被称为“神经元被激活”。
感知机的运行原理用数学表达式表示如下
$$y = \left\{ {\begin{array}{*{20}{c}} 0&{(w_1x_1+w_2x_2 \le \theta )} \\1&{(w_1x_1+w_2x_2 > \theta )} \end{array}} \right.$$
感知机的每个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。
权重相当于电流里所说的电阻。电阻是决定电流流动难度的参数,电阻越低,通过的电流就越大。而感知机的权重则是值越大,通过的信号就越大。不管是电阻还是权重,在控制信号流动难度(或者流动容易度)这一点上的作用都是一样的。
2.2 逻辑电路
2.2.1 与门
现在让我们考虑用感知机来解决简单的问题。这里首先以逻辑电路为题材来思考一下与门。
与门是有两个输入和一个输出的门电路。图 2-2 这种输入信号和输出信号的对应表称为“真值表”。如图 2-2 所示,与门仅在两个输入均为1的时候输出才是1,其他时候则输出为0
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
下面考虑用感知机来表示这个与门。需要做的就是确定能满足图 2-2 的真值表的$w_1$、$w_2$、$\theta$ 的值。
那么,设定什么样的值才能制作出满足图 2-2 的条件的感知机呢?
实际上,满足图 2-2 的条件的参数的选择方法有无数多个。比如,当
($w_1$,$w_2$,$\theta$)=(0.5,0.5,0.7)时,可以满足图2-2的条件。
($w_1$,$w_2$,$\theta$)=(0.5,0.5,0.8) 或者($w_1$,$w_2$,$\theta$)=(1.0,1.0,1.0)也满足与门条件。设定这样的参数后,当$x_1$和$x_2$同时为1的时候,信号的加权总和才会超过给定的$\theta$。
2.2.2 与非门和或门
接着,我们再来考虑一下与非门(NAND gate)。NAND 是 Not AND 的意思,与非门就是颠倒了与门的输出。用真值表表示的话,如图 2-3 所示,仅当$x_1$和$x_2$同时为 1 时输出 0,其他时候则输出 1。那么与非门的参数又可以是什么样的组合呢?
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
要表示与非门,可以用($w_1$,$w_2$,$\theta$)=(-0.5,-0.5,-0.7)这样的组合(其他的组合也是无限存在的)。实际上,只要把实现与门的参数值的符号取反,就可以实现与非门。
接下来看一下图 2-4 所示的或门。或门是“只要有一个输入信号是 1,输出就为 1”的逻辑电路。那么我们来思考一下,应该为这个或门设定什么样的参数呢?
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
这里决定感知机参数的并不是计算机,而是我们人。我们看着真值表这种“训练数据”,人工考虑(想到)了参数的值。而机器学习的问题就是将这个决定参数值的工作交由计算机自动进行。学习 是确定合适的参数的过程,而人要做的是思考感知机的构造(模型),并把训练数据交给计算机。
如上所示,我们已经知道使用感知机可以表示与门、与非门、或门的逻辑电路。这里重要的一点是:与门、与非门、或门的感知机构造是一样的。实际上,3个门电路只有参数的值(权重和阈值)不同。也就是说,相同构造的感知机(模型),只需通过适当地调整参数的值,就可以像“变色龙演员”表演不同的角色一样,变身为与门、与非门、或门。
2.3 感知机的局限性
到这里我们已经知道,使用感知机可以实现与门、与非门、或门三种逻辑电路。现在我们来考虑一下异或门(XOR gate)
2.3.1 异或门
异或门也被称为逻辑异或 电路。如图 2-5 所示,仅当$x_1$或$x_1$中的一方为 1 时,才会输出 1(“异或”是拒绝其他的意思)。那么,要用感知机实现这个异或门的话,应该设定什么样的权重参数呢?
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
实际上,用前面介绍的感知机是无法实现这个异或门的。为什么用感知机可以实现与门、或门,却无法实现异或门呢?下面我们尝试通过画图来思考其中的原因。
我们将感知机形式修改为另外一种实现形式。在此之前,首先把式(2.1)的 θ 换成 -b ,于是就可以用式(2.2)来表示感知机的行为。
$$y = \left\{ {\begin{array}{*{20}{c}} 0&{(b+w_1x_1+w_2x_2 \le 0)}\\ 1&{(b+w_1x_1+w_2x_2 > 0 )} \end{array}} \right.$$
虽然有一个符号不同,但表达的内容是完全相同的。此处,$b$ 称为偏置 $w_1$和$w_2$称为权重 。
首先,我们试着将或门的动作形象化。或门的情况下,当权重参数为$(b,$w_1$,$w_2$)=(-0.5,1.0,1.0)$时,可满足图2-4的真值表条件。此时,感知机可用如下表达式表示
$$y = \left\{ {\begin{array}{*{20}{c}} 0&{(-0.5+x_1+x_2 \le 0)} \\1&{(-0.5+x_1+x_2 > 0 )} \end{array}} \right.$$
上式表示的感知机会由直线$-0.5+x_1+x_2=0$分割的两个空间。其中一个空间输出1,另外一个空间输出0,如图2-6所示。
或门在$(x_1,x_2)=(0,0)$时输出 0,在$(x_1,x_2)$为 (0, 1)、(1, 0)、(1, 1) 时输出 1。图 2-6 中○ 表示 0,▲表示 1。如果想制作或门,需要用直线将图 2-6 中的○和△分开。实际上,刚才的那条直线就将这 4 个点正确地分开。
那么,换成异或门的话会如何呢?能否像或门那样,用一条直线作出分割图 2-7 中的○和△的空间呢?
想要用一条直线将图 2-7 中的○和△分开,无论如何都做不到。事实上,用一条直线是无法将○和△分开的。
2.3.2 线性与非线性
图 2-7 中的○和△无法用一条直线分开,但是如果将“直线”这个限制条件去掉,就可以实现了。比如,我们可以像图 2-8 那样,作出分开○和△的空间。
感知机的局限性就在于它只能表示由一条直线分割的空间。图 2-8 这样弯曲的曲线无法用感知机表示。另外,由图 2-8 这样的曲线分割而成的空间称为非线性 空间,由直线分割而成的空间称为线性 空间。线性、非线性这两个术语在机器学习领域很常见,可以将其想象成图 2-6 和图 2-8 所示的直线和曲线。
2.4 多层感知机
感知机不能表示异或门让人深感遗憾,但也无需悲观。实际上,感知机的绝妙之处在于它可以“叠加层”(通过叠加层来表示异或门是本节的要点)。这里,我们暂且不考虑叠加层具体是指什么,先从其他视角来思考一下异或门的问题。
2.4.1 门电路的组合
异或门的制作方法有很多,其中之一就是组合我们前面做好的与门、与非门、或门进行配置。这里,与门、与非门、或门用图 2-9 中的符号表示。另外,图 2-9中与非门前端的○表示反转输出的意思:
那么,请思考一下,要实现异或门的话,需要如何配置与门、与非门和或门呢?这里给大家一个提示,用与门、与非门、或门代替图 2-10 中的各个“?”,就可以实现异或门。
2.3 节讲到的感知机的局限性,严格地讲,应该是“单层感知机无法表示异或门”或者“单层感知机无法分离非线性空间”。接下来,我们将看到通过组合感知机(叠加层)就可以实现异或门。
异或门可以通过图 2-11 所示的配置来实现。这里,$x_1$ 和 $x_2$ 表示输入信号,$y$ 表示输出信号。 和 是与非门和或门的输入,而与非门和或门的输出($s_1$、$s_2$)则是与门的输入。
现在,我们来确认一下图 2-11的配置是否真正实现了异或门。这里,把$s_1$作为与非门的输出,把$s_2$ 作为或门的输出,填入真值表中。结果如图2-12所示,观察$x_1$、$x_2$、$y$,可以发现确实符合异或门的输出。
($x_1$、$x_2$) | ($s_1$、$s_2$) | $y$ |
---|---|---|
(0,0) | (1,0) | 0 |
(1,0) | (1,1) | 1 |
(0,1) | (1,1) | 1 |
(1,1) | (0,1) | 0 |
下面我们试着用感知机的表示方法(明确地显示神经元)来表示这个异或门,结果如图 2-11 所示。
如图 2-11 所示,异或门是一种多层结构的神经网络。这里,将最左边的一列称为第 0 层,中间的一列称为第 1 层,最右边的一列称为第 2 层。
图 2-13 所示的感知机与前面介绍的与门、或门的感知机(图2-1)形状不同。实际上,与门、或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机也称为多层感知机 (multi-layered perceptron)。
图 2-11 中的感知机总共由 3 层构成,但是因为拥有权重的层实质上只有 2 层(第 0 层和第 1 层之间,第 1 层和第 2 层之间),所以称为“2 层感知机”。不过,有的文献认为图 2-13 的感知机是由 3 层构成的,因而将其称为“3 层感知机”。
在图 2-13 所示的 2 层感知机中,先在第 0 层和第 1 层的神经元之间进行信号的传送和接收,然后在第 1 层和第 2 层之间进行信号的传送和接收,具体如下所示。
- 第 0 层的两个神经元接收输入信号,并将信号发送至第 1 层的神经元。
- 第 1 层的神经元将信号发送至第 2 层的神经元,第 2 层的神经元输出 y 。
2.5 总结
- 感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值。
- 感知机将权重和偏置设定为参数。
- 使用感知机可以表示与门和或门等逻辑电路。
- 异或门无法通过单层感知机来表示。
- 使用2层感知机可以表示异或门。
- 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。