admin 管理员组

文章数量: 1184232

两层感知机解决异或(XOR)问题

文章目录

  • 两层感知机解决异或(XOR)问题
    • 前言
    • 感知机
    • 简单逻辑电路
      • 与门
      • 与非门
      • 或门
    • 异或门
      • 异或门的感知机的表示
        • 第一层感知机
        • 第二层感知机

前言

本文的内容主要参考《深度学习入门》这本书

最近翻看《深度学习入门》一书时,对感知机解决异或问题产生了一些疑问。经过与同学的探讨,终于弄清楚了为什么两层感知机能够解决异或(XOR)问题,以及两层感知机解决异或问题时的权重应该如何设置。

文章脉络是这样的,

首先我会简单介绍什么是感知机

然后会介绍一下一些简单的逻辑电路(与门,与非门,或门),并介绍如何用感知机实现这些逻辑电路

最后我会介绍异或门,引出单层感知机的局限性,进而引出用两层感知机解决异或问题

感知机

感知机接收多个输入信号,输出一个信号。注意,感知机的信号只有(0/1)两种取值

上图是一个接收两个输入信号的感知机的例子。 x 1 x_1 x1 x 2 x_2 x2是输入信号, y y y是输出信号, w 1 w_1 w1 w 2 w_2 w2 是权重。图中的〇称为“神经元”或者“节点”。
那么接下来的一个问题是,刚刚说了感知机的信号只有两种取值(0/1),那么什么时候输出信号的取值是0,什么时候输出信号的取值是1呢

计算法则:

首先神经元会计算传送过来的信号总和( w 1 x 1 + w 2 x 2 w_1x_1+w_2x_2 w1x1+w2x2),然后我们会人为的给定一个阈值 θ \theta θ),当传送过来信号的总和大于阈值的时候,输出信号为1,反之,传送过来的信号的总和小于等于阈值的时候,输出信号的取值为0
y = { 0 ( w 1 x 1 + w 2 x 2 ≤ θ ) 1 ( w 1 x 1 + w 2 x 2 > θ ) y= \begin{cases} 0& \text{($w_1x_1+w_2x_2 \leq \theta$)}\\ 1& \text{($w_1x_1+w_2x_2 \gt \theta$)} \end{cases} y={01(w1x1+w2x2θ)(w1x1+w2x2>θ)

简单逻辑电路

与门

与门仅在两个输入均为1时输出1,其他时候输出0。用真值表表示为:

将其画在图上则为:

下面考虑用感知机来表示这个与门。需要做的就确定能满足上图真值表的 w 1 , w 2 , θ w_1,w_2,\theta w1,w2,θ的值。那么设定什么样的值才能制作出满足上图真值表的感知机呢

还记得我们初中学过的直线表达式吗, a x + b y + c = 0 ax+by+c=0 ax+by+c=0,当某一点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)在这条直线下方时,有 a x 0 + b y 0 + c < 0 ax_0+by_0+c\lt0 ax0+by0+c<0,当 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)在这条直线上方时,有 a x 0 + b y 0 + c > 0 ax_0+by_0+c\gt0 ax0+by0+c>0

回到感知机的计算法则,
y = { 0 ( w 1 x 1 + w 2 x 2 ≤ θ ) 1 ( w 1 x 1 + w 2 x 2 > θ ) y= \begin{cases} 0& \text{($w_1x_1+w_2x_2 \leq \theta$)}\\ 1& \text{($w_1x_1+w_2x_2 \gt \theta$)} \end{cases} y={01(w1x1+w2x2θ)(w1x1+w2x2>θ)
θ \theta θ移到符号左边,即当 ( w 1 x 1 + w 2 x 2 − θ ≤ 0 ) (w_1x_1+w_2x_2-\theta \leq 0) (w1x1+w2x2θ0)时, y y y取值为0;当 ( w 1 x 1 + w 2 x 2 − θ > 0 ) (w_1x_1+w_2x_2-\theta \gt 0) (w1x1+w2x2θ>0)时, y y y取值为1。也就是说当点 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) w 1 x 1 + w 2 x 2 − θ = 0 w_1x_1+w_2x_2-\theta = 0 w1x1+w2x2θ=0这条直线下方时, y y y取值为0;当点 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) w 1 x 1 + w 2 x 2 − θ = 0 w_1x_1+w_2x_2-\theta = 0 w1x1+w2x2θ=0这条直线上方时, y y y取值为1。

因此其实我们就是在寻找一条直线,将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开

事实上,这样的直线有无数条,比如当 ( w 1 , w 2 , θ ) = ( 1 , 1 , 1.4 ) (w_1,w_2,\theta)=(1,1,1.4) (w1,w2,θ)=(1,1,1.4)时,就可以满足上述条件。设定这样的参数后,仅当 x 1 x_1 x1 x 2 x_2 x2同时为1时,信号的加权总和才会超过给定的阈值 θ \theta θ

与非门

与非门 是 Not 与门的意思,颠倒了与门的输出,仅在两个输入均为1时输出0,其他时候输出1。用真值表表示为:

将其画在图上则为:

在讲述与门的时候提到过其实我们就是在寻找一条直线,将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开

可以用 ( w 1 , w 2 , θ ) = ( − 1 , − 1 , − 1.4 ) (w_1,w_2,\theta)=(-1,-1,-1.4) (w1,w2,θ)=(1,1,1.4)这样的组合。

或门

只要有一个输入信号是1,输出就为1。真值表表示为:

将其画在图上则表示为:

同样的,我们也寻找一条直线,将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开

可以用 ( w 1 , w 2 , θ ) = ( 1 , 1 , 0.5 ) (w_1,w_2,\theta)=(1,1,0.5) (w1,w2,θ)=(1,1,0.5)这样的组合。

异或门

异或门是仅当 x 1 x_1 x1 x 2 x_2 x2中的一方为1时,才会输出1。用真值表表示为:

将其画在图上则为:

按照我们上述对与门、与非门、或门的思考方式,我们需要找到一条直线,将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开,但是我们发现,对于异或门而言,无论如何,都找不到一条直线,能够将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开。这其实就是单层感知机的局限性。

单层感知机的局限性就在于它只能表示由一条直线分割的空间,向与门、与非门、或门等这些能够由直线分割而成的空间成为线性空间,向异或门这样不能由直线分割而成的空间,只能由曲线分割而成的空间称为非线性空间

异或门的感知机的表示

虽然单层感知机不能表示异或门,那么双层感知机能否表示异或门呢?其实是可以用双层感知机来表示异或门的。

那么对于双层感知机设定什么样的值才能制作出异或门呢

第一层感知机

首先我们明确一下第一层感知机的作用。第一层感知机,其实是寻找两条直线,利用这两条直线,将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开。也就是如图所示:

( x 1 x_1 x1, x 2 x_2 x2)=(0,1)与( x 1 x_1 x1, x 2 x_2 x2)=(1,0),在两条线之间,( x 1 x_1 x1, x 2 x_2 x2)=(0,0)在两条线下方,( x 1 x_1 x1, x 2 x_2 x2)=(1,1)在两条线上方

我们可以设置 ( w 111 , w 121 , θ 11 ) = ( 1 , 1 , 0.5 ) (w_{111},w_{121},\theta_{11})=(1,1,0.5) (w111,w121,θ11)=(1,1,0.5) ( w 112 , w 122 , θ 12 ) = ( 1 , 1 , 1.4 ) (w_{112},w_{122},\theta_{12})=(1,1,1.4) (w112,w122,θ12)=(1,1,1.4)这样的组合

此时感知机权重为

第二层感知机

经过第一层感知机利用两条直线,将 y = 0 y=0 y=0 y = 1 y=1 y=1的点分开后,我们看一下,感知机的输入与第一层感知输出以及最终应该输出信号的情况,如表所示:

x 1 x_1 x1 x 2 x_2 x2 s 1 s_1 s1 s 2 s_2 s2 y y y
00000
01101
10101
11110

观察后可知,对于( x 1 x_1 x1, x 2 x_2 x2)=(0,0)时输出为(0,0);对于( x 1 x_1 x1, x 2 x_2 x2)=(1,1)时,输出为(1,1);而且最重要的是对于( x 1 x_1 x1, x 2 x_2 x2)=(0,1)与( x 1 x_1 x1, x 2 x_2 x2)=(1,0)时,输出均为(1,0)(他们的最终输出信号 y y y也是一样的);

因为第一层感知机的输出是第二层感知机的输入,因此第二层的感知机的输入仅剩下三个点,分别为(0,0),(1,1),(1,0)

s 1 s_1 s1 s 2 s_2 s2 y y y
000
101
110

其中( s 1 s_1 s1, s 2 s_2 s2)=(0,0)与( s 1 s_1 s1, s 2 s_2 s2)=(1,1) 的最终输出信号 y y y是一样的,( s 1 s_1 s1, s 2 s_2 s2)=(1,0) 本身属于一个输出信号。所以第二层感知机就是将这三个点进行分开。我们发现对于这三个点而言,可以找到一条直线将其分开。(这就是第一层感知机最直接的作用,经过第一层感知机后,才可以找到一条直线将不同的输出信号分开)

可以设置 ( w 211 , w 221 , θ 21 ) = ( 1 , − 1 , − 0.5 ) (w_{211},w_{221},\theta_{21})=(1,-1,-0.5) (w211,w221,θ21)=(1,1,0.5) 满足条件。

因此最终异或门的权重参数为

本文标签: 两层 XOR