两层感知机解决异或(XOR)问题
文章目录
- 两层感知机解决异或(XOR)问题
- 前言
- 感知机
- 简单逻辑电路
- 与门
- 与非门
- 或门
- 异或门
- 异或门的感知机的表示
- 第一层感知机
- 第二层感知机
前言
本文的内容主要参考《深度学习入门》这本书
最近翻看《深度学习入门》一书时,对感知机解决异或问题产生了一些疑问。经过与同学的探讨,终于弄清楚了为什么两层感知机能够解决异或(XOR)问题,以及两层感知机解决异或问题时的权重应该如何设置。
文章脉络是这样的,
首先我会简单介绍什么是感知机;
然后会介绍一下一些简单的逻辑电路(与门,与非门,或门),并介绍如何用感知机实现这些逻辑电路;
最后我会介绍异或门,引出单层感知机的局限性,进而引出用两层感知机解决异或问题
感知机
感知机接收多个输入信号,输出一个信号。注意,感知机的信号只有(0/1)两种取值。
上图是一个接收两个输入信号的感知机的例子。、是输入信号,是输出信号,、 是权重。图中的〇称为“神经元”或者“节点”。
那么接下来的一个问题是,刚刚说了感知机的信号只有两种取值(0/1),那么什么时候输出信号的取值是0,什么时候输出信号的取值是1呢?
计算法则:
首先神经元会计算传送过来的信号总和(),然后我们会人为的给定一个阈值(),当传送过来信号的总和大于阈值的时候,输出信号为1,反之,传送过来的信号的总和小于等于阈值的时候,输出信号的取值为0。
简单逻辑电路
与门
与门仅在两个输入均为1时输出1,其他时候输出0。用真值表表示为:
将其画在图上则为:
下面考虑用感知机来表示这个与门。需要做的就确定能满足上图真值表的的值。那么设定什么样的值才能制作出满足上图真值表的感知机呢?
还记得我们初中学过的直线表达式吗,,当某一点在这条直线下方时,有,当在这条直线上方时,有。
回到感知机的计算法则,
将移到符号左边,即当时,取值为0;当时,取值为1。也就是说当点在这条直线下方时,取值为0;当点在这条直线上方时,取值为1。
因此其实我们就是在寻找一条直线,将与的点分开。
事实上,这样的直线有无数条,比如当时,就可以满足上述条件。设定这样的参数后,仅当和同时为1时,信号的加权总和才会超过给定的阈值。
与非门
与非门 是 Not 与门的意思,颠倒了与门的输出,仅在两个输入均为1时输出0,其他时候输出1。用真值表表示为:
将其画在图上则为:
在讲述与门的时候提到过其实我们就是在寻找一条直线,将与的点分开。
可以用这样的组合。
或门
只要有一个输入信号是1,输出就为1。真值表表示为:
将其画在图上则表示为:
同样的,我们也寻找一条直线,将与的点分开。
可以用这样的组合。
异或门
异或门是仅当或中的一方为1时,才会输出1。用真值表表示为:
将其画在图上则为:
按照我们上述对与门、与非门、或门的思考方式,我们需要找到一条直线,将与的点分开,但是我们发现,对于异或门而言,无论如何,都找不到一条直线,能够将与的点分开。这其实就是单层感知机的局限性。
单层感知机的局限性就在于它只能表示由一条直线分割的空间,向与门、与非门、或门等这些能够由直线分割而成的空间成为线性空间,向异或门这样不能由直线分割而成的空间,只能由曲线分割而成的空间称为非线性空间。
异或门的感知机的表示
虽然单层感知机不能表示异或门,那么双层感知机能否表示异或门呢?其实是可以用双层感知机来表示异或门的。
那么对于双层感知机设定什么样的值才能制作出异或门呢?
第一层感知机
首先我们明确一下第一层感知机的作用。第一层感知机,其实是寻找两条直线,利用这两条直线,将与的点分开。也就是如图所示:
(,)=(0,1)与(,)=(1,0),在两条线之间,(,)=(0,0)在两条线下方,(,)=(1,1)在两条线上方
我们可以设置 与 这样的组合
此时感知机权重为
第二层感知机
经过第一层感知机利用两条直线,将与的点分开后,我们看一下,感知机的输入与第一层感知输出以及最终应该输出信号的情况,如表所示:
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 |
观察后可知,对于(,)=(0,0)时输出为(0,0);对于(,)=(1,1)时,输出为(1,1);而且最重要的是对于(,)=(0,1)与(,)=(1,0)时,输出均为(1,0)(他们的最终输出信号也是一样的);
因为第一层感知机的输出是第二层感知机的输入,因此第二层的感知机的输入仅剩下三个点,分别为(0,0),(1,1),(1,0)
0 | 0 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
其中(,)=(0,0)与(,)=(1,1) 的最终输出信号是一样的,(,)=(1,0) 本身属于一个输出信号。所以第二层感知机就是将这三个点进行分开。我们发现对于这三个点而言,可以找到一条直线将其分开。(这就是第一层感知机最直接的作用,经过第一层感知机后,才可以找到一条直线将不同的输出信号分开)
可以设置
因此最终异或门的权重参数为