通过优化的标准神经网络训练(从概率的角度来看)等同于权重的最大似然估计(MLE)。由于许多原因,这往往是不能令人满意的 —— 使用 MLE 会忽略在适当的权重值中可能存在的任何不确定性,即无法正确评估训练数据中的不确定性,从实际的角度来看,这种类型的训练容易出现过拟合现象。
对此的一个解决方案是引入正则化(从贝叶斯的角度来看,这相当于在权重上引入先验)。如果我们可以通过规范模型来解决过度自信决策和防止模型过度拟合的问题,那为什么我们需要贝叶斯神经网络?答案是: 当前神经网络架构中缺少预测中的不确定性度量,但贝叶斯神经网络将其纳入其中 。BNN 在特定环境中很重要,特别是当我们非常关心不确定性时,贝叶斯方法自然地解释了参数估计中的不确定性,并且可以将这种不确定性传播到预测中。
深度神经网络已成功应用于许多领域,包括非常敏感的领域,如医疗保健,安全性,欺诈性交易等等。这些领域在很大程度上依赖于模型的预测准确性,甚至一个过度自信的决策也可能导致一个大问题。此外,这些领域具有非常不平衡的数据集(百万个交易中的一个是欺诈性交易,百分之五的癌症检测结果是阳性,不到百分之一的电子邮件是垃圾邮件),容易导致该模型过度拟合。
从概率论的角度来看,使用单点估计权重以进行分类是不合理的。而贝叶斯神经网络对于过拟合更加鲁棒,并且可以从小数据集中轻松学习。 贝叶斯方法将其参数以概率分布的形式表示以提供不确定性估计;同时,通过使用先验概率分布的形式来表示参数,训练期间在许多模型上计算平均值,这给网络提供了正则化效果,从而防止过度拟合 。
在标准神经网络中,权重由单个点表示。 而贝叶斯神经网络以分布形式表示权重,如下图所示:
即使使用少量参数,在贝叶斯神经网络中推断后验模型也是一项艰巨的任务,因此通常使用后验模型的近似值,变分推理是一种流行的方法。人们将使用简单的变分分布(例如高斯分布)对后验进行模拟,并尝试调整分布的参数使其尽可能接近真实的后验 —— 通过最小化这种简单变分分布和真实后验之间的 KL 散度来完成。
但是用于逼近 BNN 后验的变分方法在计算上可能相当昂贵,因为使用近似分布会大大增加模型参数的数量,但不会大幅增加模型容量。例如,使用 BNN 后验近似的高斯分布,模型参数的数量增加了一倍,但报告了与使用丢失的传统方法相同的预测性能。 这使得该方法在实践中不适合与 CNN 一起使用,因为参数数量的增加太昂贵。
关于神经网络权重的精确贝叶斯推断是难以处理的,因为参数的数量非常大,并且神经网络的函数形式不适合精确积分。 因此,我们用变分概率分布 q θ (w | D) 逼近难以处理的真实后验概率分布 p(w | D),它包括高斯分布的性质 μ∈ℝ d 和 σ∈ℝ d ,表示为 N(θ | μ,σ²),其中 d 是定义概率分布的参数总数。 这些高斯变分后验概率分布的形状由它们的方差 σ² 确定,表示每个模型参数的不确定性估计。
在观察数据之前定义先验概率分布,一旦观察到数据(训练数据),学习就发生并且分布变换为后验分布。 利用概率论从数据中学习构成了贝叶斯学习的基础。贝叶斯定理如下:
P(θ | x) 为后验概率,也是我们想要计算的;P(θ) 为先验概率,在训练数据之前就是已知的;P(x | θ) 为可能性,显示了数据分布;P(x) 为证据,我们只能通过对所有可能的模型值积分来计算其值:
这使得问题变得棘手,因此我们采用变分近似来找到近似贝叶斯后验分布。
首先,我们的原始目标是,需要根据已有数据推断需要的分布 p;当 p(下图中黄色区域)不容易表达,不能直接求解时,可以尝试用变分推断的方法, 即,寻找容易表达和求解的分布 q(下图中红线和绿线构成的区域),当 q 和 p 的差距很小的时候,q 就可以作为 p 的近似分布,成为输出结果了。例如,我们用 q θ (w | D) 来近似 p(w | D)。首先注意 q θ (w | D) 的表达,其中 w 是变量,θ 是后验概率分布 q 的参数。所以在构造 q 的时候也分两步:第一,概率分布的选择;第二,参数的选择。第一步,我们在选择 q 的概率分布时,通常会直观选择 p 可能的概率分布,这样能够更好地保证 q 和 p 的相似程度。例如高斯混合模型中,原始假设 p 服从高斯分布,则构造的 q 依然服从高斯分布。之后,我们通过改变 θ,使得 q 不断逼近 p。
我们希望尽可能接近真正的分布,这可以通过最小化两者之间的 Kullback-Liebler(KL)散度来做到这一点。然而 KL 的表达式中依然有一部分不可求的后验概率,这个问题仍然是棘手的,所以用到了 ELBO:
但是由于积分的存在,这个公式仍然难以解决。此时,我们可以从近似函数 q θ (w | D) 中进行采样,因为从近似函数中采样权值要比真正的后验函数 p(w | D) 更容易。这样得到容易计算的函数:
这些采样权值 w 被用于神经网络的反向传播,学习后验分布。
贝叶斯建模中,存在两种类型的不确定:偶然不确定性和认知不确定性。
可以通过在模型参数或模型输出上放置概率分布来估计不确定性 。通过在模型的权重上放置先验分布,然后尝试捕获这些权重在给定数据的情况下变化多少来模拟认知不确定性。另一方面,通过在模型的输出上放置分布来模拟偶然不确定性。
传统神经网络常使用反向传播来训练。对于 BNN,其自然地解释了参数估计中的不确定性,并且可以将这种不确定性传播到预测结果中;此外,对参数值进行取平均而不是仅选择单点估计值使得模型不易出现过拟合。因此,对 BNN 参数的训练也需要特殊的训练方法,Bayes by Backprop 就是其中一种(它也是一种变分推断)。
Bayes by Backprop 用来学习神经网络权重的概率分布。它是一种变分推理方法,用于学习神经网络权重 w ~ q θ (w | D) 的后验分布,可以在反向传播中对权重 w 进行采样。整个方法可归纳如下:
由于参数数目较大,所以需要对模型权重进行适当的修剪。模型修剪减少了深度神经网络的各种连接矩阵中的稀疏性,从而减少了模型中有价值的参数的数量。模型修剪的整个想法是减少参数的数量而不会损失模型的准确性。最常用的修剪模型的方法是将低贡献权重映射到零并减少整体非零值权重的数量,可以通过训练大型稀疏模型并进一步修剪来实现。
(这部分内容摘自 一个例子搞清楚 先验分布/后验分布/似然估计 )
给定一些数据样本 x,假定我们知道样本是从某一种分布中随机取出的,但我们不知道这个分布具体的参数 θ。
因为给定样本 x 后, p(x) 会在 θ 空间上为一个定值,和 θ 的大小没有关系,所以可以省略分母 p(x)。 可化简为:
p(x) 相当于是一个归一化项,整个公式就表示为: Posterior∝(Likelihood∗Prior)(后验概率 正比于 先验概率 ∗ 似然函数)
需要一提的是,对贝叶斯 CNN 而言,不仅在卷积层中将概率分布置于权重上,还要求在全连接层中将概率分布置于权重上。
假设权重的变分后验概率分布 q θ (w ijhw | D) = N(μ ijhw ,α ijhw μ 2 ijhw )(其中,i 和 j 分别对应输入和输出层数,h 和 w 分别对应过滤器的高度和宽度),那么卷积公式被重定义为:
其中,ε j ~ N(0,1),A i 为过滤器在第 i 层要卷积的部分,b j 为相应的第 j 层的激活值,∗ 为卷积操作,⊙ 为元素乘法(component-wise multiplication)。
对 CNN 的权重应用概率分布而非单点值,并且要在反向传播时更新变分后验概率分布 q θ (w | D),关键在于过滤器会执行两次卷积操作(在单点预测的 CNN 中只执行一次卷积)。
从前面的公式我们看到,卷积操作的输出 b 是期望 μ ijhw 和方差 α ijhw μ 2 ijhw 的函数,因此我们可以分别计算出 μ ijhw 和 α ijhw μ 2 ijhw 的值,从而可以得到一个高斯概率分布。方法就是执行两次卷积操作:第一次,我们将 b 视为通过频率推理更新的 CNN 的输出,将单点估计值解释为变分后验概率分布的期望;第二次,我们将得到方差。通过这种方式,我们确保每个卷积操作只更新一个参数(第一次为 μ ijhw ,第二次为 α ijhw ),这与通过频率推断更新的 CNN 完全相同。
实际上,当我们执行第一次卷积操作,我们得到的是 q θ (w | D) 的最大后验概率,而第二次卷积操作则是得出权重 w 偏离了最大后验概率多少。另外,为了加速计算,确保方差 α ijhw μ 2 ijhw 为非零正数,并提到准确度,我们学习 logα ijhw 并使用 Softplus 激活函数。
在分类任务中,我们关注的是 P D (y* | x*);对于贝叶斯神经网络,其被表示为:
在 Bayes by Backprop 中,q θ (w | D) ~ N(w | μ, σ 2 ),而 θ = {μ, σ} 在数据集 D = {x i , y i } n i=1 的训练中学习得到。由于分类问题多是离散的,因此:
其中,Σ c f(x c ∗ | w) = 1,C 为总类数。通过从 q θ (w | D) 取样,可以获得期望值的无偏估计:
T 为样本数量。这个估计值允许我们评估预测值的不确定性,因此称为预测方差,用 Var q 表示:
这个值可以进一步分为偶然不确定性和认知不确定性:
由于贝叶斯 CNN 中的权重都由期望和方差来表示其分布,因此,相较于单点估计 CNN,贝叶斯 CNN 的参数数量翻了一倍。为了使贝叶斯 CNN 参数数量等于传统 CNN,可以使 BCNN 的过滤器数目减半。
另一种模型修剪的技术是对每层的权重使用 L1 归一化。通过 L1 归一化,我们使各模型层中的权重向量变得非常稀疏,即大部分矩阵元素变得接近零;同时,剩余的非零元素则捕获数据的最重要特征。我们设置一个阈值,如果该值低于阈值,则使权重为零。通过只保留非零权重,可以减少模型的参数数量,而不会影响模型的整体性能。
看了一些国内的论文,将贝叶斯应用于 BP 神经网络优化,往往是利用贝叶斯定理寻找最优神经网络参数,以解决神经网络权值易陷入局部最优的问题,同时也能解决神经网络过拟合。其中心思想在于: 根据给定的先验分布,利用贝叶斯定理考察神经网络参数的不确定性,从样本数据中,获得网络结构的后验概率,那么,使得该后验概率最大化的网络参数即为所需的最优参数 (我认为这其实是 MAP 而非贝叶斯估计)。最优参数定义为:
为方便计算,对后验概率取对数得到:
假设先验概率分布 p(w) 满足高斯分布:
则有:
上式中,似然函数部分对应于目标函数中的适应度函数,而先验概率部分对应于正则项,因此我们可以通过确定先验概率得到正则项,从而对神经网络的目标函数进行优化,进而有效控制网络规模,提高网络泛化能力。
后验分布是人们在获得样本数据 D 之后对参数 w 的一种调整。 贝叶斯把上一步得到的后验分布信息储存起来,在将来做推测时,上一步的后验信息就成为了先验信息 ,这样持续数次操作之后,样本数据的预测结果会一直进行调整,最后对参数估计的结果精确度更高。
神经网络中最重要的两个性能参数就是权值和阈值,而这两个参数的分布情况受到了目标函数中超参数的控制,但一般的算法不能确定超参数的取值。可以利用贝叶斯定理来求取目标函数的超参数,并且要求达到自主调节超参数取值的目标,并且通过持续的调整最后找到最优的取值,相应的确定 BP 神经网络的最优权值和阈值。