贝叶斯神经网络

贝叶斯决策

贝叶斯决策是求这样的问题:

即在已知一个数据集$D$的情况下,求数据样本$x$出现的概率$P(x|D)$。上面的式子将$P(x|D)$积分展开,$P(x|\theta,D)$表示模型参数是$\theta$在数据集$D$上预测样本$x$出现的概率,是一个似然函数。而$P(\theta|D)$是关于参数$\theta$的后验概率。上面的式子可以变成这样的形式:

表示以概率$p(\theta|D)$采样参数$\theta$,得到$P(x|\theta,D)$的期望。这个期望并不好求,因为需要穷举所有的$\theta$,显然这是不可能的,注意到似然函数$P(x|\theta,D)$是容易求解的,所以我们可以使用蒙特卡洛方法,按照概率$p(\theta|D)$采样若干参数$\theta$,计算$P(x|\theta,D)$的平均值作为期望的近似。现在问题的关键就是求$P(\theta|D)$,只要求出$P(\theta|D)$,就可以使用蒙特卡洛方法求出$P(x|D)$了。

贝叶斯推断

贝叶斯推断是求解后验概率,用到变分推断的方法。现在我们需要求后验概率$P(\theta|D)$,根据贝叶斯公式我们有:

可以看到,如果想通过贝叶斯公式求后验概率,需要求出边缘分布$P(D)$,但是这个积分很不好求。变分推断的方法是假设后验$P(\theta|D)$和先验$P(\theta)$符合同一种分布由不同参数控制,设$P(\theta|\lambda)$由参数$\lambda$控制,现在的目标是调整参数$\lambda$使得分布$P(\theta|\lambda)$近似$P(\theta|D)$,即要求两个分布的相对熵最小:

将关于$P(\theta|D)$的贝叶斯公式代入上式,得到:

求上式的最小值,$\lambda$的取值与$P(D)$无关,所以简化成:

上式求和第一项是后验分布和先验分布的KL散度值,第二项是似然函数$P(D|\theta)$在分布$P(\theta|\lambda)$下的期望。继续简化式子,得到:

在求解贝叶斯决策的时候我们用到了蒙特卡洛方法近似,这里同样也可以使用蒙特卡洛方法近似,得到:

上式表示对第$i$个样本$D_i$,采样第$i$个参数$\theta_i$,对采样的结果求期望,这个期望近似等于$L(\lambda)$。采用梯度下降法寻找最佳的$\lambda$,发现$P(\theta_i)$和$P(D_i|\theta_i)$无法对$\lambda$求导,所以需要用到一个技巧。假设$P(\theta|\lambda)$是一个均值为$\lambda_1$,标准差为$\lambda_2$的分布,在使用$P(\theta|\lambda)$对$\theta$采样时可以先在标准正态分布中采样,然后将采样结果乘上$\lambda_2$加上$\lambda_1$,得到在参数$\lambda$下的采样结果。这样做使得$\theta_i$与参数$\lambda$有关,所以求梯度时,可以通过路径$\frac{\partial \theta_i}{\partial \lambda}$求得关于$\lambda$的梯度。这种做法主要是利用了这样一个性质:

在采样的分布$p(\theta)$与$\lambda$无关时,上式总是成立。已知标准正态分布与参数$\lambda$无关,此时期望的梯度等于梯度的期望,所以可以对采样的样本求梯度,然后再对梯度求平均近似对期望求梯度。

综上,我们在学习每个样本时都采样一个参数,计算$L(\lambda)$,然后使用梯度下降法不断更新$\lambda$直到收敛,最后我们就可以使用$P(\theta|\lambda)$近似后验分布$P(\theta|D)$了。

贝叶斯神经网络

贝叶斯神经网络与贝叶斯网络是不同的,贝叶斯网络是有向图的概率图模型,而贝叶斯神经网络就是求神经网络的后验概率。普通的神经网络是判别模型,求的是最大似然,当目标函数添加了正则项则是求最大后验。贝叶斯神经网络并不是求最大似然和最大后验,而是要求神经网络参数的后验分布。为什么要求神经网络的后验分布,如果我们知道了后验分布就可以利用后验分布求贝叶斯决策问题,而且相比起普通神经网络,贝叶斯神经网络知道参数的分布而不只是一个最佳参数,后验分布可以作为新数据集的先验分布而求最大后验只能假设先验分布符合某种分布等等,总之知道一个分布比知道一个值更有作为。

上一章节讲述的贝叶斯推断过程,将参数$\theta$看作一个神经网络的参数,就是贝叶斯神经网络的求解过程。神经网络是多层的,假设输入$X$是确定的,则输出$Y$取决于:

其中$W$是模型参数,符合一个特定分布,比如高斯分布。那么Y的分布等于W的分布经过线性变换$X$,所以$Y$的分布在X确定的情况下是确定,由W的分布确定。在训练时,可以不用采样模型参数W,而是直接采样每一层的输出Y,直接利用Y计算每一层W的梯度,从而更新W的分布参数。这样做可以加速训练速度。

最后在这里贴上一篇非常棒的文章,本文的许多内容都有参考这篇文章:https://zhuanlan.zhihu.com/p/81170602