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

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

文章目录

前言

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

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

文章脉络是这样的,

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

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

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

感知机

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

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

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

计算法则:

首先神经元会计算传送过来的信号 总和(w 1 x 1 + w 2 x 2 w_1x_1+w_2x_2 w 1 ​x 1 ​+w 2 ​x 2 ​),然后我们会人为的给定一个 阈值(θ \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 ={0 1 ​(w 1 ​x 1 ​+w 2 ​x 2 ​≤θ)(w 1 ​x 1 ​+w 2 ​x 2 ​>θ)​

; 简单逻辑电路

与门

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

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

将其画在图上则为:

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

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

还记得我们初中学过的直线表达式吗,a x + b y + c = 0 ax+by+c=0 a x +b y +c =0,当某一点( x 0 , y 0 ) (x_0,y_0)(x 0 ​,y 0 ​)在这条直线下方时,有a x 0 + b y 0 + c < 0 ax_0+by_0+c\lt0 a x 0 ​+b y 0 ​+c <0,当( x 0 , y 0 ) (x_0,y_0)(x 0 ​,y 0 ​)在这条直线上方时,有a x 0 + b y 0 + c > 0 ax_0+by_0+c\gt0 a x 0 ​+b y 0 ​+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 ={0 1 ​(w 1 ​x 1 ​+w 2 ​x 2 ​≤θ)(w 1 ​x 1 ​+w 2 ​x 2 ​>θ)​
将θ \theta θ移到符号左边,即当( w 1 x 1 + w 2 x 2 − θ ≤ 0 ) (w_1x_1+w_2x_2-\theta \leq 0)(w 1 ​x 1 ​+w 2 ​x 2 ​−θ≤0 )时,y y y取值为0;当( w 1 x 1 + w 2 x 2 − θ > 0 ) (w_1x_1+w_2x_2-\theta \gt 0)(w 1 ​x 1 ​+w 2 ​x 2 ​−θ>0 )时,y y y取值为1。也就是说当点( x 1 , x 2 ) (x_1,x_2)(x 1 ​,x 2 ​)在w 1 x 1 + w 2 x 2 − θ = 0 w_1x_1+w_2x_2-\theta = 0 w 1 ​x 1 ​+w 2 ​x 2 ​−θ=0这条直线下方时,y y y取值为0;当点( x 1 , x 2 ) (x_1,x_2)(x 1 ​,x 2 ​)在w 1 x 1 + w 2 x 2 − θ = 0 w_1x_1+w_2x_2-\theta = 0 w 1 ​x 1 ​+w 2 ​x 2 ​−θ=0这条直线上方时,y y y取值为1。

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

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

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

; 与非门

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

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

将其画在图上则为:

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

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

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

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

或门

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

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

将其画在图上则表示为:

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

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

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

可以用( w 1 , w 2 , θ ) = ( 1 , 1 , 0.5 ) (w_1,w_2,\theta)=(1,1,0.5)(w 1 ​,w 2 ​,θ)=(1 ,1 ,0 .5 )这样的组合。

; 异或门

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

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

将其画在图上则为:

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

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

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

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

异或门的感知机的表示

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

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

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

; 第一层感知机

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

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

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

我们可以设置( w 111 , w 121 , θ 11 ) = ( 1 , 1 , 0.5 ) (w_{111},w_{121},\theta_{11})=(1,1,0.5)(w 1 1 1 ​,w 1 2 1 ​,θ1 1 ​)=(1 ,1 ,0 .5 ) 与 ( w 112 , w 122 , θ 12 ) = ( 1 , 1 , 1.4 ) (w_{112},w_{122},\theta_{12})=(1,1,1.4)(w 1 1 2 ​,w 1 2 2 ​,θ1 2 ​)=(1 ,1 ,1 .4 )这样的组合

此时感知机权重为

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

第二层感知机

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

00000011011010111110

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

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

000101110

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

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

可以设置( w 211 , w 221 , θ 21 ) = ( 1 , − 1 , − 0.5 ) (w_{211},w_{221},\theta_{21})=(1,-1,-0.5)(w 2 1 1 ​,w 2 2 1 ​,θ2 1 ​)=(1 ,−1 ,−0 .5 ) 满足条件。

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

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

Original: https://blog.csdn.net/weixin_42626736/article/details/117906192
Author: 砂锅鱼
Title: 两层感知机解决异或(XOR)问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/614536/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球