6.2 XOR 问题
神经网络研究早期,人们便认识到:与其生物学灵感来源一样,神经网络的能力来自把多个单元组合成更大的网络。
Minsky and Papert(1969)对多层网络必要性的一个巧妙证明是:单个神经单元无法计算输入的某些极简单函数。考虑两个输入的基本逻辑函数 AND、OR 和 XOR,其真值表如下:
| AND | OR | XOR | ||||||
| x1 | x2 | y | x1 | x2 | y | x1 | x2 | y |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
这个例子最早针对感知机(perceptron)提出。感知机是非常简单的神经单元,使用阶跃函数作为非线性激活,输出 为 0 或 1:
构造计算二元输入 AND 或 OR 的感知机很容易,所需权重见图 6.4。

图 6.4 计算逻辑函数的感知机权重 和偏置 。输入为 ;偏置表示为值固定为 +1、再乘偏置权重 的特殊节点。(a)AND:;(b)OR:。这些只是无穷多组可实现相应函数的权重和偏置之一。
然而,无法构造一个感知机来计算 XOR。理解这一结果的关键是:感知机是线性分类器(linear classifier)。对二维输入 ,感知机方程 是一条直线的方程,可改写为 。该直线充当二维空间中的决策边界:一侧的所有输入输出 0,另一侧输出 1。若输入超过二维,边界会从直线变为超平面,但仍将空间分为两类。
图 6.5 展示四种可能输入(00、01、10、11),以及 AND 和 OR 分类器某组参数画出的直线。无论怎样画一条直线,都无法把 XOR 的正例(01、10)与负例(00、11)分开。因此,XOR 不是线性可分函数(linearly separable function)。曲线或其他函数可以完成划分,但单条直线不行。
6.2.1 解决方案:神经网络¶
单个感知机不能计算 XOR,但分层的感知机网络可以。下面不使用简单感知机,而按照 Goodfellow et al.(2016),用两层 ReLU 单元计算 XOR。图 6.6 中输入经过两层神经单元:中间层 有两个单元,输出层 有一个单元;图示权重和偏置能让网络正确计算 XOR。
以输入 为例。各输入乘相应权重、求和并加偏置后得到 ;应用 ReLU,隐藏层输出为 。再次乘权重、求和并加偏置(此处为 0),最终得到 0。读者可推算其余三组输入: 和 的 为 1, 和 为 0。

(a)

(b)

(c)
图 6.5 AND、OR 和 XOR 函数,横轴为 ,纵轴为 。实心圆表示输出 1,空心圆表示输出 0。不存在一条能正确分开 XOR 两类的直线。图式参考 Russell and Norvig(2002)。

图 6.6 依据 Goodfellow et al.(2016)的 XOR 解法。两层共有三个 ReLU 单元,分别为 (h 表示隐藏层)和 。箭头上的数字表示各单元权重;偏置 表示为固定值 +1 的单元所对应的权重,偏置权重和单元以灰色显示。
观察中间结果也很有启发。输入 时,隐藏向量 。图 6.7b 展示四种输入的隐藏层值。输入点 和 (XOR 输出均为 1)的隐藏表示合并为同一点 ,从而使 XOR 的正例和负例易于线性分离。换言之,可以把网络隐藏层视为形成了输入的一种新表示。
本例直接指定了图 6.6 的权重;真实任务中,神经网络权重会用第 6.6 节介绍的误差反向传播(error backpropagation)算法自动学习,隐藏层也会学习形成有用表示。神经网络能自动学习输入表示,是它的核心优势之一,后续章节将反复回到这一点。

(a)原始 空间

(b)新的、线性可分的 空间
图 6.7 隐藏层形成输入的新表示。(b)展示隐藏层表示 ,并与(a)的原始输入表示 比较。输入点 与 被合并,使 XOR 的正例和负例可以线性分离。依据 Goodfellow et al.(2016)。