优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)

1. 简介

贝叶斯神经网络不同于一般的神经网络,其权重参数是随机变量,而非确定的值。如下图所示:

优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)_第1张图片

也就是说,和传统的神经网络用交叉熵,mse等损失函数去拟合标签值相反,贝叶斯神经网络拟合后验分布。

这样做的好处,就是降低过拟合。

2. BNN模型

BNN 不同于 DNN,可以对预测分布进行学习,不仅可以给出预测值,而且可以给出预测的不确定性。这对于很多问题来说非常关键,比如:机器学习中著名的 Exploration & Exploitation (EE)的问题,在强化学习问题中,agent 是需要利用现有知识来做决策还是尝试一些未知的东西;实验设计问题中,用贝叶斯优化来调超参数,选择下一个点是根据当前模型的最优值还是利用探索一些不确定性较高的空间。比如:异常样本检测,对抗样本检测等任务,由于 BNN 具有不确定性量化能力,所以具有非常强的鲁棒性

概率建模:

优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)_第2张图片

在这里,选择似然分布的共轭分布,这样后验可以分析计算。 比如,beta分布的先验和伯努利分布的似然,会得到服从beta分布的后验。

优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)_第3张图片

由于共轭分布,需要对先验分布进行约束。因此,我们尝试使用采用和变分推断来近似后验分布。


神经网络: 使用全连接网络来拟合数据,相当于使用多个全连接网络。 但是神经网络容易过拟合,泛化性差;并且对预测的结果无法给出置信度。

BNN: 把概率建模和神经网络结合起来,并能够给出预测结果的置信度。

先验用来描述关键参数,并作为神经网络的输入。神经网络的输出用来描述特定的概率分布的似然。通过采样或者变分推断来计算后验分布。 同时,和神经网络不同,权重 W 不再是一个确定的值,而是一个概率分布。


BNN建模如下:

假设 NN 的网络参数为

是参数的先验分布,给定观测数据
,这里
是输入数据,
是标签数据。BNN 希望给出以下的分布:

也就是我们预测值为:

由于,

是随机变量,因此,我们的预测值也是个随机变量。

其中:

这里

是后验分布,
是似然函数,
是边缘似然。

从公式(1)中可以看出,用 BNN 对数据进行概率建模并预测的核心在于做高效近似后验推断,而 变分推断 VI 或者采样是一个非常合适的方法。

如果采样的话: 我们通过采样后验分布

来评估
, 每个样本计算
, 其中 f 是我们的神经网络。

正是我们的输出是一个分布,而不是一个值,我们可以估计我们预测的不确定度。

3. 基于变分推断的BNN训练

如果直接采样后验概率

来评估
的话,存在后验分布多维的问题,而变分推断的思想是使用简单分布去近似后验分布。

表示

, 每个权重
从正态分布
中采样。

希望

相近,并使用 KL 散度来度量这两个分布的距离。 也就是优化:

进一步推导:

公式中,

表示给定正态分布的参数后,权重参数的分布;
表示给定网络参数后,观测数据的似然;
表示权重的先验,这部分可以作为模型的正则化。

并且使用

来表示变分下界ELBO, 也就是公式(4)等价于最大化ELBO:

其中,

我们需要对公式(4)中的期望进行求导,但是,这里,我们使用对权重进行重参数的技巧:

其中,

.

于是,用

代 替
后有:

也就是说,我们可以通过 多个不同的

,求取
的平均值,来近似 KL 散度对
的求导。

此外,除了对

进行重采样之外,为了保证
参数取值范围包含这个实轴,对
进行重采样,可以令,

然后,

,这里的
已经和原来定义的
不一样了。

4. BNN实践

算法:

  1. 中采样,获得
  2. 分别计算
    . 其中,计算
    实际计算
    ,
    . 也就可以得到
  3. 重复更新参数
    .

Pytorch实现:

import 

这里是重复计算100次的平均值和100次平均值的97.5%大和2.5%小的区域线图(即置信度95%)。

优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)_第4张图片

参考:

  1. 变分推断;
  2. Weight Uncertainty in Neural Networks Tutorial;
  3. Bayesian Neural Networks;

你可能感兴趣的:(优化概率神经网络,朴素贝叶斯网络matlab实现)