原理

输出单元

代价函数的选择与输出单元的选择密切相关。大多数时候,我们简单地使用数据分布和模型分布间的交叉熵。选择如何表示输出决定了交叉熵函数的形式。

任何可用作输出的神经网络单元,也可以被用作隐藏单元。这里,我们着重讨论将这些单元用作模型输出时的情况,不过原则上它们也可以在内部使用。

我们假设前馈网络提供了一组定义为\(h=f(x;\theta)\)的隐藏特征。输出层的作用是随后对这些特征进行一些额外的变换来完成整个网络必须完成的任务。

用于高斯输出分布的线性单元

一种简单的输出单元是基于仿射变换的输出单元,仿射变换不具有非线性。这些单元往往被直接称为线性单元。

给定特征h,线性输出单元层产生一个向量\(\hat{y} = W^T h +b\)

线性输出层经常被用来产生条件高斯分布的均值:

\[p(y \mid x) = N(y; \hat{y}, I)\]

最大化其对数似然此时等价于最小化均方误差。

最大似然框架也使得学习高斯分布的协方差矩阵更加容易,或更容易地使高斯分布的协方差矩阵作为输入的函数。然而,对于所有输入,协方差矩阵都必须被限定成一个正定矩阵。线性输出层很难满足这种限定,所以通常使用其他的输出单元来对协方差参数化。

因为线性模型不会饱和,所以它们易于采用基于梯度的优化算法,甚至可以使用其他多种优化算法

用于Bernoulli输出分布的sigmoid单元

许多任务需要预测二值型变量y的值。具有两个类的分类问题可以归结为这种形式。

此时最大似然的方法是定义y在x条件下的Bernoulli分布。

Bernoulli分布仅需单个参数来定义。神经网络只需预测\(P(y=1 \mid x)\)即可。为了使这个数是有效的概率,它必须处在区间[0,1]中。

为了满足该约束条件需要一些细致的设计工作。假设我们打算使用线性单元,并且通过阈值来限制它成为一个有效的概率:

\[P(y=1 \mid x) = max{0, min{1, w^Th +b}}\]

这的确定义了一个有效的条件概率分布,但我们无法使用梯度下降来高效地训练它。当\(w^Th +b\)处于单位区间外时,模型的输出对于其参数的梯度都将为0。梯度为0通常是有问题的,因为学习算法对于如何改善相应的参数不再具有指导意义。

相反,最好是使用一种新的方法来保证无论何时模型给出了错误的答案时,总能有一个较大的梯度。这种方法是基于使用sigmoid输出单元结合最大似然来实现的。

sigmoid输出单元定义为

\[\hat{y} = \sigma(w^T h +b)\]

这里\(\sigma\)是logistic sigmoid函数。

我们可以认为sigmoid输出单元具有两个部分。首先,它使用一个线性层来计算\(z=w^T h + b\)。接着,它使用sigmoid激活函数将z转化成概率。

最大似然几乎总是训练sigmoid输出单元的优选方法。当我们使用其他的损失函数,例如均方误差之类的,损失函数就会在\(\sigma(z)\)饱和时饱和。sigmoid激活函数在z取非常小的负值时会饱和到0,当z取非常大的正值时会饱和到1。这种情况一旦发生,梯度会变得非常小以至于不能用来学习,无论此时模型给出的是正确还是错误的答案。

用于Multinoulli输出分布的softmax单元

任何时候当我们想要表示一个具有n个可能取值的离散型随机变量的分布时,我们都可以使用softmax函数。它可以看作是sigmoid函数的扩展,其中sigmoid函数用来表示二值型变量的分布。

softmax函数最常用作分类器的输出,来表示n个不同类上的概率分布。比较少见的是,softmax函数可以在模型内部使用,例如如果我们想要在某个内部变量的n个不同选项中进行选择。

在二值型变量的情况下,我们希望计算一个单独的数

\[\hat{y} = P(y=1 \mid x)\]

因为这个数需要处在0和1之间,并且我们想要让这个数的对数可以很好地用于对数似然的基于梯度的优化,我们选择去预测另外一个数 \(z= log \hat{P}(y=1 \mid x)\)。对其指数化和归一化,我们就得到了一个由sigmoid函数控制的Bernoulli分布。

为了推广到具有n个值的离散型变量的情况,我们现在需要创造一个向量\(\hat{y}\),它的每个元素是\(\hat{y}_i = P(y=i \mid x)\)。我们不仅要求每个\(\hat{y}_i\)元素介于0和1之间,还要使得整个向量的和为1,使得它表示一个有效的概率分布。用于Bernoulli分布的方法同样可以推广到Multinoulli分布。首先,线性层预测了未归一化的对数概率:

\[z=W^T h +b\]

其中\(z_i = log \hat{P} (y=1 \mid x)\)。softmax函数然后可以对z指数化和归一化来获得需要的\(\hat{y}\)。最终,softmax函数的形式为

\[softmax(z)_i = \frac{exp(z_i)}{\sum_j exp(z_j)}\]

其他的输出类型

之前描述的线性、sigmoid和softmax输出单元是最常见的。神经网络可以推广到我们希望的几乎任何种类的输出层。最大似然原则给如何为几乎任何种类的输出层设计一个好的代价函数提供了指导。

一般的,如果我们定义了一个条件分布\(p(y \mid x; \theta)\),最大似然原则建议我们使用\(-log p(y \mid x; \theta)\)作为代价函数。

一般来说,我们可以认为神经网络表示函数\(f(x; \theta)\)。这个函数的输出不是对y值的直接预测。相反,\(f(x; \theta) = \omega\) 提供了y分布的参数。我们的损失函数就可以表示成\(-log p(y; \omega (x))\)