原文:What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? (NIPS 2017)
深度学习模型给出的预测结果并不总是可靠的。在无人驾驶等安全性要求较高的领域中,完全依赖深度模型进行决策有可能导致灾难性的后果。如果能够让深度学习模型对于错误的预测给出一个较高的不确定性,我们就能判断一个预测结果可信程度。因此,我们需要对不确定性进行建模。
衡量不确定性最直观的方法就是方差。对于一组数据
一个单独输出值是得不到方差的。如果说我们能够用同一个模型,对同一个样本进行T次预测,而且这T次的预测值各不相同,就能够计算方差。问题是同一个模型同一个样本,怎么得到不同的输出呢?概率学家就说了,我们让学到的模型参数
但是,怎么学习这样的分布呢?概率学家又说了,有现成的呀,dropout就是。使用了dropout来训练DNN时,模型的参数可以看成是服从一个伯努利分布。在预测的时候,仍然将dropout打开,预测T次,均值就是最终的预测值,而方差就是不确定度。这样就得到深度学习的不确定度了。这种方法也被称为MC Dropout贝叶斯神经网络。
但是,不确定性有两种。一种称之为偶然不确定性(Aleatoric Uncertainty),是由于观测数据中的固有噪声导致的。这种不确定性是无法被消除的。另外一种称之为感知不确定性(Epistemic Uncertainty),与模型相关,是由于训练不完全导致的。如果给它更多的训练数据来弥补现有模型知识上的不足,这种不确定性从理论上来说是可以消除的。MC Dropout只能得到关于模型的感知不确定性,而不能捕获数据的偶然不确定性,这是有问题的。这就是本文要解决的问题了。
贝叶斯神经网络
假定模型参数服从一个高斯先验分布:
贝叶斯神经网络虽然很好定义,但是实际操作起来比较困难。主要原因在于边际分布
贝叶斯推断公式:![]()
Dropout变分推断是一种常用的近似方法。这种方法在除了在训练时要使用dropout之外,在预测时,也要将dropout打开,执行T次预测取其平均值。理论证明这种方法等价于在最小化KL散度。
利用Dropout进行训练时,其最小化目标为
其中,第一项为负对数似然,第二项为正则化参数。
在回归任务中,通常假设似然是一个高斯分布,那么负对数似然可以写为如下形式:
感知不确定性
感知不确定性是关于模型参数的。为了捕获这个不确定性,我们可以从模型参数的分布中采样多次,得到
对于分类问题,
对于回归问题,不确定性可以用输出值的方差来表示:
偶然不确定性
偶然不确定性衡量的是数据本身存在的噪声,某种程度上衡量了一个instance的预测难度,因此可以将它看作是instance的一个函数:对于预测结果比较离谱的instance,这个函数值应该比较大;而对于容易预测的instance,相应的函数值应该较小。可以用以下的损失函数来对其进行建模,
简单来说,感知不确定性是用多次预测结果的方差来决定的,在多次预测中,所用的模型参数都是不一样的,因此这种做法捕获了模型参数的感知不确定性。而偶然不确定性是由样本的特征决定的,和模型参数是无关的。
将两种不确定性结合
回归任务
为了将两种不确定性结合到同一个模型中,我们需要两组输出:一组是最终的预测结果
通过最小化以下的损失函数来训练模型:
在论文中的深度回归任务中,
实际训练中,
分类任务
在分类任务中,对于一个像素
这里
训练模型的损失函数可以写为:
第二项实则为交叉熵损失函数化简后的结果。
交叉熵损失的简单推导:
假定一共有C个类别,像素属于类别
,
,那么像素
交叉熵损失为
![]()
因为要执行T次预测,因此损失也要取T次的平均,由此得到了公式 (1)。
简单来说,贝叶斯神经网络或者MC Dropout能够捕获感知不确定性,额外添加的