关于神经网络的讨论

1. 引言,从维数灾难问题说起

我们在之前的文章讨论了由固定基函数的线性组合构成的回归模型分类模型。我们看到,这些模型具有一些有用的分析性质和计算性质,但是它们的实际应用被维数灾难问题(curse of dimensionality)限制了。

为了将这些模型应用于大规模的问题,有必要根据数据调节基函数。

接下来思考问题的点在于,基于什么样的方式和策略来调节基函数呢?

支持向量机是这样解决这个问题的:

选择固定基函数集合的一个子集,它首先定义以训练数据点为中心的基函数,然后在训练过程中选择一个子集

支持向量机的一个优点是,虽然训练阶段涉及到非线性优化,但是目标函数是凸函数,因此最优问题的解相对很直接。最终模型中基函数的数量通常远小于训练数据点的数量,虽然通常相对来说仍然很大,并且通常随着数据规模的增加而增多。

神经网络的策略是另一种思路:

事先固定基函数的数量,但是允许基函数可调节。换句话说,就是使用参数形式的基函数,这些参数可以在训练阶段调节

在模式识别中,这种类型的最成功的模型是前馈神经网络,也被称为多层感知器(multilayer perceptron),我们将在本文重点讨论。

实际上,“多层感知器”是一个相当不精确的命名,因为模型是由多层logistic回归模型(带有连续的非线性性质)组成,而不是由多层感知器(带有非连续的非线性性质)组成。这里为了保持学术称呼的一致性,我们继续沿用”多层感知机“这个名字。

对于许多应用来说,与具有同样泛化能力的支持向量机相比,多层感知机最终的模型会相当简洁,因此计算的速度更快。这种简洁性带来的代价就是,与相关向量机一样,构成了网络训练根基的似然函数不再是模型参数的凸函数。 然而,在实际应用中,考察模型在训练阶段消耗的计算资源是很有价值的,这样做会得到一个简洁的模型,它可以快速地处理新数据。

Relevant Link:

https://www.cnblogs.com/LittleHann/p/6629069.html

 

2. 前馈神经网络

0x1:前馈神经网络理论前身 -- 基函数线性组合

回归的线性模型和分类的线性模型在之前的博客中已经讨论过了。它们基于固定非线性基函数φj(x)的线性组合,形式为:

其中f(·)在分类问题中是一个非线性激活函数,在回归问题中为恒等函数。

我们的目标是推广这个模型,使得基函数φj(x)依赖于参数,从而能够让这些参数以及系数{wj}能够在训练阶段调节。

神经网络使用与上式形式相同的基函数,即每个基函数本身是输入的线性组合的非线性函数,其中线性组合的系数是可调节参数。神经网络并不是凭空出现的一个理论,而是在此前基函数线性组合理论的基础上发展而来的新理论。

0x2:神经网络的基本结构 -- 多层结构

上一小节的讨论,引出了基本的神经网络,它可以被描述为一系列的函数变换。

首先,我们构造输入变量x1, . . . , xD的M个线性组合,形式为:

其中j = 1, . . . , M,且上标(1)表示对应的参数是神经网络的第一“层”。

我们把参数wji(1)称为权(weight),把参数wj0(1)称为偏置(bias),aj被称为激活(activation)

每个激活都使用一个可微的非线性激活函数(activation function)h(·)进行变换,可得:

这些量对应于基函数的输出,这些基函数在神经网络中被称为隐含单元(hidden unit)

非线性函数h(·)通常被选为S形的函数(例如logistic sigmoid函数、或者双曲正切函数),这些值再次线性组合,得到本层输出单元激活(output unit activation)

其中k=1,...,K,且K是输出的总数量,这个变换对应于神经网络的第二层,并且与之前一样wk0(2)是偏置参数。

最后,使用一个恰当的激活函数对输出单元激活进行变换,得到神经网络的一组输出yk

激活函数的选择由数据本身以及目标变量的假定的分布确定,因此对于标准的回归问题,激活函数是恒等函数,从而yk = ak。类似地,对于多个二元分类问题,每个输出单元激活使用logistic sigmoid函数进行变换,即:

我们可以将各个阶段结合,得到整体的网络函数。对于sigmoid输出单元激活函数,整体的网络函数为:

其中所有权参数和偏置参数被聚集到一起,记作向量w。因此神经网络模型可以简单地看成一个从输入变量{xi}到输出变量{yk}的非线性函数,并且由可调节参数向量w控制。 

这个函数可以被表示成下图所示的网络图的形式。

两层神经网络的网络图。输入变量、隐含变量、输出变量都表示为结点,权参数被表示为结点之间的链接,其中偏置参数被表示为来自额外的输入变量x0和隐含变量z0的链接。箭头表示信息流在网络中进行前向传播的方向 

这样,计算上面神经网络整体公式的过程可以看做信息通过网络的前向传播(forward propagation)

我们可以类似地把第二层的偏置整合到第二层的权参数中,从而整体的网络函数为:

正如上图所示的2层神经网络模型,它由两个处理阶段组成,每个阶段都类似于感知器模型,因此神经网络也被称为多层感知器(multilayer perceptron),或者MLP

然而,与感知器模型相比,一个重要的区别是神经网络在隐含单元中使用连续的sigmoid非线性函数,而感知器使用阶梯函数这一非线性函数。这意味着神经网络函数关于神经网络参数是可微的,这个性质在神经网络的训练过程中起着重要的作用。 

需要注意的是,如果网络中的所有隐含单元的激活函数都取线性函数,那么对于任何这种网络,我们总可以找到一个等价的无隐含单元的网络。这是由于连续的线性变换的组合本身是一个线性变换

然而,如果隐含单元的数量小于输入单元的数量或者小于输出单元的数量,那么网络能够产生的变换不是最一般的从输入到输出的线性变换,因为在隐含单元出的维度降低造成了信息丢失。  

由于在网络图和它的数学函数表达式之间有一个直接的对应关系,因此我们可以通过考虑更复杂的网络图来构造更一般的网络映射。然而,这些网络必须被限制为前馈(feed-forward)结构,换句话说,网络中不能存在有向圈,从而确保了输出是输入的确定函数。

下图用一个简单的例子说明了这一点。

这样的网络中每个(隐含或者输出)单元都计算了一个下面的函数:

其中,求和的对象是所有向单元k发送链接的单元(偏置参数也包含在了求和式当中)。对于一组给定的值作用在神经网络的输入上,不断应用上式使得网络中所有单元(包括输出单元)的激活都能够被计算出来。 

前馈网络的近似性质被广泛研究,这些性质被发现相当通用。因此神经网络被称为通用近似(universal approximator)

例如,一个带有线性输出的两层网络可以在任意精度下近似任何输入变量较少的连续函数,只要隐含单元的数量足够多。这个结果对于一大类隐含单元激活函数都成立,但是不包括多项式函数。

下图说明了两层网络建模一大类函数的能力。这个图也说明了独立的隐含单元是如何联合地近似最终的函数的。

多层感知器的能力说明,它用来近似四个不同的函数。(a)f(x) = x2,(b)f(x) = sin(x), (c)f(x) = |x|,(d)f(x) = H(x),其中H(x)是一个硬阶梯函数。在每种情况下,N = 50个数据点(用蓝点表示)从区间(−1, 1)中均匀分布的x中进行取样,然后计算出对应的f (x)值。这些数据点之后用来训练一 个具有3个隐含单元的两层神经网络,隐含单元的激活函数为tanh函数,输出为线性输出单元。生成的网络函数使用红色曲线表示,三个隐含单元的输出用三条虚线表示。 

下图进一步说明了在一个简单的分类问题中,隐含单元的作用。 

简单的二分类问题的例子,数据集是人工生成的数据。模型为神经网络,网络具有两个输入结点,两个带有tanh激活函数的隐含单元,以及带有logistic sigmoid激活函数的一个输出单元。蓝色虚线表示每个隐含单元的z = 0.5的轮廓线,红线表示整个网络的y = 0.5的决策面。为了对比,绿线表示根据生成数据的概率分布计算出的最优的决策边界。  

0x3:权空间对称性

前馈神经网络的一个重要性质是:

对于多个不同的权向量w的选择,网络可能产生同样的从输入到输出的映射函数。

考虑下图中的两层网络,

网络有M个隐含结点,激活函数是双曲正切函数,且两层之间完全链接。

如果我们把作用于某个特定的隐含单元的所有的权值以及偏置全部变换符号,那么对于给定的输入模式,隐含单元的激活的符号也会改变。这是因为双曲正切函数是一个奇函数, 即tanh(−a) = − tanh(a)。

这种变换可以通过改变所有从这个隐含单元到输出单元的权值的符号的方式进行精确补偿(即再次反转回来)。

因此,通过改变特定一组权值(以及偏置)的符号,网络表示的输入-输出映射函数不会改变,因此我们已经找到了两个不同的权向量产生同样的映射函数。

对于M个隐含单元,会有M个这样的“符号改变”对称性,因此任何给定的权向量都是2M个等价的权向量中的一个。

类似地,假设我们将与某个特定的隐含结点相关联的所有输入和输出的权值(和偏置)都变为与不同的隐含结点相关联的对应的权值(和偏置),即进行了一个内部交换。与之前一样,这显然使得网络的输入-输出映射不变,但是对应了一个不同的权向量。

对于M个隐含结点,任何给定的权向量都属于这种交换对称性产生的 M! 个等价的权向量中的一个,它对应于 M! 个不同的隐含单元的顺序

于是,网络有一个整体的权空间对称性因子 M! * 2M。对于多于两层的网络,对称性的总数等于这些因子的乘积,每层隐含单元都有一个这样的因子

可以证明,对于权空间中的各种类型的对称性,这些因子都存在(除了由于权值的具体选择导致的偶然的对称性)。

此外,对称性的存在不仅是双曲正切函数的特有性质,而是对一大类的激活函数都存在的性质。但是在许多情况下,权空间的这种对称性几乎没有实际用处。

  

3. 网络训练

目前为止,我们把神经网络看成从输入变量x到输出变量y的参数化非线性函数中的一大类。前第一章也说到,解决维度灾难问题的策略之一就是”事先固定基函数的数量,但是允许基函数可调节“。

所以这一章,我们就来讨论如何确定神经网络参数的问题。

0x1:回归模型的网络参数训练

对于回归任务,确定网络参数的一个简单的方法类似于多项式曲线拟合问题,因此我们需要最小化平方和误差函数。

给定一个由输入向量{xn}(n = 1, . . . , N)组成的训练集,以及一个对应的目标向量tn组成的集合,我们要最小化误差函数:

然而,通过给网络的输出提供一个概率形式的表示,我们可以获得对于神经网络训练的一个更加一般的观点。这里,关于概率的讨论会让我们理解选择输出单元非线性函数以及选择误差函数的动机。 

现在我们只考虑一元目标变量t的情形,其中t可以取任何实数值。我们假定t服从高斯分布,均值与x相关,由神经网络的输出确定,即:

对于由上式给出的条件分布,将输出单元激活函数取成恒等函数就足够了,因为这样的网络可以近似任何从x到y的连续函数。

给定一个由N个独立同分布的观测组成的数据集X = {x1,...,xN},以及对应的目标值t = {t1, . . . , tN},我们可以构造对应的似然函数:

根据最大似然估计原则,取负对数,我们就得到了误差函数:

这可以用来学习参数w和β。 

需要注意的是,在实际应用中,神经网络函数y(xn, w)的非线性的性质导致误差函数E(w)不是凸函数,因此在实际应用中可能寻找的是似然函数的局部最大值,对应于误差函数的局部最小值。 

0x2:分类模型的网络参数训练

二分类问题中,我们有一个单一目标变量t,且t = 1表示类别C1,t = 0表示类别C2

我们考虑一个具有单一输出的网络,它的激活函数是logistic sigmoid函数:

从而0 ≤ y(x,w) ≤ 1。我们可以把y(x,w)表示为条件概率p(C1 | x),此时p(C2 | x)为1 − y(x, w)。

如果给定了输入,那么目标变量的条件概率分布是一个伯努利分布,形式为:

如果我们考虑一个由独立的观测组成的训练集,那么由负对数似然函数给出的误差函数就是一个交叉熵(cross-entropy)误差函数,形式为 

其中yn表示y(xn, w)。注意,没有与噪声精度β相类似的东西,因为我们假定目标值的标记都正确。然而,模型很容易扩展到能够接受标记错误的情形。

如果我们有K个相互独立的二元分类问题(K分类问题),那么我们可以使用具有K个输出的神经网络,每个输出都有一个logistic sigmoid激活函数。与每个输出相关联的是一个二元类别标签tk ∈{0,1},其中k=1,...,K。如果我们假定类别标签是独立的,那么给定输入向量,目标向量的条件概率分布为:

取似然函数的负对数,可以得到下面的误差函数:

其中ynk表示yk(xn, w)。 

0x3:神经网络的权向量共享特性

我们可以对比一下神经网络解和线性分类模型给出的解,从而发现一些有趣的事情。

假设我们使用下图所示的标准的两层神经网络。

我们看到,网络第一层的权向量由各个输出所共享,而在线性模型中每个分类问题是独立地解决的。

神经网络的第一层可以被看做进行了一个非线性的特征抽取,而不同的输出之间共享特征可以节省计算量,同时也提升了泛化能力。 

笔者总结

总而言之,根据解决的问题的类型,关于输出单元激活函数和对应的误差函数,都存在一个自然的选择。

  • 对于回归问题,我们使用线性输出和平方和误差函数
  • 对于(多类独立的)二元分类问题,我们使用logistic sigmoid输出以及交叉熵误差函数
  • 对于多类分类问题,我们使用softmax输出以及对应的多分类交叉熵错误函数。
  • 对于涉及到两类的分类问题,我们可以使用单一的logistic sigmoid输出,也可以使用神经网络,这个神经网络有两个输出,且输出激活函数为softmax函数。 

0x4:参数最优化

我们下面考虑寻找能够使得选定的误差函数E(w)达到最小值的权向量w。

现在,考虑误差函数的几何表示是很有用的。我们可以把误差函数看成位于权空间的一个曲面,如下图所示。

误差函数E(w)的几何表示,其中,误差函数被表示为权空间上的一个曲面。点wA是一个局部最小值,点wB是全局最小值。在任一点wC处,误差函数的局部梯度由向量∇E(w)给出

首先注意到,如果我们在权空间中走一小步,从w走到w + δw,那么误差函数的改变为δE ≃ δwT∇E(w),其中向量∇E(w)在误差函数增加速度最大的方向上。

由于误差E(w)是w的光滑连续函数,因此它的最小值出现在权空间中误差函数梯度等于零的位置上, 即

梯度为零的点被称为驻点,它可以进一步地被分为极小值点、极大值点和鞍点。 

我们的目标是寻找一个向量w使得E(w)取得最小值。然而,误差函数通常与权值和偏置参数的关系是高度非线性的,因此权值空间中会有很多梯度为零(或者梯度非常小)的点

实际上,根据上一节的讨论,我们看到,对于任意一个局部极小值点w,在权空间中都存在等价的其他极小值点。例如,在两层神经网络中,有M个隐含单元,权空间中的每个点都是 M! * 2M 个等价点中的一个。 

由于显然无法找到方程∇E(w) = 0的解析解,因此我们使用迭代的数值方法。连续非线性函数的最优化问题是一个被广泛研究的问题,有相当多的文献讨论如何高效地解决。大多数方法涉及到为权向量选择某个初始值w0,然后在权空间中进行一系列微移动,形式为:

其中τ 表示迭代次数。不同的算法涉及到权向量更新∆w(τ)的不同选择。许多算法使用梯度信息,因此就需要在每次更新之后计算在新的权向量w(τ +1)处的∆E(w)的值。

梯度方法基本上是目前主流的深度学习参数优化方法,但它并不是唯一的方法,这一点要注意。我们本章重点讨论梯度方法。

0x5:局部二次近似 

为了理解梯度信息的重要性,有必要考虑误差函数基于泰勒展开的局部近似。通过讨论误差函数的局部二次近似,我们可以更深刻地认识最优化问题,以及各种解决最优化问题的方法。

考虑E(w)在权空间某点处w^的泰勒展开:

其中立方项和更高阶的项已经被省略掉了。这里,b被定义为E的梯度在w^处的值。 

Hessian矩阵H = ∇∇E的元素为:

梯度的局部近似为:

对于距离点w^充分近的点w,这些表达式能够对误差函数和它的梯度给出合理的近似。 

0x6:使用梯度信息的好处

正如我们将在后面的章节看到的那样,可以使用误差反向传播的方法高效地计算误差函数的梯度。这个梯度信息的使用可以大幅度加快找到极小值点的速度。原因如下所述。

在公式

给出的误差函数的二次近似中,误差曲面由b和H确定,它包含了总共 W(W+3)/2 个独立的元素(因为矩阵H是对称的),其中W是w的维度(即网络中可调节参数的总数)。

这个二次近似的极小值点的位置因此依赖于O(W2)个参数,并且我们不应该奢求能够在收集到O(W2)条独立的信息之前就能够找到最小值。

如果我们不使用梯度信息,我们不得不进行O(W2)次函数求值,每次求值都需要O(W)个步骤。因此,使用这种方法求最小值需要的计算复杂度为O(W3)。

现在将这种方法与使用梯度信息的方法进行对比。由于每次计算∇E都会带来W条信息,因此我们可能预计找到函数的极小值需要计算O(W)次梯度。正如我们将要看到的那样,通过使用误差反向传播算法,每个这样的计算只需要O(W)步,因此使用这种方法可以在O(W2)个步骤内找到极小值。

因此,使用梯度信息构成了训练神经网络的实际算法的基础。  

0x7:梯度下降最优化

最简单的使用梯度信息的方法是,将权值更新方式选择为下面的形式,即每次权值更新都是在负梯度方向上的一次小的移动,即:

其中参数η > 0被称为学习率(learning rate)。在每次更新之后,梯度会使用新的权值向量重新计算,然后这个过程重复下去。

在每一步,权值向量都会沿着误差函数下降速度最快的方向移动, 因此这种方法被称为梯度下降法(gradient descent)或者最陡峭下降法(steepest descent)

注意,误差函数是关于训练集定义的,因此为了计算∇E ,每一步都需要处理整个数据集。虽然这种方法在直觉上看比较合理,但是实际上可以证明它是一个很差的算法,因为每次都需要处理整个训练集,同时进行反向传播,其计算开销十分巨大。

笔者插入

对于批量最优化方法,存在更高效的方法,例如共轭梯度法(conjugate gradient)或者拟牛顿法(quasi-Newton)。与简单的梯度下降方法相比,这些方法更鲁棒,更快。与梯度下降方法不同,这些算法具有这样的性质:误差函数在每次迭代时总是减小的,除非权向量到达了局部的或者全局的最小值。 

前面说过,对于一个神经网络来说,每一个权值向量,都存在与之等价的 M! * 2M 个等价权重向量。 因为为了找到一个足够好的极小值,可能有必要多次运行基于梯度的算法,每次都使用一个不同 的随机选择额起始点,然后在一个独立的验证集上对比最终的表现。 

 

4. 误差反向传播

上一节我们讨论了梯度下降法,对于单个神经元来说,基于梯度下降法可以在O(W2)步骤内,找到极小值。

从这个小节开始,我们扩展这个话题,讨论如何在每一层计算神经元的梯度信息。

我们的目标是寻找一种计算前馈神经网络的误差函数E(w)的梯度的一种高效的方法。我们会看到,可以使用局部信息传递的思想完成这一点。

在局部信息传递的思想中,信息在神经网络中交替地向前、向后传播。这种方法被称为误差反向传播(error backpropagation),有时简称“反传”(backprop)

应该注意的是,在神经网络计算的文献中,反向传播这个术语用于指代许多不同的事物。例如,

  • 多层感知器结构有时被称为反向传播网络
  • 反向传播这个术语还用于描述将梯度下降法应用于平方和误差函数的多层感知器的训练过程

为了不让概念发生混淆,仔细研究一下训练过程的本质是很有用的。

大部分训练算法涉及到一个迭代的步骤用于误差函数的最小化,以及通过一系列的步骤进行的权值调节。在每一个这样迭代过程中,我们可以区分这两个不同的阶段。

  • 在第一个阶段,误差函数关于权值的导数必须被计算出来。由于正是在这个阶段,误差通过网络进行反向传播,因此我们将专门使用反向传播这个术语来描述计算导数的过程。
  • 在第二个阶段,导数用于计算权值的调整量。

认识到这两个阶段属于不同的阶段是很重要的。

因此,第一阶段,即为了计算导数而进行的误差在网络中的反向传播阶段,其重点在于误差的反向传播这个方式,可以应用于许多其他种类的网络,而不仅仅是多层感知器。它也可以应用于其他的误差函数,而不仅仅是简单的平方和误差函数。它也可以用于计算其他类型的导数,例如Jacobian矩阵和Hessian矩阵。

类似地,第二阶段,即使用计算过的导数调整权值的阶段,可以使用许多最优化方法处理,许多最优化方法本质上要比简单的梯度下降更强大。

0x1:误差函数导数的计算

我们现在推导适用于一般神经网络的反向传播算法。这种神经网络有着任意的前馈拓扑结构、任意可微的非线性激活函数、以及一大类的误差函数。

推导的结果将会使用一个简单的层次网络结构说明,这个简单的层次网络结构有一个单层的sigmoid隐含单元以及平方和误差函数。

许多实际应用中使用的误差函数,例如针对一组独立同分布的数据的最大似然方法定义的误 差函数,由若干项的求和式组成,每一项对应于训练集的一个数据点,即:

这里,我们要考虑的是计算∇En(w)的问题。这可以直接使用顺序优化的方法计算,或者使用批处理方法在训练集上进行累加。

首先考虑一个简单的线性模型,其中输出yk是输入变量xi的线性组合,即:

对于一个特定的输入模式n,误差函数的形式为:

其中ynk = yk(xn, w)。这个误差函数关于一个权值wji的梯度为:

它可以表示为与链接wji的输出端相关联的“误差信号”ynj − tnj、以及与链接的输入端相关联的变量xni的乘积

在后面的讨论我们会看到,这个梯度表达式是一个通用表达式,不论是logistic sigmoid激活函数和交叉熵误差函数、还是softmax激活函数和与之匹配的交叉熵误差函数,都可以得到类似的结果。

我们现在会看到这个简单的结果如何扩展到更复杂的多层前馈神经网络中。

在一个一般的前馈网络中,每个单元都会计算输入的一个加权和,形式为:

其中zi是一个单元的激活,或者是输入,它向单元j发送一个链接。wji是与这个链接关联的权值。 

上式中的求和式通过一个非线性激活函数h(·)进行变换,得到单元 j 的激活zj ,形式为:

对于训练集里的每个模式(pattern),我们会假定我们给神经网络提供了对应的输入向量,然后通过反复应用上面2个公式,计算神经网络中所有隐含单元和输出单元的激活。

这个过程通常被称为正向传播(forward propagation),因为它可以被看做网络中的一个向前流动的信息流。

现在,我们在整个网络结构层面上考虑计算En关于权值wji的导数。

应用偏导数的链式法则,我们得到:

现在我们引入一个有用的记号:

其中δ通常被称为误差(error)。 

同时有:

 

综上,我们有如下公式:

上式告诉我们,要找的导数可以通过简单地将权值输出单元的δ值与权值输入端的z值相乘的方式得到。

注意,这与本小节开始时讨论的简单线性模型的形式相同。即针对权重的导数依赖于两个因素:

  • 与链接wji的输出端相关联的“误差信号”ynj − tnj
  • 与链接的输入端相关联的变量xni

正如我们已经看到的那样,只要我们使用标准链接函数作为输出单元的激活函数,那么对于输出单元,我们就有:

为了计算隐含单元的δ值,我们再次使用偏导数的链式法则:

其中求和式的作用对象是所有向单元j发送链接的单元k。下图说明了单元和权值的设定。

对于隐含单元j,计算δj的说明。计算时使用了向单元j发送信息的那些单元k的δ,使用反向误差传播方法进行计算。蓝色箭头表示在正向传播阶段信息流的方向,红色箭头表示误差信息的反向传播。

注意,单元k可以包含其他的隐含单元和(或)输出单元。我们在给出上式时,我们使用了这个事实:

aj的改变所造成的误差函数的改变的唯一来源是变量ak的改变。

综上,我们就得到 了下面的反向传播(backpropagation)公式:

这表明,一个特定的隐含单元的δ值可以通过将网络中更高层单元的δ进行反向传播来实现,因此通过递归地应用上式,我们可以计算前馈网络中所有隐含单元的δ值,无论它的拓扑结构是什么样的。

于是,反向传播算法可以总结如下。

  • 对于网络的一个输入向量xn,首先进行正向传播,找到所有隐含单元和输出单元的激活。
  • 计算所有输出单元的δk
  • 反向传播δ,获得网络中所有隐含单元的δj
  • 计算导数。 

对于批处理方法,总误差函数E的导数可以通过下面的方式得到:

对于训练集里的每个模式,重复上面的步骤,然后对所有的模式求和,即:

在上面的推导中,我们隐式地假设网络中的每个隐含单元或输入单元都有相同的激活函数h(·)。

然而,这个推导很容易推广,使得不同的单元可以有各自的激活函数,只需记录那种形式的h(·)进入了那个单元即可。  

0x2:一个简单的反向传播例子

上一节提到,对于反向传播算法的推导适用于一般形式的误差函数、激活函数、以及网络拓扑结构。

为了说明这个算法的应用,我们考虑一个具体的例子。这个例子很简单,我们会考虑下图的两层神经网络,

误差函数为平方和误差函数,输出单元的激活函数为线性激活函数, 即

yk = ak

而隐含单元的激活函数为S形函数,形式为:

其中:

这个函数的一个有用的特征是,它的导数可以表示成一个相当简单形式:

我们也考虑一个标准的平方和误差函数,即对于模式n,误差为:

其中,对于一个特定的输入模式xn,yk是输出单元k的激活,tk是对应的目标值。 

对于训练集里的每个模式,我们首先使用下面的公式进行前向传播。 

接下来我们使用下面的公式计算每个输出单元的δ值。 

然后,我们使用下面的公式将这些δ值反向传播,得到隐含单元的δ值。

最后,关于第一层权值和第二层权值的导数为:

 

6. 神经网络的正则化

神经网络的输入单元和输出单元的数量通常由数据集的维度确定,而隐含单元的数量M是一个自由的参数,可以通过调节来给出最好的预测性能

注意,因为M控制了网络中参数(权值和偏置)的数量,因此我们可以猜想,在最大似然的框架下,会存在一个泛化性能最好的最优的M值,这个值对应于拟合效果不好和过拟合之间的最优平衡。下图给出了不同的M值对于正弦曲线回归问题的效果。

使用从正弦数据集中抽取的10个数据点训练的两层神经网络的例子。各图分别给出了使用M = 1, 3, 10个隐含单元调节网络的结果,调节的方法是使用放缩的共轭梯度算法来最小化平方和误差函数。 

然而,泛化误差与M的关系不是一个简单的函数关系,因为误差函数中存在局部极小值, 如下图所示。

对于多项式数据集,测试集的平方和误差与网络的隐含单元的数量的图像。对于每个网络规模, 都随机选择了30个初始点,这展示了局部最小值的效果。对于每个新的初始点,权向量通过从一个各向 同性的高斯分布中取样,这个高斯分布的均值为零,方差为10。

这里,我们看到了对于不同的M值,权值的多次随机初始化的效果。在验证集上的整体最优表现出现于M = 8的情况下的某个特定的解。

在实际应用中,一种选择M的方法实际上是画一张类似的图,然后选择有最小验证集误差的具体的解。即所谓的“多次尝试,选取最好的那个”

除了简单的多次尝试穷举法之外,还有其他的方式控制神经网络的模型复杂度来避免过拟合。

根据我们之前对多项式曲线拟合问题的讨论,我们看到,一种方法是选择一个相对大的M值,然后通过给误差函数增加一个正则化项,来控制模型的复杂度

最简单的正则化项是二次的,下面给出了正则化的误差函数,形式为:

这个正则化项也被称为权值衰减(weight decay)。这样,模型复杂度可以通过选择正则化系数λ来确定。从概率分布的角度来看,正则化项可以表示为权值w上的零均值高斯先验分布的负对数。 

0x1:相容的高斯先验

公式

给出的简单权值衰减的一个局限性是,它与网络映射的确定缩放性质不相容。

为了说明这一点,考虑一个多层感知器网络,这个网络有两层权值和线性输出单元,它给出了从输入变量集合{xi}到输出变量集合{yk}的映射。第一个隐含层的隐含单元的激活的形式为:

输出单元的激活为:

假设我们对输入变量进行一个线性变换,形式为:

然后我们可以根据这个映射对网络进行调整,使得网络给出的映射不变。调整的方法为,对从输入单元到隐含层单元的权值和偏置也进行一个对应的线性变换,形式为:

类似地,网络的输出变量的线性变换:

可以通过对第二层的权值和偏置进行线性变换的方式实现。变换的形式为:

如果我们使用原始数据训练一个网络,还使用输入和(或)目标变量进行了上面的线性变换的数据训练一个网络,那么相容性要求这两个网络应该是等价的,差别仅在于上面给出的权值的线性变换。

任何正则化项都应该与这个性质相容,否则模型就会倾向于选择某个解,而忽视某个等价的解。

显然,上面简单的权值衰减公式由于把所有的权值和偏置同等对待,会导致放缩后的结果发生变化,因此不满足这个性质。

于是我们要寻找一个正则化项,它在上述线性变换下具有不变性。这需要正则化项应该对于权值的重新缩放不变,对于偏置的平移不变。这样的正则化项为:

其中W1表示第一层的权值集合,W2表示第二层的权值集合,偏置未出现在求和式中。

这个正则化项在权值的变换下不会发生变化,只要正则化参数进行下面的重新放缩即可:

上述改进后的正则化项对应于下面形式的先验概率分布。 

注意,这种形式的先验是反常的(improper)(不能够被归一化),因为偏置参数没有限制。

使用反常先验会给正则化系数的选择造成很大的困难,也会给贝叶斯框架下的模型选择造成很大的困难,因为对应的模型证据等于零。

因此,通常的做法是单独包含一个有着自己单独的一套超参数的偏置的先验。

为了说明四个参数的效果,我们从先验中抽取样本,然后画出了对应的神经网络函数,如下图所示。

控制两层神经网络的权值和偏置的先验概率分布的超参数的效果说明。其中,神经网络有一个输入,一个线性输出,以及12个隐含结点,隐含结点的激活函数为tanh。先验概率分布通过四个超参 数α1b , α1w , α2b , α2w 控制,它们分别表示第一层的偏置、第一层的权值、第二层的偏置、第二层的权值。我 们看到,参数α2w 控制函数的垂直标度(注意上方两张图的垂直轴的标度不同),α1w 控制函数值变化的水平标度,α1b 控制变化发生的水平范围。参数α2b ,它的效果没有在这里说明,它控制了函数的垂直偏置的范围。 

更一般地,我们可以考虑权值被分为任意数量的组Wk的情况下的先验,即:

其中:

作为这种形式的先验的一个特殊情况,如果我们将每个输入单元关联的权值设为一个分组,并且关于对应的参数αk最优化边缘似然函数,那么我们就得到了自动相关性确定(automatic relevance determination)的方法。 

0x2:早停止

另一种控制网络的复杂度的正则化方法是早停止(early stopping)

非线性网络模型的训练对应于误差函数的迭代减小,其中误差函数是关于训练数据集定义的。对于许多用于网络训练的最优化算法(例如共轭梯度法),误差函数是一个关于迭代次数的不增函数。然而,在独立数据(通常被称为验证集)上测量的误差,通常首先减小,接下来由于模型开始过拟合而逐渐增大。即发生所谓的过拟合现象(overfitting phenomenon)

于是,训练过程可以在关于验证集误差最小的点停止,如下图所示。

训练集误差(左图)和验证集误差(右图)在典型的训练阶段的行为说明。图像给出了误差与迭代次数的函数,数据集为正弦数据集。得到最好的泛化表现的目标表明,训练应该在垂直虚线表示的点处停止,对应于验证集误差的最小值  

这样可以得到一个 有着较好泛化性能的网络。

这种情况下,网络的行为有时可以通过网络的自由度有效数量来定量描述

自由度有效数量开始时很小,然后在训练过程中增长,对应于模型复杂度的持续增长。这样,在训练误差达到最小值之前停止训练就表示了一种限制模型复杂度的方式

在二次误差函数的情况下,我们可以说明这种直观的描述,并且说明早停止的效果与使用简单的权值衰减的正则化项的效果类似。这可以通过下图来理解。

在二次误差函数的情况下,关于早停止可以给出与权值衰减类似的结果的原因说明。椭圆给出了常数误差函数的轮廓线,wML表示误差函数的最小值。如果权向量的起始点为原点,按照局部负梯度的方向移动,那么它会沿着曲线给出的路径移动。通过对训练过程早停止,我们找到了一个权值向量w ̃。 定性地说,它类似于使用简单的权值衰减正则化项,然后最小化正则化误差函数的方法得到的权值。 

 

似然函数的轮廓线(红色)和先验概率分布(绿色) 

在上图中,权值空间的坐标轴已经进行了旋转,使得坐标轴平行于Hessian矩阵的特征向量。

在没有权值衰减的情况下,如果权向量开始于原点,然后在训练过程中沿着局部负梯度向量确定的路径移动,那么权向量从最开始平行于w2轴的位置,移动到大致对应于w ̃的位置,然后移向最小化误差函数的位置wML

这可以从误差曲面和Hessian矩阵的特征值得出。于是,在点w ̃附近停止就类似于权值衰减

0x3:不变性

在许多模式识别的应用中,都要求在对于输入变量进行了一个或者多个变换之后,预测不应该发生变化,或者说应该具有不变性(invariant)

例如,在二维图像(例如手写数字)的分类问题中,一个特定的图像的类别应该与图像的位置无关(平移不变性(translation invariance)), 也应该与图像的大小无关(缩放不变性(scale invariance))。

这样的变换对于原始数据(用图像的每个像素的灰度值表示)产生了巨大的改变,但是分类系统还是应该给出同样的输出。

类似地,在语音识别中,对于时间轴的微小的非线性变形(保持了时间顺序)不应该改变信号的意义。

如果可以得到足够多的训练模式,那么可调节的模型(例如神经网络)可以学习到不变性, 至少可以近似地学习到。这涉及到在训练集里包含足够多的表示各种变换的效果的样本。因此,对于一个图像的平移不变性,训练集应该包含图像出现在多个不同位置的情况下的数据。

但是,如果训练样本数受限,或者有多个甚至无限的不变性(变换的组合的数量随着变换的数量指数增长),那么这种方法就很不实用

于是,我们要寻找另外的方法来让可调节的模型能够表述所需的不变性。这些方法大致可以分为四类。

  • 样本上采样:通过复制训练模式,同时根据要求的不变性进行变换,对训练集进行扩展。例如,在手写数字识别的例子中,我们可以将每个样本复制多次,每个复制后的样本中,图像被平移到了不同的位置。
  • 通过正则化提高泛化能力:为误差函数加上一个正则化项,用来惩罚当输入进行变换时。
  • 特征提取:通过抽取在要求的变换下不发生改变的特征,不变性被整合到预处理过程中。任何后续的使用这些特征作为输入的回归或者分类系统就会具有这些不变性。
  • 神经网络加入不变性结构:把不变性的性质整合到神经网络的构建过程中、或者对于相关向量机的方法,整合到核函数中。一种方法是通过使用局部接收场和共享权值,例如卷积神经网络。

1、样本上采样

这个方法通常实现起来相对简单,并且可以用来处理复杂的不变性,如下图所示。

对手写数字进行人工形变的说明。原始图像见左图。在右图中,上面一行给出了三个经过了形变的数字,对应的位移场在下面一行给出。这些位移场按照下面的方法生成:在每个像素处,对唯 一∆x, ∆y ∈ (0, 1)进行随机取样,然后分别与宽度为0.01,30,60的高斯分布做卷积,进行平滑。  

对于顺序训练算法,可以这样做:在模型观测到输入模式之前,对每个输入模式进行变换,从而使得如果模式被循环处理,那么每次都会接收到一个不同的变换(从一个适当的概率分布中抽取)。

对于批处理方法,可以这样做:将每个数据点复制多次,然后独立地变换每个副本,这样可以产生类似的效果。

使用这些扩展后的数据可以大幅提升泛化能力,虽然计算开销比较大。

2、通过正则化提高泛化能力

这个方法保持了数据集的不变性,而是给误差函数增加了一个正则化项。在更后面的讨论中,我们会发现,该方法与样本上采样方法关系密切。

3、特征提取

该方法的一个优点是,对于训练集里没有包含的变换,它可以正确地进行外插。然而,找到符合要求的人工设计的特征很困难,因为这种特征要具有所需的不变性,还不能丢失对于判别很有帮助的信息。

实际上,这一步常常被称为“专家领域经验特征工程”,这一步的实现常常伴随着大量的前期问题分析与建模,是一个逐渐迭代优化的过程。只要设计得当,效果往往也是最好的。 

0x4:切线传播

通过切线传播(tangent propagation)的方法,我们可以使用正则化来让模型对于输入的变换具有不变性。

对于一个特定的输入向量xn,考虑变换产生的效果。假设变换是连续的(例如平移或者旋转,而不是镜像翻转),那么变换的模式会扫过D维输入空间的一个流形M。

下图说明了D = 2的情形。

二维输入空间的例子,展示了在一个特定的输入向量xn上的连续变换的效果。一个参数为连续变量ξ的一维变换作用于xn上会使它扫过一个一维流形M。局部来看,变换的效果可以用切向量τn来近似。 

假设变换由单一参数ξ控制(例如,ξ可能是旋转的角度)。那么被xn扫过的子空间M是一维的,并且以ξ为参数。

令这个变换作用于xn上产生的向量为s(xn, ξ),且s(x, 0) = x。这样曲线M的切线就由方向导数τ = ∂x 给出,且点xn处的切线向量为:

对于输入向量进行变换之后,网络的输出通常会发生变化。输出k关于ξ的导数为:

其中Jki为Jacobian矩阵J的第(k, i)个元素,上式给出的结果可以用于修改标准的误差函数,使得在数据点的邻域之内具有不变性。

修改的方法为:给原始的误差函数E增加一个正则化函数Ω,得到下面形式的误差函数:

其中λ是正则化系数,且:

当网络映射函数在每个模式向量的邻域内具有变换不变性时,正则化函数等于零。λ的值确定了训练数据和学习不变性之间的平衡

0x5:卷积神经网络

另一种构造对输入变量的变换具有不变性的模型的方法是将不变性的性质融入到神经网络结构的构建中。这是卷积神经网络(convolutional neural network)的基础,它被广泛地应用于图像处理领域。 

相关的讨论可以参阅另一篇文章

0x6:软权值共享

降低具有大量权值参数的网络复杂度的一种方法是将权值分组,然后令分组内的权值相等

这种方法将网络对于图像的平移不变性整合到网络的构建过程中。然而,它只适用于限制的形式可以事先确定的问题中。这里,我们考虑软权值共享(soft weight sharing)。

这种方法中,权值相等的硬限制被替换为一种形式的正则化,其中权值的分组倾向于取近似的值。此外,权值的分组、每组权值的均值,以及分组内的取值范围全都作为学习过程的一部分被确定

回忆一下,前面章节讨论的简单的权值衰减正则化项可以被看成权值上的高斯分布的负对数。我们可以将权值分为若干组,而不是将所有权值分为一个组。分组的方法是使用高斯混合概率分布。混合分布中,每个高斯分量的均值、方差,以及混合系数,都会作为可调节的参数在学习过程中被确定。

于是,我们有下面形式的概率密度:

其中:

πj为混合系数。取负对数,即可得到正则化函数,形式为:

从而,总的误差函数为:

其中,λ是正则化系数。这个误差函数同时关于权值wi和混合模型参数{πj,μj,σj}进行最小化。

为了最小化总的误差函数,能够计算出它关于各个可调节参数的导数是很有必要的。为了完成这一点,比较方便的做法是把{πj}当成先验概率,然后引入对应的后验概率。后验概率由贝叶斯定理给出,形式为

这样,总的误差函数关于权值的导数为:

于是,正则化项的效果是把每个权值拉向第j个高斯分布的中心,拉力正比于对于给定权值的高斯分布的后验概率。这恰好就是我们要寻找的效果。

Relevant Link: 

https://www.cnblogs.com/LittleHann/p/10020448.html

 

7. 混合密度网络

有监督学习的目标是对条件概率分布p(t | x)建模

对于许多简单的回归问题来说,这个分布都被选为高斯分布。然而,实际的机器学习问题中,经常会遇到与高斯分布差别相当大的概率分布,概率分布可以是多峰的,这种情况下,高斯分布的假设就会产生相当差的预测结果。

作为逆问题的一个简单的例子,考虑机械臂的运动学问题,如下图所示。

左图给展示了一个具有两个连接的机械臂,其中,末端的笛卡尔坐标(x1,x2)由两个连接角θ1和θ2以及机械臂的(固定)长度L1和L2唯一确定。这被称为机械臂的正向运动学(forward kinematics)。在实际应用中,我们必须寻找给出所需的末端位置的连接角,如右图所示。这个逆向运动学(inverse kinematics)有两个对应的解,即“肘部向上”和“肘部向下”。

正向问题(forward problem)是在给定连接角的情况下求解机械臂末端的位置,这个问题有唯一解。

然而,在实际应用中,我们想把机械臂末端移动到一个具体的位置。为了完成移动,我们必须设定合适的连接角。于是,我们需要求解逆问题,它有两个解,如上图右边所示。

正向问题通常对应于物理系统的因果关系,通常有唯一解。例如,人体的某个具体的症状是由于特定的疾病造成的。然而在模式识别中,我们通常不得不求解逆问题,例如在给定症状的情况下,推断疾病的种类

如果正向问题涉及到多对一的映射,那么逆问题就会有多个解(1:N的映射)。例如,多种不同的疾病可能会导致相同的症状。

在机械臂的例子中,运动由几何方程定义,多峰的性质是显然的。然而,在许多机器学习问题中,尤其是涉及到高维空间的问题中,多峰性质的存在并不显然,这对我们的建模就带来了非常大的挑战。

但是,为了讨论的目的, 我们会考虑一个相当简单的问题,这个问题中我们可以很容易地看出多峰性质。

这个问题的数据的生成方式为:

对服从区间(0, 1)的均匀分布的变量x进行取样,得到一组值{xn},对应的目标值tn通过下面的方式得到:计算函数xn + 0.3*sin(2πxn),然后添加一个服从(−0.1, 0.1)上的均匀分布的噪声。

这样,逆问题就可以这样得到:

使用相同的数据点,但是交换x和t的角色。

下图给出了正向问题和逆问题的数据集,以及一个两层神经网络给出的结果。

左图是一个简单的“正向问题”的数据集,其中红色曲线给出了通过最小化平方和误差函数调节一个两层神经网络的结果。对应的逆问题,如右图所示,通过交换x和t的顺序的方式得到。这里,通过最 小化平方和误差函数的方式训练的神经网络给出了对数据的非常差的拟合,因为数据集是多峰的(每一个y轴有多个x轴的值与之对应)。 

这个两层的神经网络有6个隐含单元,一个线性输出单元,误差函数为平方和误差函数。在高斯分布的假设下,最小平方方法对应于最大似然方法。我们看到,对于不服从高斯分布的逆问题,这种解法产生的模型非常差。

于是,我们寻找一个对条件概率密度建模的一般的框架。可以这样做:

为p(t | x)建立一个混合模型,模型的混合系数,和每个分量的概率分布都是输入向量x的一个比较灵活的函数,这就构成了混合密度网络(mixture density network)。对于任意给定的x值,混合模型提供了一个通用的形式,用来对任意条件概率密度函数p(t | x)进行建模。

假设我们考虑一个足够灵活的网络,那么我们就有了一个近似任意条件概率分布的框架。这里,我们显式地令模型的分量为高斯分布,即:

这是异方差模型(heteroscedastic model)的一个例子,因为数据中的噪声方差是输入向量x的一个函数。

我们也可以使用高斯分布以外的其他分布,例如,如果目标变量是二值的而不是连续的,我们就可以使用伯努利分布。

下图所示的神经网络可以是一个两层的网络,网络具有S形(双曲正切)隐含单元。

混合密度网络(mixture density network)可以表示一般的条件概率密度p(t | x),方法为:考虑t的一个参数化的混合模型,它的参数由以x为输入的神经网络的输出确定。 

如果混合模型

中有K个分量,且t有L个分量,那么网络就会有K个输出单元激活(记作akπ)确定混合系数πk(x),有K个输出(记作akσ)确定核宽度σk(x),有K × L个输出(记作akjμ)确定核中心μk(x)的分量μkj(x)。网络输出的总数为(L + 2)K,这与通常的网络的L个输出不同。通常的网络只是简单地预测目标变量的条件均值。

混合系数必须满足下面的限制。

可以通过使用一组softmax输出来实现。 

类似地,方差必须满足σk2(x) ≥ 0,因此可以使用对应的网络激活的指数形式表示,即:

最后,由于均值μk(x)有实数分量,因此它们可以直接用网络的输出激活表示:

混合密度网络的可调节参数由权向量w和偏置组成。这些参数可以通过最大似然法确定,或者等价地,使用最小化误差函数(负对数似然函数)的方法确定。对于独立的数据,误差函数的形式为:

为了最小化误差函数,我们需要计算误差函数E(w)关于w的分量的导数。

如果我们得到了误差函数关于输出单元激活的导数的表达式,那么我们就可以通过标准的反向传播方法来计算误差函数关于w的分量的导数。

误差函数关于输出单元激活的导数代表了每个模式和每个输出单元的误差信号σ,并且可以反向传播到隐含单元,从而误差函数的导数可以按照通常的方式进行计算。

由于误差函数由一组项的求和式构成,每一项都对应一个训练数据点,因此我们可以考虑对于特定的模式n的导数,然后通过求和的方式找到E的导数。

由于我们处理的是混合概率分布,因此比较方便的做法是把混合系数πk(x)看成与x相关的先验概率分布,从而就引入了对应的后验概率,形式为:

关于控制混合系数的网络输出激活的导数为:

类似地,关于控制分量均值的网络输出激活的导数为:

最后,关于控制分量方差的网络激活函数为:

我们回到前面逆问题的简单例子,来说明混合密度网络的应用。下图给出了混合系数πk(x)、均值μk(x)和对应于p(t | x)的条件概率轮廓线。

 (a)对应于一个混合密度网络的三个核函数,混合系数πk(x)与x的函数关系图像。模型有三个高斯分量,使用了一个多层感知器,在隐含层有五个“tanh”单元,同时有9个输出单元(对应于高斯分量的3个均值、3个方差以及3个混合系数)。在较小的x值和较大的x值处,目标数据的条件概率密度是单峰的,对于它的先验概率分布,只有一个核具有最大的值。而在中间的x值处,条件概率分布具有3个峰,3个混合系数具有可比的值。(b)使用与混合系数相同的颜色表示方法来表示均值μk (x)。 (c)对于同样的混合密度网络,目标数据的条件概率密度的图像。(d)条件概率密度的近似条件峰值的图像,用红色点表示。 

神经网络的输出,即混合模型的参数,是输入变量的连续单值函数。然而,从上图(c)中我们可以看到,通过调整混合分量πk(x)的大小,模型能够产生一个对于某些x是单峰的,对于其他x值是多峰的概率分布。

一旦混合密度网络训练结束,他就可以预测对于任意给定的输入向量的目标数据的条件密度函数。只要我们关注的是预测输出向量的值的问题,那么这个条件概率密度就能完整地描述用于生成数据的概率分布。

根据这个概率密度函数,我们可以计算不同应用中我们感兴趣的更加具体的量。一个最简单的量就是目标数据的条件均值,即:

类似地,我们可以利用条件均值的结果,计算密度函数的方差,结果为:

我们已经看到,对于多峰分布,用条件均值描述数据的效果很差。在这种情况下,条件众数可能更有价值。

由于混合密度网络的条件众数没有一个简单的解析解,因此需要数值迭代。一个简单的替代方法是取每个x对应的最可能分量(即具有最大混合系数的分量)的均值。 

 

8. 贝叶斯神经网络

目前为止,我们对于神经网络的讨论集中于使用最大似然方法来确定网络的参数(权值和偏置)。正则化的最大似然方法可以看成MAP(maximum posterior)方法,其中正则化项可以被看成先验参数分布的对数。然而,在贝叶斯方法中,为了进行预测,我们需要对参数的概率分布进行积分或求和。

 

posted @ 2020-07-31 16:07  郑瀚Andrew  阅读(1039)  评论(0编辑  收藏  举报