本节来自《pattern recognition and machine learning》第5章。

接(PRML5-神经网络(1))

5.5NN中的正则化

NN的输入层和输出层的单元个数都是按照数据集定义的,只有中间的隐藏层的单元个数是自由参数,通过最大似然求得一个最优值,防止出现欠拟合和过拟合。不过泛化误差不是一个简单的关于的函数,因为在误差函数中有许多的局部最小存在,如下图所示:

图5.5.1网络中隐藏单元数量不同(x轴)的情况下平方和误差函数在测试集上的误差,在每个网络size上有30个随机初始化。每个初始化权重向量都是通过对一个高斯分布(0均值,10方差)采样得到的。

如上图,通过在选定M的基础上不同的初始化权重导致不同的结果,结果显示M=8的时候验证集上的错误最少(个人:我也看不出来是8的时候最好)。同样的,在实际中,我们也是通过画这种图来选择M的值。而且就拿之前的多项式拟合来说,是先选取一个较大的多项式阶数也就是,然后在误差函数上加上一个正则化项来防止过拟合:

                                                                            (5.5.1)

该正则化项叫做权重衰减,这个模型的复杂度可以由前面的系数(超参数)来控制,正如前面介绍的,这一项可以看出是基于权重向量的有着0均值高斯先验分布的负log函数。

5.5.1 一致的高斯先验(consistent gaussian priors)

上面这权重衰减的一个局限性在于没法自适应网络映射的缩放属性。假设我们有一个2层权重层和线性输出单元的MLP,第一层隐藏层的激活函数:

                                                                            (5.5.1.1)

输出层单元的激活函数:

                                                                                      (5.5.1.2)

假设我们先对输入数据进行一个线性转换:

                                                                                         (5.5.1.3)

我们可以让该网络的映射关系(输入层映射到输出层)不变,只要在输入层到隐藏层的权重和偏置也执行一个对应的线性转换就行(个人:这时候一个处理就相当于将输入的线性转换抵消掉了):

                                                           (5.5.1.4)

同样的,要想求得该网络的输出对应的如下的一个线性转换关系:

                                                                            (5.5.1.5)

只要接着将第二层的权重和偏置再接着做一个线性转换就行(个人:这个处理是为了让目标变量进行转换,之前输入的转换的影响被第一层权重的改变所抵消掉了):

                                                                    (5.5.1.6)

如果我们使用原始的数据训练一个网络和转换后的数据来训练另一个网络,可以发现这原始网络和新网络的对应的权重之间也是有着这么一个转换关系。我们要的也就是正则化器需要在这种情况下保持一致。而正如(5.5.1)式子中的那个权重衰减,明显无法符合这种网络的缩放属性,因为通过这个权重衰减训练的两个网络的权重肯定没有如上面这个转换关系。所以这里需要寻找的正则化方法是能够在如上面的(5.5.1.4)和(5.5.1.6)的线性转换下保持不变性的。也就是需要正则化能够对权重的缩放和偏置的偏移能够保持不变性,如下面这种正则化方法:

                                                                   (5.5.1.7)

这里表示第一层权重集合;表示第二层权重集合。偏置不计算在内(5.5.1那个也是不计算偏置的)。通过对该正则化的超参数进行缩放,使得既能达到权重转换的目的,又能让该正则化保持不变性。

如(5.5.1.7)中的正则化对应的先验形式为:

这个形式的先验叫做improper(无法被归一化),因为偏置参数是无约束的。使用improper先验会导致对正则化参数(超参数)的选择和与贝叶斯框架的模型对比变得困难,因为对应的evidence是0(个人:暂时不知道evidence代表什么含义)。所以通常对于偏置来说是选取独立的先验(这会打破平移不变性)并使用自己的超参数。我们可以通过从这些先验中采样然后将对应的网络函数结果画出来,从而观察这四个超参数的影响,如下图:

(上图中的数据1,10,100,1000都是错的,应该都是有着-2的幂,比如应该是)图5.5.1.1 上面的图是基于1个输入、12个tanh激活函数的隐藏单元、1个线性输出的网络模型,超参数用来控制基于权重和偏置的先验分布。该先验由4个超参数控制的,表现为第一层偏置,第一层权重,第二层偏置和第二层权重的高斯分布的精度。超参数控制函数的垂直缩放范围(在上面两个图上不同垂直轴上的范围);控制着函数的值变化的水平缩放范围(应该是这个值越大整个函数的曲线的所有突变的总的范围越大,估计上图没完全表现出来而后面这个参数控制着突变内的范围);控制基于发生变化的水平范围(应该是比如上图下面两个子图的红色突变范围,100的时候小,1000的时候大,仔细看形状只是放大了);参数的影响这里没画出来,是控制着函数竖直偏移范围。

不过,更通用的做法是将先验中的权重分成组:

这里:

这就是先验的一个特殊情况,如果我们选择的是与一个输入单元相关连的权重集合的分组,然后优化关于对应参数的边缘似然,那么就得到了如7.2.2中介绍的自动相关性确定(automatic relevance determination)。

5.5.2早期停止

所谓的早期停止,也是另一种正则化方法,就是在训练集和验证集上,一次迭代之后计算它们上面的错误率,当在验证集上错误率最小,而没开始增大的时候就停止,因为再接着训练的话,训练集上误差应该是接着下降的,而验证集上的误差就会上升了,这时候就是要过拟合了,所以及时的停止,从而得到泛化最好的模型。如下图:

图5.5.2.1 训练集和验证集随着训练次数的增加所表现的误差结果:左边训练集,右边验证集

这种行为的解释:对于模型中有效的自由度的数量(这里应该指的是能作为决策的参数,打个比方开始所有的权重都没法决策,随着训练,能决策的参数越来越多,形象的比喻)来说,随着训练的过程是先很小然后不断的增长的,也对应着模型有效复杂度的稳定性增长,在训练误差最小值前停止也就意味着对模型有效复杂度的一个限制。

就拿二次误差函数来说,我们可以验证这个观点,而且早期停止其实很像使用最简单的权重衰减项的正则化的行为。如下图:

图5.5.2.2:在点上的早期停止就相当于,加了权重衰减的正则化项然后网络训练到刚好该正则化误差的最小值位置。可以和书中图3.15比较

在上图中权重空间中的轴已经旋转到与hessian矩阵中特征向量平行了。如果没有权重衰减项,权重向量就会先从原点开始,然后随着训练朝着局部负梯度向量的方向前进(sgd方法),也就是最开始会朝着与轴平行的方向前进,然后经过点,然后朝着误差函数最小值的方向前进,直到点。这具体的路径随着误差表面的形状和hessian不同的特征值的不同而不同。在点周围的停止训练,就类似于权重衰减。早期停止和权重衰减之间的关系可以量化,所以关系(其中表示第几次迭代,而表示学习率)扮演着正则化参数的角色,所以网络中有效的参数就会随着训练的过程而不断的增长。(其实就是网络中参数参与的会越来越多,这是一种形象的解释)。

5.5.3不变性

在模式识别中,当输入变量有着一个或者多个的变换,而输出的预测不变,那么这叫做不变性。比如手写数字识别中,每张图片内数字的位置的改变(平移不变性)和数字的大小不同(缩放不变性)都需要对应到正确的分类结果。或者说在语音识别中,在时间轴(保留了时间顺序)上很小的非线性扭曲(即波形的小程度扭曲),不应该让信号的解释发生改变。

如果有足够多的训练样本,那么就可以训练一个自适应网络例如NN来学习不变性,至少能够逼近。这涉及到训练集必须有足够多不同变换影响的样本。所以,对于图像的平移不变性来说,需要对象在不同位置上足够多的图片用作训练集。然而当训练样本不够多或者只有几种不变性的时候,该方法的实用性不高(因为不同的变换的组合得到的数量也就是你需要的训练集是基于这些变换的种类呈指数型增长的)。所以我们需要找其他方法来让自适应模型自己呈现所需的不变性。这大致可以分为四个方面:

1、训练集可以使用训练样本的副本形式来增强(augmented),并在里面加上合适的不变性的转换。例如在我们的数字识别例子中,可以对每个样本进行多个复制,在每个复制中让数字出现在图像的不同地方;

2、在误差函数上增加一个正则化项来惩罚当输入有不同变换的时候输出的变化情况,这在5.5.4中有种技术叫做切线传播,后续介绍。

3、通过特征提取来预处理,从而在这个阶段建立不变性(比如sift),任何后续的回归或者分类系统使用这样的输入都是体现了不变性的。

4、最后的选择就是将不变性属性放入NN的结构中(或者通过技术,比如定义核函数的方法,如相关向量机)。一种实现的方法就是使用局部感受野和权重共享,正如在5.5.6介绍的CNN。

方法1通常来说是相对简单实现的,可以用来构建复杂的不变性,如下图所示:

图5.5.3.1 手写数字的合成扭曲。左边的是原始图片,后面上面的三个是扭曲的数字图片,下面的三个是对应的位移场(displacement fields)。这些位移场都是通过在每个像素上随机位移,然后采样生成的,接着使用宽度为0.01、30、60的高斯卷积平滑一下(其实就是滤波一下)。

对于连续训练算法来说,这可以通过在放入模型之前先对输入样本进行转换(如果样本会被循环用作训练的话)那么每次就增加一个不同的转换形式(从一个合适的分布中提取)。对于批量方法来说,相似的方法就是先多次复制样本,然后每个复制样本上使用不同的转换。这些增强数据(augmented data)的使用可以明显提高泛化能力(simard et al 2003

),虽然会更耗时。

方法2是保持数据集不变,而通过增加额外的正则化来修改误差函数。在5.5.5中,会介绍与该方面相关的方法

方法3的一个优点就是它可以正确的推断远远超出训练集上变换范围之外的变换。然而,同时也很难在不丢弃信息的情况下找到有助于判别的那些手动设计的不变性特征(个人:因为这是更通用的适用不变性,相对来说手动设计的特征是专为判别而设定的,所以靠模型自己来的话,势必会需要更多的信息,因为模型可分不清哪些是易于被鉴别的特征,哪些不是)

5.5.4 tangent传播(切线传播)

我们可以使用正则化来让模型对转换的输入数据具有不变性,该技术叫做切线传播(simard et al 1992)。这里主要举例在一个具体的输入向量上转换的影响。假设转换是连续的(例如平移或者旋转,不过不是镜面反射),转换后的样本将扫出(sweep out,这个真心不知道怎么在流行这个领域上术语的翻译)一个D维输入空间的流行,如下图:

图5.5.4.1 在一个2维的输入控件中在一个具体的输入向量上一个连续变换的影响。由连续变量参数化的一个1维的变换,将其应用在扫出一个1维的流行。局部的来说,这个转换的影响可以通过切线向量来逼近。

图中是简化的将D=2时候的例子。假设转换由一个参数(例如旋转的角度)所控制。那么由扫出的子空间也是1维的,并且是被参数化的。用表示在向量上变换得到的向量,而且。曲线上的斜率可以通过方向导数计算得到,而且在点上的切线向量是:

                                                                                  ( 5.5.4.1)

在对输入向量进行转换之后,网络的输出向量通常来说也会变的。输出单元 k 关于的导数为:

                                                (5.5.4.2)

这里是jacobian矩阵上的元素,正如5.3.4部分介绍的。上面这个式子可以可以用来修改标准误差函数,从而可以用来保证样本周边的局部不变性。通过在原始的误差函数上增加额外的正则化函数,总的形式为:

                                                                          (5.5.4.3)

这里是正则化项的参数:

                        (5.5.4.4)

该正则化函数当网络映射函数在对每个输入向量转换后还能保持不变的情况下结果为0,参数用来权衡拟合训练数据和学习不变性之间的重要性。在实际使用中,切线向量可以用有限差分来逼近得到,也就是先在向量上往前移动,然后将后面的向量减去然后除以它两的自变量的差即可。如下图所示:

图5.5.4.2 (a)元素图片;(b)一个对应的无穷小顺时针旋转对应的切线向量,其中蓝色表示正值,黄色表示负值;(c)将从切线向量中一小部分贡献加到元素图像上:,其中度;(d)将原始图像进行旋转之后的结果,用作对比图

该正则化函数是依赖于jacobian矩阵上的网络权重的。可以通过5.3部分介绍的使用BP方法来计算正则化项关于网络权重的导数。如果转换是受到参数控制(即表示在2维图像中将平移和in-plane旋转结合起来),从而流行就会有维度为,对应的正则化项的形式为上面那个式子的和,其中的和中是一个变换一个式子。如果同时有好几个变换,那么网络映射先分别应对不同的不变性,然后将不同的变换结合起来(simard
et al 1992)使网络拥有(局部)不变性。

一个相关的技术,叫做切线距离(tangent distance)可以用来将不变性特性放入基于距离的方法中,例如最近邻分类器(simard et al 1993)。

5.5.5使用转换后的数据训练

通过使用变换的数据来训练的方法与切线传播这种技术密切相关(bishop1995b;leen 1995)。正如5.5.4介绍的,假设变换是通过一个参数控制的,表示成函数形式为而且,同样使用的的是平方误差和函数。该误差函数当未使用变换的时候,形式为(数据集为无限状态):

                                                       (5.5.5.1)

正如1.5.5介绍的那样。并且为了介绍方便,这里使用的输出为单一神经元。如果我们对每个样本都进行无限次的复制,每个复制上使用从分布上采样的变换扰动来增强数据。那么使用扩展的数据集后,该误差函数为:

                                     (5.5.5.2)

现在,假设分布式0均值,而且方差很小,所以我们只是对原始输入向量引入很小的变换。我们可以将变换函数以幂次的泰勒展开:

                                     (5.5.5.3)

这里表示在的位置上函数关于的二阶导数。从而得到模型的函数为:

                (5.5.5.4)

将上面式子带入到(5.5.5.2),然后展开:

        ()              (5.5.5.5)

(作者:上面的式子第三项改成

因为变换的分布式为0均值,所以。同样的,可以通过来表示。忽略项。那么该平均误差函数就表示为:

                                                                                                   (5.5.5.6)

这里表示原始的平方误差和函数,所需要加上的正则化项为:

(作者:上面改成

这是基于上积分得到的。我们可以将该正则化项以下面的方式进行简化:如1.5.5.部分介绍的最小化平方和函数的函数可以通过目标变量的条件平均代替;而从(5.5.5.6)中正则化后的误差其实就等于未正则化的平方误差和函数加上复杂度为(作者:改成)的项,所以,最小化网络总误差的函数可以表示为:

(作者:改成

为了 阶数(作者:改成的平方),将正则化项中第一项忽略掉,留下第二项:

这等效于切线传播正则化(5.5.4.4)。如果我们考虑这么一个特殊情况,输入的变换简单的只加上随机噪音,即,那么该正则化项为:

这被称之为Tikhonov 正则化(tikhonov and arsenin 1977;bishop 1995b)。该正则化关于网络权重的导数可以通过使用扩展的BP算法求出(bishop 1993)。对于很小的噪音振幅,Tikhonov正则化是对输入加上随机噪音,这被证明是有助于在合适的环境下改善泛化性能(sietsma and dow 1991)。

5.5.6卷积网络

(该小节长话短说,估计现在这么火,没几个不知道的)另一个让模型具有不变性的方法就是直接将对输入变换的不变性构建到网络中,这也是CNN的基础。对于2维的图片来说,其不变性主要还是平移不变性、缩放不变性、和很小的旋转不变性。更多的,网络还需要有更多微妙的不变性,例如弹性形变(elastic deformations),如图5.5.3.1所示。一个方法就是建立一个完整的全连接MLP,不过这可需要足够大的训练数据集,这样得到的最好结果才能好。不过这种简单粗糙的方法却忽略了一个问题,图像的像素值是与周围的像素点的值密切相关的。所以现有的计算机视觉模型都是通过提取局部特征,依赖于图像的子区域提取的特征。然后将局部提取的特征融合到后期的处理中来检测更高阶的特征,最后产生的特征来表示整张图片。而且在图像一个区域上提取的特征对于其他区域来说也是很有用的,比如图像平移之后。

CNN当然就是三大特性:局部感受野、权值共享、子采样了。对于卷积层每个特征图来说,所需要学习的参数就是一个卷积核外带一个偏置,如果将卷积层每个特征图中的卷积核当做是一个特征提取器,那么一个特征图就相当于对整张图提取相同的特征,即在图片的不同位置提取相同的特,这样如果输入图片平移了,那么特征图上的的激活值也会对应的平移,不过却不会变。这就是网络输出针对输入图片的平移和扭曲不变性的基础(一定程度,所以文中用的是逼近)。对于子采样(不是池化),是将现在流行的池化比如meanpool上计算局部区域的平均值,然后乘以一个权重再加上一个偏置,然后送入sigmoidal激活函数(这里不重叠),所以子采样层中单元的响应对于图像的微小平移具有相对的不敏感特性。在实际中,是多层卷积层和子采样层对的,随着层数的增加,对于输入的变换有着更高程度的不变性。而且空间分辨率的逐渐减少可以通过增加的特征数量来补偿。最终层通常还会与一个全连接层相连,之后再加上一个softmax层用来多分类。

5.5.7软权重共享(soft weight sharing)

上面是通过将某些权重分成不同的组,组内的权重值都相等。然而这只适用于特定的问题上,也就是约束形式已经提前固定了。这里介绍一种软权重共享的方式(nowlan and hinton 1992),将以往的等值权重的硬约束替换成一个正则化的形式,其中不同组的权重倾向于有着相似的值。也就是先将权重划分成不同的组,每组的平均权重值和值的组内扩散都是通过学习过程决定的。

回顾之前那个简单的权重衰减正则项(就是),可以被认为是基于权重的高斯先验分布的负log函数。通过引入高斯混合的概率分布方法让权重值形成几个不同的组,而不是一组。不同高斯成分的中心和方差还有混合的系数,都是作为学习过程的一部分。所以,我们得到了一个概率密度形式:

这里:

其中是混合系数。使用负log函数,该正则化函数的形式为:

总的误差函数为:

(作者,因为有的引入,所以正则化系数是不相关的,公式中这一项可以丢去)

这里为正则化项系数(作者:如上,这里丢弃)。该误差会在关于权重和关于混合模型的参数下达到最小值。如果权重是常量,那么混合模型的参数就可以通过第9章介绍的EM算法来求出。不过权重自身的分布也是在学习过程中确定的,而且为了避免数值的不稳定性,需要计算一个关于权重和混合模型参数的联合优化。这可以通过例如共轭梯度或者拟牛顿法来搞定。

为了最小化总的误差函数,需要计算关于各个不同的参数的导数。为了方便,我们可以将看成是先验概率,然后引入如书中(2.192)的后验分布,该后验分布可以通过下面的贝叶斯分布求得:

总的误差函数关于权重的导数为:

正则化项的影响就是将每个权重拉向第 j 个高斯的中心,与在给定权重上高速的后验概率成一定比例。这就是我们想要找的那种effect。误差函数关于高斯中心的导数为:

(作者:右边(r.h.s.)的分子改成

一个简单的直观解释就是,它是将推向权值的均值方向,然后会通过后验概率来进行加权,各自的权重参数都是通过成分 j  生成的(个人:这句话意思就是上面式子的应该是什么样子)。同样的,关于方差的导数为:

这会驱使朝着对应中心附近的权重的平方偏差的权重化均值方向移动(个人:其实就是解释上面那个式子最小的时候的值是什么样子),这里和上面一样,后验概率给出权重化系数,每个权重都是通过成分j
生成的。注意在实际中,需要引入新的变量

(作者:换成

最小值是在关于(作者:换成)上计算得到的。这样就能确保参数仍然是正的。不过这也有不好的影响,因为一个或者多个的值会变成0,对应着的就是告诉成分会陷入其中一个权重参数值上。这些更详细的介绍在9.2.1章节的GMM部分。

对于关于混合系数的导数的计算,我们需要考虑下面这个约束:

这是基于作为先验概率的解释的前提下计算的。这可以通过将混合系数表示成任意变量的集合然后使用softmax函数计算得到:

正则化后的误差函数关于的导数为:

(该式子右边少乘了

我们可以看到会被推向成分 j 的平均后验概率的方向。

5.6混合密度网络

有监督学习的目标是对条件分布进行建模,当然对于很多简单的回归问题来说,自然的选择就是高斯了。然而实际上ML的问题很多都是非高斯分布。例如逆问题(inverse
problems),在其中的分布可以是多模态的,而这时候使用高斯导致的结果就会非常差。举个逆问题的简单例子,机器人手臂的运动学,如下图所示:

图5.6.1 左边的那个是一个2连机器人手臂,其中手臂末端的笛卡尔坐标是由两个联合角度和两个固定的手臂长度唯一确定的。这被称之为手臂的前向运动。在实际中,我们需要找到能够得到合适的手臂末端位置时的联合角度,正如上面右图所示,这个逆运动有两个对应的解叫做“曲向上”和“曲向下”。

上面机器人手臂任务中的前向问题涉及到需要在给定联合角度基础上找到手臂末端的位置并得到唯一解。然而,在实际中,我们还是希望将手臂末端移动到其他的位置,而这就需要有合适的联合角度,所以我们需要解决后面的逆问题。前向问题在物理学中通常是有因果关系的,所以通常会有个唯一解。例如人生病时相同的症状可能包含着多种病因。而在模式识别中通常需要去解决一个逆问题,在这种多对一映射的前向问题上,那么逆问题就会有多个不同的解。

在上面的机器人手臂中,运动学是基于集合等式定义的,很明显会有多个模态存在。然而在ML问题中,多模态的存在特别是涉及到高维空间的问题上,却不那么被容易观察到。所以通常是先考虑一个能够容易可视化多模态的简单问题,然后在逐步深入。假设某个任务的数据变量的值是通过在区间上平均采样得到的,集合为,对应的目标变量是先计算函数然后加上区间均匀分布的噪音得到的(这是在建立数据集)。然后通过保持数据样本不变,只交换x
 和  t  的角色来获取逆问题。下图就是有关前向问题和逆问题的数据集:

图5.6.2 左边的是一个简单的“前向问题”的数据集,其中红曲线表示用一个2层NN通过最小化平方和函数得到的拟合结果;右边是对应的逆问题,是通过交换x 和 t 的角色,然后使用相同的网络结构,在最小化平方和误差函数后得到的对数据的拟合,因为数据集中多模态的存在,所以拟合效果很差。

上图就是针对前向问题和逆问题的数据集,结果是通过一个6个隐藏单元和一个线性输出单元的网络,通过最小化平方误差和函数来进行拟合的结果。最小平方对应着假设是高斯分布下的最大似然函数。我们可以发现对于高度非高斯逆问题来说,得到的结果非常差。

所以需要一个更通用的框架来对条件概率分布进行建模。这可以通过对条件分布使用混合模型,在其中的混合系数和成分密度都是关于输入向量的灵活函数。该方法叫做混合密度网络(mixture density network)。对于任何给定的的值来说,混合模型提供了一个通用的形式来对任意条件密度函数进行建模。假设我们有一个足够灵活的网络,那么我们就可以逼近任意条件分布了。

这里先显式的提出关于高斯成分的模型(假设混合模型中都是高斯成分):

         (作者,方差项需要)                   (5.6.1)

这是一个叫做异方差(heteroscedastic)模型的例子,因为数据上的噪音方差是关于输入向量的函数。通过将高斯成分换掉,可以使用其他的分布,例如当目标变量是二值而不是连续的时候,使用伯努利分布。即使混合密度网络能够让一般的协方差矩阵扩展成使用Cholesky 分解(矩阵论中的知识)(williams,1996)来计算得到其中的协方差,我们这里也只是简单的介绍当成分之间是各向同性(isotropic)的情况。(个人:不同的成分在各个方向上具有相同性质时称各向同性)。而且就算成分都是是各向同性的,条件分布也不会假设关于目标变量 (相比标准的平方和回归模型)成分的分解是混合分布的结果。(个人:这句话意思就是就算其实成分是相同的,该条件概率也不会假设目标变量是不同成分相加的结果,只是当成一个整体考虑。)

现在来介绍如何计算混合模型的各个参数:混合系数、均值、和方差,这三个都是受到将作为输入的传统NN的输出控制的,混合密度网络的结构如下图:

图5.6.3 混合密度网络可以表示成同样的条件概率密度 ,只要将目标变量的分布看成是参数化的混合模型,而且其中的参数都是由作为输入向量的NN的输出控制的。

混合密度网络和后面14.5.3部分介绍的专家混合系统关联密切,不过其中主要的不同在于混合密度网络是使用相同的函数去预测所有成分密度的参数和混合系数,而且非线性隐藏单元在输入依赖函数之间是共享的。

上图5.6.3中是一个2层网络,其中的隐藏单元是sigmoid(tanh)函数,如果在式子(5.6.1)这种混合模型中有个成分,而个成分(个人:即
L分类),那么该网络将会有个输出单元激活值来决定混合系数,同时该网络中还会有个输出决定着核的宽度个输出决定着核中心的成分。和普通的只有个输出的网络(简单的预测目标变量的条件均值)相比,该网络输出的的总数为(个人:这段的L、K作者有些乱用,如果这里看不懂,请看原文自己琢磨,按照个人理解加修正,就是(L+2)×K
 个输出  )。

混合系数必须满足下面的条件:

这可以通过softmax输出计算得到:

同样的,方差必须满足,所以可以表示成对应网络激活值的指数形式:

最后,因为均值有真实成分(real components)(),它们可以直接用网络的输出激活值表示:

其中该网络的权重和偏置构成的向量是混合密度网络的学习参数,可以用最大似然或者最小化似然函数定义的负lg函数定义的误差函数计算得到,该误差函数为:

为了最小化误差函数,需要计算关于的导师。这可以通过使用标准的BP方法计算,因为是上面的误差函数是不同项的和,所以可以针对每个独立的训练样本,先求出它们各自的导数,然后加起来就行。因为我们需要处理的是混合分布,所以将混合系数看成是依赖的先验概率是很方便的,对应的后验概率为:

这里表示。并且关于网络输出激活值的导数决定着混合系数的值:

同样的,关于网络输出的导数还决定着成分的均值:

最后,关于网络输出激活值的导数还决定着成分的方差:

接下来通过介绍一个toy的逆问题的例子来说明混合密度网络的用法,如下图:

图5.6.4 :(a)在图5.6.2呈现的数据上训练一个混合密度网络(其中有三个核函数),混合系数为关于 x 的函数。该模型有3个高斯成分,网络结构:1个2层NN的网络和5个隐藏单元(tanh激活函数),9个输出(3个均值、3个方差、3个混合系数)。当x的值很小或者很大的时候,目标变量的条件概率密度是单峰的,只有在其中一个核的先验概率值很大,而且
x 的值处在中间位置,这时候条件密度是三峰的,这时候三个混合系数才有着相似大小的值;(b)均值的图示,其中相同的颜色为同一个核函数(即网络成分);(c)混合密度网络的目标变量对应的条件概率密度的轮廓图;(d)条件密度的条件逼近模型的图示,图中红点所示。

上图呈现了混合系数、均值、和对应于的条件密度轮廓图。NN的输出(也就是混合模型的参数)必须是输入变量的连续单值函数。不过从上图的(c)中可以发现该模型可以生成一个条件密度,对于某些x值是单峰的,而对于其他的通过调制混合成分的振幅使得值是三峰的。

一旦混合密度网络训练好了,它就能够预测在给定输入向量的情况下目标变量的条件密度函数。该条件密度是对目标变量生成的完整描述。从这个密度函数中,我们可以计算不同应用中不同的感兴趣数值,最简单的就是对应着目标变量条件平均的均值(期望):

这里用到了式子(5.6.1)。因为通过最小平方训练的标准NN可以逼近条件均值,所以可以发现混合密度网络可以将传统的最小平方当成其一个特殊情况。当然,正如前面说的,对于一个多模态分布来说,条件均值的值也是有限制的。

关于条件平均的密度函数的方差:

这里用到了式子(5.6.1)和上面那个式子。这比对应的最小平方更通用是因为其方差是关于X的函数。

总结:对于多模态分布,条件均值对数据的表示是很差的。例如在简单机器人手臂控制中,需要挑两个可能的联合角度中的一个来得到合适的手臂末端位置,然而这两个解的平均并不是一个解(个人:即这里不满足闭包)。在这种情况下,条件模型可能有更多的值,因为混合密度网络的条件模型没有个单一的解析解,所以需要数值迭代。一个简单的方法就是采用那个最可能成分的均值(即混合系数最大的那个成分)。如图5.6.4的(d)。

5.7 贝叶斯NN

到目前为止关于NN的讨论都是通过最大似然来决定网络的参数(权重和偏置)。正则化的最大似然可以看成是一个MAP(最大后验),其中正则化可以被认为是先验参数分布的log函数。不过在贝叶斯解决方法中,还需要基于这些参数分布进行边缘化才能进行预测。在3.3节中,针对简单的线性回归模型(假设是高斯噪音),提出了一个贝叶斯解决方法,其中可以看到后验分布(高斯)可以准确的被计算,而且可以在封闭形式(closed form)中找到可预测的分布。而在多层网络中,网络参数的的高度非线性依赖意味着不能找到准确的贝叶斯解决方法了,因为后验分布的log函数已经是非凸函数了,也就是在误差函数中会有多个极小值存在。

在第十章介绍的可变推论可以用在贝叶斯NN上,通过对后验分布使用一个因子化的高斯逼近和一个全方差(fullcovariance)高斯。接下来将会用一个高斯来逼近后验分布,以真正的后验作为模型的中心。然后假设高斯的方差很小以至于网络函数对于参数空间上的参数来说逼近于线性,并且后验概率显然是非零的。有了这两个逼近方法,可以将之前介绍的线性回归和分类结果用到这里。并使用点估计来获得超参数,并比较几种可替代的模型。

5.7.1 后验参数分布

假设我们需要预测一个单一连续目标变量t ,输入为向量 x 。我们这里先假设条件分布是高斯,形式如下:

                                                          (5.7.1.1)

同样的,选择基于权重W 的先验分布为高斯:

                                                                      (5.7.1.2)

假设数据是i.i.d的,样本为,对应的目标值,似然函数如下:

                                   (5.7.1.3)

得到的后验分布为:

                                               (5.7.1.4)

作为在W 上的非线性依赖函数来说,它就是非高斯了。我们可以通过使用拉普拉斯逼近的方法来得到一个有关后验分布的高斯逼近。所以,首先需要找到后验的一个局部最大值,而这可以通过数值优化迭代来完成。和之前一样,对后验的log函数计算最大值往往比较方便:

                         (5.7.1.5)

这对应着一个正则化后的平方误差和函数。假设此时都是固定的,我们可以找到后验的一个最大值,表示成。通过标准的非线性优化算法比如共轭梯度来计算,并使用BP计算所需要的导数。

假设已经找到了模型的,现在可以通过计算负log后验分布的二阶导数矩阵来建立一个局部高斯逼近:

                                            (5.7.1.6)

这里H 是hessian矩阵,平方和函数关于W的二阶导数矩阵。对应的后验高斯逼近可以从(4.134)中得到:

                                             (5.7.1.7)

通过对后验分布进行边缘操作得到预测变量的分布:

                                  (5.7.1.8)

然而,就算是对后验进行高斯逼近,该积分还是难于分析的,因为网络函数是非线性的。所以现在假设相比于的W的可变范围来说,后验分布的方差是很小的,这样就能够对网络函数围绕着进行泰勒展开,然后只保留线性部分:

                      (5.7.1.9)

这里假定:

                                                   (5.7.1.10)

这样就得到了一个为高斯分布的线性高斯模型,其中的高斯的均值为W的线性函数:

                   (5.7.1.11)

然后通过使用(2.115)的通用结果的边缘分布得到:

                                      (5.7.1.12)

其中依赖输入的方差为:

                                                              (5.7.1.13)

从上面的式子可以看出预测分布是一个高斯分布,它的均值通过计算得到。该方差有两项。第一项为从目标变量的内在噪音获得;第二项为X依赖项,表示内插值中的不确定性,因为模型参数W是不确定的。

5.7.2 超参数优化

5.7.3 用于分类的贝叶斯NN

2015/07/27,第0次修改!

PRML5-神经网络(2)的更多相关文章

  1. 今天开始学Pattern Recognition and Machine Learning (PRML),章节5.2-5.3,Neural Networks神经网络训练(BP算法)

    转载请注明出处:http://www.cnblogs.com/xbinworld/p/4265530.html 这一篇是整个第五章的精华了,会重点介绍一下Neural Networks的训练方法——反 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  4. 马里奥AI实现方式探索 ——神经网络+增强学习

    [TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...

  5. 卷积神经网络提取特征并用于SVM

    模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...

  6. 如何用卷积神经网络CNN识别手写数字集?

    前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...

  7. 用Tensorflow让神经网络自动创造音乐

    #————————————————————————本文禁止转载,禁止用于各类讲座及ppt中,违者必究————————————————————————# 前几天看到一个有意思的分享,大意是讲如何用Ten ...

  8. 一文弄懂神经网络中的反向传播法——BackPropagation

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  9. BP神经网络原理及python实现

    [废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...

  10. [Machine Learning & Algorithm] 神经网络基础

    目前,深度学习(Deep Learning,简称DL)在算法领域可谓是大红大紫,现在不只是互联网.人工智能,生活中的各大领域都能反映出深度学习引领的巨大变革.要学习深度学习,那么首先要熟悉神经网络(N ...

随机推荐

  1. MySql概念及常用Sql

    MySQL是一个关系型数据库管理系统 MySQL启动命令: 本机mysql地址D:\pefession\mySql\mysql-8.0.12-winx64\bin 启动服务:net start mys ...

  2. apicloud 自定义模块引用aar

    apicloud 引入aar包,如果使用apicloud自定义模块的话,如果是一般的jar包,我们需要把jar down到本地然后添加到module的libs中就可以了(不要想着用远程地址了,既然用a ...

  3. js-ES6学习笔记-let命令

    1.let命令 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. for循环的计数器,就很合适使用let命令. 下面的代码如果使用var ...

  4. CentOS7下安装caffe(包括ffmpeg\boost\opencv)

    因为有项目想采用深度学习,而caffe是深度学习框架中比较理想的一款,并且跨平台,以及可以采用python/matlab的方式进行调用等优势,所以想在服务器上安装,下面就开始了血泪史... 服务器是阿 ...

  5. Java内部类的介绍

    在Java的面向对象编程中,由于Java并没有类似C++的多重继承,所以采用了内部类这样的方式,现在介绍几种内部类的常见情况. 公开内部类 即由public关键词修饰的内部类,内部类作为外部类的一个成 ...

  6. error LNK2001: 无法解析的外部符号 _H5T_NATIVE_DOUBLE_g

    最近在编译一个C++动态链接库时遇到一个奇怪的问题,我们基于GsTL实现了GIS地统计分析中的半变异函数分析以及 克吕格插值,GsTL在计算半变异函数时依赖HDF5库,当添加了HDF5的头文件.lib ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  8. Lorem 占位符

    Web开发者通常用lorem ipsum text来做占位符,占位符就是占着位置的一些文字,没有实际意义. 为什么叫lorem ipsum text呢? 是因为lorem ipsum是古罗马西塞罗谚语 ...

  9. Centos/Linux下调整分区大小(以home和根分区为例)

    转载于  https://blog.csdn.net/qq_33233768/article/details/65437609   在安装新系统的时候,有时候没法预估或者说错误的划分了分区大小,常常会 ...

  10. JRebel for Hybris ,Idea and Windows

    参考: Jrebel官网参考地址:https://manuals.zeroturnaround.com/jrebel/standalone/hybris.html Wiki Hybris参考地址:ht ...