两层感知机解决异或(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+b