神经网络设计与实现
上QQ阅读APP看书,第一时间看更新

2.3 前馈神经网络

感知器算法的主要缺点之一是它只能捕获线性关系。举个例子,逻辑异或(XOR)就是一个它无法解决的简单任务。这是一个非常简单的函数,其中只有当两个二进制输入互不相同时,其输出才为真(True)。可以用下表来描述。

上表也可以用图2-5表示。

在XOR问题中,无法找到能正确地将预测空间一分为二的线。

我们无法使用线性函数来分离此问题,因此不能在这个问题上使用之前学的感知器。在之前的示例中,决策边界是一条线。那么可以很容易注意到,在本例中,只需两条线,我们就能对输入进行分类(如图2-6所示)。

图2-5 将XOR问题可视化

图2-6 可以用两个不同的线性函数分隔空间

但是现在,我们遇到了一个问题:如果将先前的感知器的输出馈入另一个感知器,我们仍将只有输入的线性组合,因此这种方式将无法添加任何非线性。

你可以轻松地看到,如果添加的非线性越来越多,将能够以更复杂的方式分隔空间。这就是我们想要通过多层神经网络(Multilayer Neural Network)实现的目标。

引入非线性的另一种方法是更改激活函数。如前所述,阶跃函数只是我们的选择之一,还可以选择非线性的函数,例如修正线性单元(Rectified Linear Unit,ReLU)和S形函数(Sigmoid)。通过这种方式,我们可以计算连续的输出,并将更多的神经元组合成可划分解空间的东西。

这个直观的概念在数学上用万能近似定理表述:使用仅包含一个隐藏层的多层感知器就可以逼近任意连续函数。隐藏层是输入层和输出层之间的神经元层。对于很多激活函数(例如ReLU和sigmoid),此结果都是成立的。

多层神经网络是前馈神经网络(Feedforward Neural Network,FFNN)的一个特例,FFNN是只有从输入到输出一个方向的网络。

主要区别之一是如何训练FFNN。最常见的方法是通过反向传播。