@[toc]
多层感知机 multilayer perceptron
线性模型可能出错
线性模型的单调性并不是所有现实例子都满足的,相反,许多例子都违反了单调性的条件。
在网络中加入隐藏层
我们可以通过在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。要做到这一点,最简单的方法是将许多全连接层堆叠在一起。每一层都输出到上面的层,直到生成最后的输出。我们可以把前层看作表示,把最后一层看作线性预测器。这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。
这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算;因此,这个多层感知机中的层数为2。注意,这两个层都是全连接的。每个输入都会影响隐藏层中的每个神经元,而隐藏层中的每个神经元又会影响输出层中的每个神经元。
然而,具有全连接层的多层感知机的参数开销可能会高得令人望而却步, 即使在不改变输入或输出大小的情况下,也可能促使在参数节约和模型有效性之间进行权衡。
从线性到非线性
跟之前的章节一样,我们通过矩阵来表示n个样本的小批量,其中每个样本具有d个输入(特征)。对于具有h个隐藏单元的单隐藏层多层感知机,用表示隐藏层的输出,称为隐藏表示(hidden representations)。在数学或代码中,H也被称为隐藏层变量(hidden-layer variable)或隐藏变量(hidden variable)。 因为隐藏层和输出层都是全连接的,所以我们具有隐藏层权重和隐藏层偏置以及输出层权重和输出层偏置。形式上,我们按如下方式计算单隐藏层多层感知机的输出:
对于任意权重值,我们只需合并隐藏层,便可产生具有参数和的等价单层模型:
为了发挥多层结构的潜力,我们还需要一个额外的关键要素:在仿射变换之后对每个隐藏单元应用非线性的激活函数(activation function)σ。激活函数的输出(例如,σ(⋅))被称为激活值(activations)。一般来说,有了激活函数,就不可能再将我们的多层感知机退化成线性模型:
我们应用于隐藏层的激活函数通常不仅仅是按行的,而且也是按元素。这意味着在计算每一层的线性部分之后,我们可以计算每个激活值,而不需要查看其他隐藏单元所取的值。对于大多数激活函数都是这样。
为了构建更通用的多层感知机,我们可以继续堆叠这样的隐藏层,,一层叠一层,从而产生更有表达能力的模型。