———— 天尽头,何处有香丘

首先作一则区分,贝叶斯网络是一种在图模型中应用贝叶斯公式的方法,而贝叶斯神经网络,则是一种解决传统神经网络中固定参数难以解释模型不确定性而导致的过拟合和泛化能力较弱的方法,本文讲述的贝叶斯神经网络。

贝叶斯神经网络 (Bayesian Neural Network)

传统的神经网络中,我们认为模型参数 [公式] 是固定的,存在最优参数 [公式] ,然后给模型参数赋一组初值 [公式] ,然后基于观测数据集 [公式] 训练模型使 [公式] 不断逼近 [公式] ,这个过程就是利用最大似然参数估计和梯度下降等算法学习最优模型参数的过程,学习的微观过程就是最大化给定参数 [公式] 在训练集 [公式] 上的似然函数 [公式] ,每次训练我们都认为 [公式] 定值,我们训练网络参数大都会采用这种方法。但是很多非常复杂的神经网络模型,动辄就有上千万的参数,而固定的参数和模型很容易在有限的训练数据上导致过拟合。在第六章,我们引入正则化,本质上是通过降低模型复杂度来减小过拟合,在第一章也有讨论这也可以当作是引入参数的先验;一种主流方法是在传统神经网络引入 Dropout,通过在训练过程中随机丢弃某些单元增加模型的不确定性来有效减少过拟合现象。

顺着这条思路,我们尝试在参数上引入不确定性,于是不再把 [公式] 当作固定参数,而是当作一个概率分布,很自然地,为了最大化不确定性,我们让 [公式] 服从高斯分布。相对应地,此时 [公式] 的先验不再是简单的正则项,而是对应的共轭先验分布,根据上一章可知高斯分布的共轭先验分布也应该是一个高斯分布,对应的后验分布也是一个高斯分布,我们最终目的就是找出这个后验高斯分布 [公式] ,同时还能利用参数的不确定性来度量模型的不确定性。

在第一篇文章中,我们讨论将贝叶斯公式应用到最大似然法,也是引入先验作为正则项,然后变成求最大后验,这是在⾼斯噪声假设下的简单线性回归模型的贝叶斯解。根据高斯噪声我们认为似然函数 [公式] 服从高斯分布,又因为似然分布均值是参数 [公式] 的简单线性组合,和先验分布一样指数项都是 [公式] 的二次型,所以后验分布 [公式] 的指数项也是一个关于 [公式] 的二次型,并且能进行精确计算。但在多层神经⽹络 [公式] 的情况下,似然分布均值亦为 [公式] ,那么后验高斯分布的指数项不再是参数 [公式] 的二次型,网络模型对于参数值的⾼度⾮线性意味着精确的贝叶斯⽅法不可⾏,而后验概率分布的对数⾮凸,正对应于误差函数中的多个局部极⼩值。对此我们需要借助其他方法来解决,比较常见的是变分推断 (variational inference) 法和拉普拉斯 (Laplace) 近似法。

1. 变分推断 (Variational Inference)

首先讨论变分法,这个方法有两条思路,分别是直接逼近后验分布以及从边缘概率分布入手。关于变分推断的详细内容在后续章节还会有讨论,此处只是简单使用。先说说直接逼近后验高斯的思路,这个思路很容易描述,就是我们已知后验分布 [公式] 是一个均值和方差未知的高斯分布,引入一个关于 [公式] 的高斯分布 [公式] 去逼近 [公式] ,假设 [公式] ,我们的目的就是使 [公式] 尽可能接近 [公式] 真实的均值和方差,可以使用 KL 散度来度量两个概率分布的差异,我们只需最小化 [公式] ,可以作如下推导

[公式]

其中第一行推导用了贝叶斯公式,第二行到第三行用了归一化和连续概率分布的期望,第三行第一项 [公式]  [公式] 无关可以忽略,第二项和第三项分别求 [公式] 与先验 [公式] 的相似度以及在 [公式] 服从 [公式] 假定的高斯分布的条件下似然函数 [公式] 期望值

推导出公式 (1) 的另一种思路是利用边缘概率分布,对于任意作用在数据集 [公式] 上的模型参数 [公式] ,我们最大化 [公式] 也就是最大化边缘概率分布,根据 Jensen 不等式,有

[公式]

这也被称为变分下限 (variational lower bound), [公式] 是对后验概率分布 [公式] 的变分近似。利用 KL 散度非负特性,公式 (2) 也可以通过公式 (1) 推导出来。

在传统神经网络或机器学习模型中,误差函数通常是似然函数 [公式] 的负对数,而在贝叶斯神经网络中,误差函数是 [公式] ,经过公式 (1) 推导可以写作

[公式]

也就是最小化似然函数 [公式] 的负对数和 [公式]  [公式] 的 KL 散度,与传统机器学习模型带正则项的误差函数对比,贝叶斯神经网络误差函数的似然函数项中, [公式] 不再是一个定值,在利用 [公式] 中的数据进行计算时,我们需要将 [公式] 服从高斯分布这一条件考虑进去;另外,正则项变成 [公式] 与先验的相似性度量,优化这个误差函数就是在两项代价函数之间取平衡。贝叶斯神经网络的似然项因为引入 [公式] 的积分 [公式] ,需要使用蒙特卡罗采样 (Monte Carlo sampling),即

[公式]

其中 [公式] 是每次训练中在 [公式]  [公式] 的采样次数,如果直接使用均值 [公式] 和方差 [公式] 采样会由于反向传播时不可求导造成训练过程不稳定,在此使用一种重参数化 (reparameterize) 的方法,即

[公式]

这意味着,我们在进行前向传播计算似然函数代价时,参数 [公式] 需要从公式 (5) 随机采样获得,这正好对应了贝叶斯神经网络似然函数的参数 [公式] 不再是一个定值,而是从一个高斯分布中近似采样获取。一般情况下为了减小计算量,我们把采样次数 [公式] 设为 1。

对于 [公式]  [公式] 的 KL 散度项,我们对积分进行离散化,同时假设先验 [公式] 服从 [公式] ,我们直接将高斯分布的形式代入,有

[公式]

第四步中 [公式] 表示 [公式] 中的第 [公式] 项元素,其中 [公式] ,从第四步到第五步的推导,根据原积分项,我们可知这一步也可以看做是分别求 [公式]  [公式]  [公式] 上的期望值,所有关于 [公式] 的项我们都可以写成求其期望的形式,整理这些项,即

[公式]

利用高斯分布均值和二阶矩的性质 [公式] ,即可从公式 (6) 第四步推出第五步。如同传统神经网络一样,我们一般让先验的均值为 0,方差为 1,所以 [公式]  [公式] 的 KL 散度项最终可化简为

[公式]

到这一步,我们已经推导出所有误差函数项的形式,利用梯度下降算法,我们就可以训练贝叶斯神经网络了。在上述过程中,由于我们假设参数 [公式] 服从高斯分布,在实际操作时使用了均值和方差两个参数,因此相比于普通的神经网络,参数数量为原来的 2 倍。当然我们实际上并不需要对所有参数都假设高斯分布,因为这样学习过程中会变得复杂并且很难收敛导致神经网络性能下降,通常我们只会对网络较低层进行学习,这样对输出也能保持最大的不确定性。

2. 拉普拉斯近似 (Laplace Approximation)

现在来讨论拉普拉斯近似法,这种方法同我们之前在简单线性回归问题上使用贝叶斯方法类似,就是用似然的高斯分布和先验高斯分布相乘进行归一化得到后验高斯分布,由于这三个分布的指数项都是关于参数 [公式] 的二次型,我们可以利用解析法求出精确的均值和方差,但上文提过在神经网络中,似然项高斯分布为 [公式] ,后验指数项不再是 [公式] 的二次型,这时候我们就需要借助拉普拉斯近似法。

拉普拉斯近似的⽬标是找到定义在⼀组连续变量上的概率密度的⾼斯近似。⾸先考虑单⼀连续变量 [公式] 的情形,假设分布 [公式] 的定义为

[公式]

其中 [公式] 是归⼀化系数,假定 [公式] 是未知的。在拉普拉斯⽅法中,⽬标是寻找⼀个⾼斯近似 [公式] ,它的中⼼位于 [公式] 众数的位置。寻找 [公式] 的众数,即寻找⼀个点 [公式] 使得 [公式] ,或者等价地

[公式]

⾼斯分布有⼀个性质,即它的对数是变量的⼆次函数。于是我们考虑 [公式] 以众数 [公式] 为中⼼的泰勒展开,即

[公式]

根据公式 (10),泰勒展开一阶项被消掉。两侧同时取指数,有

[公式]

这样,使⽤归⼀化的⾼斯分布的标准形式,就可以得到归⼀化的概率分布 [公式] ,即

[公式]

可以发现函数 [公式] 的二阶导的负数正好是高斯分布方差的倒数,⾼斯近似只在二阶导为负时有良好定义,也就是驻点 [公式] ⼀定是⼀个局部最⼤值。

现在来近似定义在 [公式] 维空间 [公式] 上的概率分布 [公式] 。在驻点 [公式] 处,梯度 [公式] 会消失。在驻点处展开,我们有

[公式]

其中 [公式] 的 Hessian 矩阵 [公式] 

[公式]

两边同时取指数,我们有

[公式]

再进行归一化,可得

[公式]

其中 [公式]  [公式] 的⾏列式。这个⾼斯分布有良好定义的前提是,精度矩阵 [公式] 是正定的,这表明驻点 [公式] ⼀定是⼀个局部最⼤值。

应⽤拉普拉斯近似,⾸先需要寻找众数 [公式] ,然后计算在那个众数位置上的 Hessian 矩阵。许多实际应⽤中的概率分布都是多峰的,因此根据考虑的峰值(众数)的不同,会有不同的拉普拉斯近似。根据中⼼极限定理,我们可以预见模型的后验概率会随着观测数据点的增多⽽越来越近似于⾼斯分布,因此在数据点相对较多的情况下,拉普拉斯近似会更有⽤。

现在来讨论在贝叶斯神经网络中应用拉普拉斯近似,考虑从输⼊向量 [公式] 预测单⼀连续⽬标变量 [公式] 的问题。我们假设条件概率分布 [公式] 是⼀个⾼斯分布,均值与 [公式] 有关,由神经⽹络模型的输出 [公式] 确定,⽅差倒数为 [公式]

[公式]

将权值 [公式] 的先验概率分布选为⾼斯分布,形式为

[公式]

对于 [公式] 次独⽴同分布的观测 [公式] ,对应⽬标值集合为 [公式] ,根据公式 (18) 似然函数为

[公式]

最终后验概率为

[公式]

由于指数项会同时出现 [公式]  [公式] 的项,并且二者是非线性关系,因此后验概率不是关于 [公式] 的高斯分布。

使⽤拉普拉斯近似,我们可以找到对于后验概率分布的⼀个⾼斯近似。为完成这点,⾸先找到后验概率分布的⼀个局部最⼤值,这必须使⽤迭代的数值最优化算法才能找到。先最⼤化后验概率分布的对数

[公式]

上式直接代入多元高斯分布概率密度函数即可得出,其中 [公式] 为常数,这对应于⼀个正则化的平⽅和误差函数。假设 [公式]  [公式] 都是定值,使⽤误差反向传播计算所需的导数,找到后验概率的最⼤值,最大值的位置记作 [公式] ,这也是 [公式] 的众数,然后通过计算后验概率分布的负对数的⼆阶导数,建⽴⼀个局部的⾼斯近似。根据公式 (22),负对数后验概率的⼆阶导数为

[公式]

[公式] 是⼀个 Hessian 矩阵,由平⽅和误差函数关于 [公式] 的分量组成。这样,后验概率对应的⾼斯近似由公式 (17) 给出,形式为

[公式]

与变分法直接训练求出后验分布均值和方差的做法不同,拉普拉斯近似法更关心在数据集 [公式] 上训练后的模型在对新数据 [公式] 的预测,预测分布可以边缘概率分布的形式写成

[公式]

然⽽,即使对后验分布进行了⾼斯近似,这个积分仍然⽆法得到解析解,因为神经网络 [公式]  [公式] 的关系是⾮线性的。对此需要假设,与 [公式] 发⽣变化造成的 [公式] 的变化幅度相⽐,后验概率分布发生变化时 [公式] 的变化更小,也就是 [公式] 的方差更大,这使得神经网络可以在 [公式] 附近进⾏泰勒展开,并且只保留一阶展开项,因为这意味着 [公式] 附近 [公式] 的变化幅度较小,使用一阶近似就可以获得较为精确的解,可得

[公式]

其中 [公式] 。使⽤这个近似,我们就可得到了⼀个指数项为 [公式] 的线性函数的⾼斯分布,形式为

[公式]

使用上一章高斯分布的公式 (22) 给出的边缘分布 [公式] 的⼀般结果,得到

[公式]

直接将高斯分布一章中公式 (22)中的 [公式] 替换为 [公式]  [公式] 替换为 [公式] ,就可以得出公式 (28) 的形式。可以看出预测分布 [公式] 是⼀个均值为 [公式] ,⽅差由两项组成的⾼斯分布。方差第⼀项来⾃⽬标变量的固有噪声,第⼆项是⼀个与 [公式] 相关的项,表示由于模型参数 [公式] 的不确定性造成的内插的不确定性。

至此我们根据后验参数分布所得的预测分布已经确定,拉普拉斯近似法实际上还是一种解析法,其核心是巧妙利用了在局部极大值点可以近似为高斯分布的峰值的特性,进而通过二阶导计算这个高斯分布的方差,最终的目的还是使后验分布的指数项为参数 [公式] 的二次型,这样就可以使用高斯分布的贝叶斯定理的一般性质。关于超参数 [公式] 的确定有进一步的讨论,比较复杂,本文不作赘述。