Bayes方法的理解:
目录
序言
本文结合了文末的bayes理论的经典论文《Bayesian Deep Learning and a Probabilistic Perspective of Generalization》,结合部分自己和博客的理解写成,大部分内容翻译自博客,加上了自己的改动。希望能弥补bayes方法与理论的gap。
首先文中术语对应:
1.support 数据支持
2.inductive biases 感应偏差
Bayes理论最突出的特点便是其对于边际分布的理解与应用。传统的神经网络受制于数据的限制,Bayes边际分布可以大幅提升现代神经网络的准确性和稳定性。
在论文中说明了深度集成模型可以有效逼近Bayes边际分布,并且对于神经网络权重的朴素先验分布对应的函数空间函数进行了探索,解释了神经网络泛化性好的原因。
对于神经网络为什么具有很好的泛化性,文章给出了解释。“从概率的角度来看,泛化性依赖于两个性质,数据支持和模型的感应偏差。
数据支持代表模型能拟合的生成函数的范围,感应偏差对应着模型对于特定数据集的拟合程度。
一个线性函数的数据支持很差,因为它甚至不能拟合一个二次函数。而一个MLP有高度灵活性,但是它的支持在数据集间分布过于分散,导致对于许多图形数据集不能有很好的特征提取能力。而卷积神经网络展现出了在数据支持和感应偏差间很好的平衡。
图片的纵轴表示了模型拟合特定数据集的能力。即感应偏差,也是Bayesian evidence,或者是边际似然(我们的第一个Bayes术语!)
一个好的模型不仅要能够表示真正的数据分布,并且对于数据的变化应该要有很好的稳定性。Bayes后验在正确的感应偏差时应该收缩到正确的解。而另一方面,先验假设应该足够广使得模型是函数空间可达的。
在文章中作者重点强调:
“Bayes方法关键的性质就是边际分布而不是最优化理论,我们用参数的后验概率来拟合最优解,而不是在一组参数上直接求最优”
回到Bayes方法:
Bayes学派的对立角度就是频率学派,即绝大多数机器学习文献里遇到的。
频率学派:
在机器学习中,频率学派的目的是优化一个损失函数,获得参数的最优解。一个例子就是分类任务中的cross-entropy损失函数。最常用的优化方法就是梯度下降法。在SGD模型中,参数往梯度下降最快的方向迭代更新。最终得到的结果就是对于相同的输入,更新的参数设置可以让输出更接近于目标真实值。
从概率的角度来看,频率学派就是想最大化似然函数 p ( D ∣ w , M ) p(\mathcal{D}|w,\mathcal{M}) p(D∣w,M)即选择最优的参数w,使得数据集D在模型M上出现的概率最大。例如,语言模型里面输出了对于语料库的一个分布,意味着每个单词成为下一个单词的概率。但是实际上,这种极大似然可以看作后面要讲的极大后验的特殊情形。(用均匀分布作为先验分布)
Bayes学派:
Bayes方法中的一个关键点就是度量不确定性。所以,不用参数点估计,bayes方法定义了关于参数的概率分布。(后验分布),代表了我们对于参数取值的一种估计。我们用Bayes定理来计算后验分布。这个定理是Bayes的核心。
在得到任何观察数据之前,我们首先假定参数有一个先验分布p(W)。
下一步,利用我们已知的数据集,我们可以更新先验估计P(D|w) 。这个量和我们在频率学派中看到的最大似然函数是一样的。它告诉来我们当前观测的数据集于参数w的关系。换句话说,就是模型拟合/生成当前数据集的能力。似然函数是参数w的函数。
为了获得有效的后验分布,我们还需要对于概率进行标准化。亦即对于所有的参数选择进行边际化。标准化的常数,与参数无关(分母)称之为Bayesian evidence, 或者边际似然。
这个命名实际上是带有启发性的,因为它对于我们判断模型到底有多好提供了evidence。模型到底有多好即考虑所有参数选择在内。我们有时会将 p ( D ∣ M ) p(\mathcal{D}|\mathcal{M}) p(D∣M)包括在内,这实际上是将不同模型选择的不同参数空间进行了对比。实际上,这正是论文中对于CNN,MLP,线性模型进行的对比。
bayes推断和边际化:
我们现在来到了问题的核心。bayes推断是寻找关于参数w的后验分布的过程。这与频率学派关心寻找参数w的最优解截然不同。我们知道,计算后验我们必须要对所有的参数空间进行边际化。实际上,这通常是非常困难甚至是不可能做到的。(因为参数取值很复杂)后验里不可计算的积分使得我们寻求一些其他的方法来学习参数。
不同于上面的梯度下降,Bayes学派通常使用抽样的方法,例如MCMC方法(蒙特卡洛抽样),或者变分推断的方法来模拟后验分布。这些方法也被用到生成式模型,如VAE中。还有较新的方法如 flow的方法等等。
后验分布在实际中如何使用:
既然我们已经理解了Bayes后验分布,那么实际当中应该如何应用?给定一个新的未观测语句x,我们应该如何预测下一个单词y?
MAP估计:
我们可以单纯的拿出模型参数的后验分布,然后选择参数分布中概率最高的那一个值。这种方法叫最大后验估计(MAP)但是,如果只是为了估计一个新的点,就如此大费周章不是有点得不偿失吗(除非所有的后验局部最优点都聚集在一个点周围)因为MAP只提供了一个点估计,它不是完全的Bayes风格的a处理。
预测分布(Full Predictive Distribution):
完全的Bayes风格应该是指定一个预测分布p(y|D,x)
其中
上式定义了类标签y给定新的输入x,数据集D的概率表达。为了计算这一概率表达,我们又一次需要边际化我们的参数空间!我们将后验概率与y关于x,参数w的条件概率相乘并积分,这叫做 bayes平均,BMA。我们对于所有的模型和参数选择(这里只有参数)作了加权平均。 预测分布是边际化中仅次于后验分布重要性的分布。对一个具体的数据,如同:
逼近预测分布:
现在我们知道,计算预测分布的准确形式通常是计算昂贵的。所以另一种使用后验的方法是抽样产生一些参数组合,再结合模型进行计算。也就是所谓的蒙特卡洛逼近。这让我们联想到了集成模型,对于同样的模型架构,利用不同的参数初始化进行训练。现在我们再读摘要的那段话,也许会有新的体会:
“深度集成模型可以有效逼近Bayes边际分布,我们还提出了一种相关方法可以进一步提高预测分布的逼近“
Bayesian Deep Learning:
一个bayes深度网络就是运用神经网络进行bayes后验估计。更准确的说,对于每一个参数都指定对应的先验分布。如此庞大的参数空间,进行后验推断是非常困难的。所以为什么要进行bayes深度学习呢?
一个非常经典的回答就是获得不确定性的真实度量(或者说刻度)因为真实的神经网络经常会得到“过于自信”的预测(过拟合),此时就不是一个好的刻度。然而bayes网络对于大的参数空间有很好的效果,对于结合不同的函数形式,bayes模型非常有效。
近年bayes深度学习的例子:
Monte Carlo Dropout:
dropout实际上可以看作一种逼近bayes推断,在测试的时候也可以使用,可以得到不同的参数选择。
SWAG
Stochastic weight averaging Gaussian
本文内容结合博客并加以修改:
1.A Comprehensive Introduction to Bayesian Deep Learning
原文地址传送门
2.Bayesian Deep Learning and a Probabilistic Perspective of Generalization
论文传送门
欢迎评论与指正!