机器学习中使用的神经网络第十讲笔记
Posted Marcovaldo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习中使用的神经网络第十讲笔记相关的知识,希望对你有一定的参考价值。
Geoffery Hinton教授的Neuron Networks for Machine Learning的第十讲介绍了如何combine模型,并进一步从实际应用的角度介绍了完全贝叶斯方法。
Why it helps to combine models
这一小节,我们讨论在做预测时为什么要结合许多模型。使用多个模型可以在拟合真正的规则和拟合样本错误之间做一个很好的折中。
我们已经知道,当训练数据比较少时容易出现过拟合,如果我们平均一下许多不同模型的预测,那我们就可以降低过拟合的程度。对于回归来讲,当模型的capacity较弱时容易出现high-bias;当模型的capacity太强时,模型就会过多的拟合样本错误,从而出现high-variance。而结合多个不同的模型,我们就可以实现一个更好的折中。
下面我们来分析如何对单独的模型(individual model)和平均的模型(an average of models)进行比较分析。在任意一个单个的测试集上,一些单独的模型的预测结果可能要比结合的模型的预测要好,这很正常。而在不同的样本上,不同的单独的预测器可各有优劣。如果单个的预测器之间相差很大的话,那平均下来,结合后的预测器肯定比单个的都要强,所以我们应该尝试着让单个的预测器差距大一些()犯的错很不相同,但各自的性能还是可以的。
现在,我们来看一下网络结合背后的数学推导。如下图所示,
下图给出了一个示意图,表示了不同的预测和目标输出的一个差距:红色的表示不好的预测,其与目标输出t的距离要比
然后我们再做一个数学上的计算,我们假设
下图列出了很多让预测器不同的方法:
下图给出了通过使用不同的训练数据集来得到不同模型的方法:
Mixtures of experts
本小节介绍多专家模型(the mixture of experts model),该模型的思想是训练多个神经网络(也就是多个专家),每个神经网络(专家)被指定(specialize)应用于数据集的不同部分。这就是说,数据集可能有着多个不同的来源(different regimes,意思是说数据集中的数据的产生方式不同,这里我翻译成了“不同的来源”),不同来源提供的数据差距较大(但真实),因此我们为每一个来源的数据一个指定的神经网络来处理,而且模型还有一个managing neural net用来判断一个输入应该交给哪一个神经网络来处理。
对于较小的数据集,该模型的表现可能不太好,但随着数据集规模的增大,该模型的表现会有明显的提高。更重要的是,单个的模型往往善于处理一部分数据,不擅长处理另外一部分数据(在这部分数据上犯错多),而多专家系统则很好的解决了这个问题:系统中的每一个神经网络,也就是每一个专家都会有一个擅长的数据区域,在这组区域上其要比其他专家表现得好。
下图给出了局部模型(very local models)与全局模型(fully global models)的一个比较。
多专家系统是单一全局模型或者多个局部模型的一个很好的折中,但我们现在面临的一个很重要的问题就是如何将数据集分成不同的部分。下图展示了划分数据集的几种方法:按照输入到输出的映射,可以将图中数据分成两组,一组对应那条红色的抛物线,一组对应那条绿色的抛物线;仅按照输入作一个聚类的话,就被图中那条蓝色直线分成了两类。这里划分训练数据集的目的在于能够从每一个cluster中的输入和输出很好得得到一个局部模型。
下面我们来介绍使模型cooperate的损失函数,下图使用了前一小节介绍的东西,这样训练得来的模型要比单独训练每个模型的性能更好。
下图给出了averaging models为什么能够使模型cooperation的原因。下图右侧是除模型i外所有模型对某一输入的预测的平均,中间的t是目标输出,左侧
但实际上,我们希望做的是让
多专家系统使用了第二种损失函数的形式,下图给出了示意图。在多专家系统中有一个softmax gating network,对于一个给定的输入,该网络输出每一个专家对该输入的处理的可靠度。而系统最终的损失函数就是每个专家的输出与目标的差值平方再乘上可靠度。
下图给出了两个偏导。前一个偏导得到的梯度表示一个专家应做的修正:如果该专家的可靠度(
在这一小节的最后hinton给出了多专家系统的一个更好的损失函数。
The idea of full Bayesian learning
这一小节继续介绍完全贝叶斯方法,介绍在实际中如何应用它。在完全贝叶斯方法中,我们不是尝试着去找到仅仅一组参数设置,而是去求出所有可能的参数设置的后验概率分布(也就是对于每一组可能的参数设置都有一个后验概率密度,积分起来恰为一)。然后在预测阶段,我们计算出所有参数设置对应的预测值,然后每个预测值乘上该参数设置的后验概率再求和得到一个加权值,这个加权值就是模型最后的输出。当然,这两个过程都需要做大量的计算工作。还有一点,完全贝叶斯方法在较小的数据集上仍可以使用较复杂的模型。
前面我们已经讲过,复杂模型在较小的数据集上会出现过拟合的问题。但前面说的过拟合是发生在我们前面得到的那个最佳参数设置上,完全贝叶斯方法要所有可能的参数设置,这就大大较小了过拟合的可能。在较小的数据集上,完全贝叶斯方法考虑的参数设置会特别多(可用的参数设置所在的空间比较大),因此最终的预测也会很模糊。随着数据集的增大,完全贝叶斯考虑的参数设置越来越有指向性(可用参数设置所在空间变得越来越小),最终的预测也会越来越准确。
下图给出了拟合的一个典型例子:右上图中有六个数据点,红色曲线表示一条五次多项式,明显过拟合。但是如果我们基于一个合理的先验条件,如多项式的次数为5,去使用完全贝叶斯方法求得所有可能的参数设置。下图右下给出了几条可能的参数设置对应的曲线。可以看到,这些曲线差别很大,但如果由所有曲线的预测值去计算出一个加权值,会发现这些加权值大概会落在绿色直线的附近。
对于为什么数据集的大小会影响我们的先验条件和模型的复杂度,从贝叶斯的角度出发是没有原因的。下面介绍在一个仅有几个参数的神经网络中去近似的使用完全贝叶斯学习。
我们在参数空间上放置一个网格(a grid),然后对每一个参数选定几个值,然后我们就得到了参数空间上的若干网格点。每一个网格点对应一组参数,我们就可以判断每一组参数预测数据的性能如何。这里没有引入梯度下降,我们需要考虑的只是参数空间中的一系列参数点。一旦确定了每个参数点的后验概率,我们就可以对预测集中的数据做预测了。整个过程的计算量都很大,但在较小的数据集上,该方法要比最大似然法或者最大后验概率法好很多。下图中给出了一个概率计算公式。
下图给出了完全贝叶斯学习的一个例子。
Making full Bayesian learning practical
后面两小节明天更新。
Dropout
以上是关于机器学习中使用的神经网络第十讲笔记的主要内容,如果未能解决你的问题,请参考以下文章
Android第十讲笔记(WebView,SharedPreferences)