上一期介绍了单层感知机,这一期先分析单层感知机的局限性,并由此引入多层感知机。
单层感知机的局限性
感知机有很多应用场景,其中一个应用就是用感知机来表示逻辑电路。单层感知机可以用来表示简单的逻辑电路,例如与门、与非门、或门,但是单层感知机无法表示异或门。下面来分析一下原因。
首先来回顾单层感知机用于表示逻辑电路时的公式形式:
也就是说,可以把单层感知机看作是一条由参数
(
b
,
w
1
,
w
2
)
(b, w_1, w_2)
(b,w1,w2)确定的直线,在直线的一侧,输出为
0
0
0,在直线的另一侧,输出为
1
1
1。以或门为例,取参数
(
b
,
w
1
,
w
2
)
=
(
−
0.5
,
1.0
,
1.0
)
(b, w_1, w_2) = (-0.5, 1.0, 1.0)
(b,w1,w2)=(−0.5,1.0,1.0),就可以满足或门的真值表,即,表示或门的感知机可以用下面的公式表示:
根据上式,可以得到下面的图形:
即,当输入
(
x
1
,
x
2
)
=
(
0
,
0
)
(x_1, x_2) =(0, 0)
(x1,x2)=(0,0)时,或门的输出为
0
0
0,在图中用
◯
\bigcirc
◯来表示;当输入
(
x
1
,
x
2
)
=
(
0
,
1
)
(x_1, x_2) =(0, 1)
(x1,x2)=(0,1)或
(
1
,
0
)
(1, 0)
(1,0)或
(
1
,
1
)
(1, 1)
(1,1)时,或门的输出为
1
1
1,在图中用
△
\bigtriangleup
△来表示。灰色区域表示该单层感知机输出为0的区域,白色区域表示输出为1的区域。
从图中可以看出,用一条直线就可以将
◯
\bigcirc
◯和
△
\bigtriangleup
△在二维空间中分开。也就是说,对于或门,我们可以找到这样一组参数,形成这样一条直线。
这里是以或门为例,与门及与非门也都可以用这样的
◯
\bigcirc
◯和
△
\bigtriangleup
△在二维空间中表示,同样也可以用一条直线划分开。
再来看看异或门,根据异或门的真值表,可以得到下面的图形:
即,当输入
(
x
1
,
x
2
)
=
(
0
,
0
)
(x_1, x_2) =(0, 0)
(x1,x2)=(0,0)或
(
1
,
1
)
(1, 1)
(1,1)时,或门的输出为
0
0
0,在图中用
◯
\bigcirc
◯来表示;当输入
(
x
1
,
x
2
)
=
(
0
,
1
)
(x_1, x_2) =(0, 1)
(x1,x2)=(0,1)或
(
1
,
0
)
(1, 0)
(1,0)时,或门的输出为
1
1
1,在图中用
△
\bigtriangleup
△来表示。
从图中可以看出,无法找到这样一条直线将 ◯ \bigcirc ◯和 △ \bigtriangleup △分开。也就是说,对于异或门,我们无法用单层感知机来表示异或门,单层感知机无法表示上图这样的曲线。
总结一下:感知机的局限性就在于它只能表示由一条直线分割的空间。
多层感知机
既然单层感知机无法表示异或门,那么我们就尝试增加感知机的层数,用多层感知机来表示。
在解决这个问题的时候,书中的思路不是直接从感知机入手,而是考虑如何用已知的、可以用单层感知机表示的门电路,组合来表示异或门。
首先,用以下符号来表示与门、与非门、或门:
然后就可以通过以下的组合来表示异或门:
可以验证这个组合满足异或门的真值表:
在这个组合电路中,我们将输入
(
x
1
,
x
2
)
(x_1, x_2)
(x1,x2),中间结果
(
s
1
,
s
2
)
(s_1, s_2)
(s1,s2)以及输出
y
y
y都用神经元来表示,并分到不同的层中,这样就可以用下图的多层感知机来表示异或门:
这个多层感知机可以描述为:
- 第0层的两个神经元接收输入信号,并将信号发送至第1层的神经元。
- 第1层的神经元将信号发送至第2层的神经元,第2层的神经元输出 y y y。
至于这个感知机是2层的还是3层的,取决于以何种标准来分层。
- 按拥有权重的层(第0层和第1层之间,第1层和第2层之间)来划分,是2层感知机
- 按神经元的层数(第0层、第1层、第2层)来划分,是3层感知机
在描述层数时,只要根据上下文,统一标准,不造成误解即可。
到此,单层感知机无法表示的东西,通过增加一层就可以解决。
更多内容请参见第4期视频:
《深度学习入门》第4期-多层感知机-码农解书
也可以通过今日头条或者好看视频进行观看(好看视频对视频压缩得有些过分了,清晰度受到影响,B站和今日头条上基本无损)。
欢迎大家留言关注,多提意见,谢谢!