2.1.5 对隐藏单元的要求

尽管像AND和OR之类的函数可以用简单的两层神经网络来实现,但许多其他函数的实现则没有这么简单。例如,上述网络无法表示异或(XOR)函数:当且仅当一个输入为true时,输出才为true(你可以吃蛋糕或冰淇淋,但不可以两者都吃)。

像逻辑AND和逻辑OR之类的简单函数被认为是线性可分的,如图2.6所示,我们可以用一条直线将输出为true和false的情况分隔开。

024-2

图2.6 逻辑函数OR和AND的图示。坐标轴对应两个输入单元的值,每个输入都可以被视为该空间中的一个点,标签true和false表示不同样本输入对应的输出,斜线表示一种可以将输出为true和false的情况线性分隔的方法

但是,如图2.7所示,在XOR对应的映射关系中,无法用一条直线将true与false的情况分隔,这说明我们面对的问题并不是线性可分的。事实上,在这种情况下,无论将权重设置为多少都没有用。我们没有办法在上述的简单网络中实现诸如XOR之类的函数(Minsky & Papert,1969)。

025-1

图2.7 XOR函数。没有直线可以将输出为true和false的情况分隔开

正如Minsky和Papert(1988)所指出的,我们可以用一种不太令人满意的方式来解决这个问题,方法是在试图表示的函数中构建输入节点。同样,我们可以以求解的方式自定义输出函数。例如,如果将两个输入都连接到权重为1的输出,则可以规定仅当其输入的加权和刚好等于1时,输出节点才会打开。但是这种激活函数(因为先上升后下降而被称为非单调函数)本质上是将XOR内置到输出函数中,几乎没有研究者对于这种XOR的解释感到满意。

不过,还有另一种方法可以表示非线性可分的函数,而不依赖于特定的输入编码方案或输出激活函数。假设我们仍然将激活的阈值设置为1,同样很容易在网络中表示XOR——只需合并隐藏单元即可。图2.8展示了一种使用两个隐藏单元的模型[2],表2.1给出了输入的值、隐藏单元的值以及输出单元的值。实际上,我们将h1和h2这两个隐藏单元称为计算的中间状态:输出=(h1×-1.0)+(h2×1.0),其中h1=((0.5×输入1)+(0.5×输入2)),h2=((1.0×输入1)+(1.0×输入2))。

026-1

图2.8 表示XOR的网络。所有单元只有在其输入的加权和大于或等于1时才会打开。实线表示正激活,虚线表示负激活

表2.1 XOR网络中各单元的活性值(参见图2.8)

026-2

在我们的简单示例中,隐藏单元的含义很容易理解。例如,我们可以将隐藏单元h1理解为输入1和输入2的逻辑AND运算结果,将h2理解为输入1和输入2的逻辑OR运算结果(输出单元为两个输入的OR减去AND的值)。

在更复杂的模型中,给定隐藏节点的计算结果可能是透明的。在输入为单词的模型中,一个隐藏的单元可能与输入的名词单词紧密相连,而另一个可能与输入的动词单词紧密相连。在其他情况下,给定隐藏节点的计算可能不够透明,但重要的是,所有隐藏单元所做的都是将其激活函数应用于输入的加权和:与网络的第一层类似,加权和为所有输入与对应权重的乘积的和。

有时,隐藏单元被认为是对输入进行重新编码的过程。例如,在图2.8的网络模型中,一个隐藏单元通过逻辑AND运算对原始输入进行重新编码,另一个隐藏单元通过逻辑OR运算对原始输入进行重新编码。从这个意义上讲,隐藏单元的确充当了输入经过重新编码后的表示内部表示。由于输出节点通常仅由隐藏单元计算得出,因此这些内部表示形式非常重要。例如,在XOR模型中,输出单元通过组合隐藏单元产生的AND和OR而不是直接组合原始输入来完成运算并输出结果。因为隐藏节点的作用方式取决于它们与输入节点的连接方式,所以有时可以通过了解其隐藏单元的功能来了解给定网络是如何解决特定问题的。