本文内容摘自:
https://stefano-cosentino.medium.com/deep-bayesian-neural-networks-952763a9537
任何深度网络都有参数,通常以权重 ( w 1 , w 2 , . . . ) (w_1, w_2, ...) (w1,w2,...) 和偏差 ( b 1 , b 2 , . . . ) (b_1, b_2, ...) (b1,b2,...)的形式存在。传统的方法(非贝叶斯)是通过最大似然估计(maximum likelihood estimation)仅学习这些参数的最优值。这些值都是标量(scalars),如 w 1 = 0.8 w_1=0.8 w1=0.8 或 b 1 = 3.1 b_1=3.1 b1=3.1。
而,贝叶斯方法对每个参数相关的分布(distributions)感兴趣。例如,在训练贝叶斯网络收敛后,上述的两个参数可能可以由以下两条高斯曲线(Gaussian curves)描述。
拥有一个分布而不是单一的值有很多好处。首先,可以从分布中多次取样,查看对模型预测的影响。例如,经过多次取样,模型给出一致的预测,那么我们可以说网络对其做出的预测是自信的(confident)。
估计这些参数的分布是不容易的。这通常称为后验密度(posterior densities),并使用贝叶斯公式进行估计。可以表示为:
p ( w ∣ x , y ) = p ( x , y ∣ w ) p ( w ) p ( x , y ) = p ( x , y ∣ w ) p ( w ) ∫ p ( x , y ∣ w ) p ( w ) d w p(w|x,y) = \frac{p(x,y|w)p(w)}{p(x,y)} =\frac{p(x,y|w)p(w)}{\int p(x,y|w)p(w)dw} p(w∣x,y)=p(x,y)p(x,y∣w)p(w)=∫p(x,y∣w)p(w)dwp(x,y∣w)p(w)
难点是分母----也称为模型证据(model evidence)。它需要对所有可能的参数值(即所有权重和偏差空间)进行积分,而这在实际中是做不到的。
做为替代,可以使用以下的伪数字方法,去近似积分的解。
由于计算贝叶斯公式的积分的解很难,可以通过使用 MCMC(马尔科夫链蒙特卡洛) 来近似积分的解。MCMC背后的原理真的很酷,建议大家阅读这个博客,通过代码和示例来理解 MCMC 背后的原理。撇开数学,这种方法是三个方法中最慢和最不吸引人的。
变分推理(variational inference)是一种估计密度函数的方法,通过选择一个我们已知的分布(例如高斯),并逐步改变其参数,直到它看起来像我们想要计算的那个分布,即后验。改变参数不再需要计算复杂的微积分,这是一个优化过程,导数通常比积分更容易计算。我们要优化的由我们自己"捏造"的分布称为变分分布(variational distribution)。
edwar
这样的函数包可以在几分钟内构建和运行贝叶斯网络。Monte Carlo dropout (蒙特卡洛 dropout) 是2016年提出的一个理论1,它通过使用一种称为 droput
的正则化方法提供了贝叶斯解释。
MC dropout 的关键思想是:dropout 可以用来进行变分推理,其中变分分布来自于伯努利分布。MC 指的是 dropout 的采样以"Monte Carlo " 的方式进行。
伯努利分布 (Bernoulli distribution),又名 0 − 1 0-1 0−1 分布,是一种离散型概率分布。若伯努利试验成功,则伯努利随机变量取值为 1 1 1;若试验失败,则取值为 0 0 0。
在实践中,通过 MC dropout 可以将传统网络变成贝叶斯网络(在训练和验证期间,通过对每一层使用 dropout);这相当于从伯努利分布中取样和度量模型的确信度(certainty)(多次取样预测的一致性)。也可以用 其他2 变分分布进行实验。
https://arxiv.org/abs/1506.02142 ↩︎
https://arxiv.org/abs/1611.01639 ↩︎