[TOC]
Know what you don't know
训练好的神经网络(NN)模型,本质是一个拥有大量确定参数的函数,不管你给什么输入,它都能给你一个输出。这会导致两种我们不愿意看到的意外情况:
- 1)对明明错误的预测结果,模型输出的置信度却很高
- 2)对没有见过的输入(OoD,Out-of-ditribution),比如给一个识别猫狗的模型输入一张桌子图片,模型一定会输出:”这是猫“ or “这是狗”。
所以,我们希望模型能输出uncertainty,告诉我们它对预测结果的确定程度。比如上面的例子中,我们希望对错误分类的样本、OoD样本,模型说”我不确定“——给出一个较高的uncertainty。以便我们可以拒绝这样的预测结果。
更进一步地,我们知道有很多问题都对Uncertainty有需求:
-
在自动驾驶系统中,我们不仅希望深度学习模型告诉我们前面有个人,还希望它告诉我们它对这个结果的信心是多少?
-
在使用AI进行辅助诊断时,医生希望AI告知结果时同时告诉他,它对这个结果有多确定,这样他就可以只关注AI不很确定(高uncertainty)的结果,从而减少工作量。
-
主动学习(Active Learning)中,我们想知道哪些数据应该被标注?(high uncertainty data)
-
OoD(Out-of-distribution) detection
-
深度学习可解释性
-
在统计学习中,我们经常会做显著性检测,其实就是uncertainty检验
-
……
参考NIPS2017年的论文 What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? ,Gal阐述了两种uncertainty:Aleatoric uncertainty(i.e. data uncertainty) 和 Epistemic uncertainty(i.e. model uncertainty),即随机不确定度(也称数据不确定度),和认知不确定度(也称模型不确定度)。
比如下图的例子,(d)(e)分别是数据不确定度和模型不确定度,越亮代表uncertainty越高。
可以看出:
- aleatoric unceratinty主要出现在物体边缘和远处(d)。该uncertainty源于数据本身,主要是标注员对物体边缘标注的精度不够、远处物体成像质量较差导致。
measure what you can't understand from data : 上图中标注不好的地方(边缘和远处)。我们无法从标注不够精确的数据中,学习出一个”可以预测精细的物体轮廓“的模型)
- Epistemic uncertainty主要出现在model预测不好的地方。比如最后一行,模型对人行道的分割结果较差(c),所以Epistemic uncertainty比较高(e)
measure what your model doesn't know :上图中模型出现FP的地方
Epistemic uncertainty可以通过增加数据解决,比如下图:只有一个data point的时候,符合要求的模型有很多种可能,uncertainty很高。当数据点增加,模型逐渐确定,uncertainty减小。 Aleatoric uncertainty 其实就是训练数据中的噪声,来源于数据收集/标注过程。这些噪声是随机的,而且是固定的。噪声越多,数据的不确定度越大。它可以被测量,但是无法通过增加数据减小。
- Heteroscedastic Aleatoric Uncertainty # TODO
- Homoscedastic Aleatoric Uncertainty # TODO
Related work
基于目前的调研,研究深度学习(DL) uncertainty就是研究Bayesian Neural Network(BNN)。根据最近2周(20200719-20200804)的调研,学界、业界对DL尤其是CV uncertainty的研究,相比classification、detection这些任务的研究,少得多。
-
从学术会议看,研究uncertain的AI顶会主要有NIPS, ICLR, ICML,机器人顶会ICRA和医疗图像处理会议MICCAI
-
从具体领域看,医疗图像处理领域,不确定度的研究比较多(论文数量多,可能和医疗图像已经应用于工业界有关),主要针对Classification和segmentation问题,机器人领域次之。
-
从具体问题看,Classification uncertainty的研究比较成熟,segmentation、regression(e.g. depth estimation)次之。如果看CV领域的uncertainty,基本上都能追溯到Yarin Gal和他在NIPS2017年发的论文 What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? 。Yarin Gal曾经是剑桥的PHD,现在是牛津的助理教授,他的博士论文是Uncertainty in Deep Learning。
研究Object Detection Uncertainty的比较少,目前看QUT Centre for Robotics 的Niko Sünderhauf, Dimity Miller等人研究比较多,主要方向:Bayesian Deep Learning and Uncertainty in Object Detection,中了不少顶会。 他们提出了一种新的Metric PDQ(Probabilitybased Detection Quality),用于衡量uncertainty/probability。
-
开源代码和工具
- Yohua Bengio的创业公司ElementAI开源了一个Bayesian Active Learning框架Baal,支持Classification、Segmentation、regression任务的estimation,在uncertainty建模方面支持MCDropOut和MCDropConnect
- Ali Harakeh等人开源了BayesOD: A Bayesian Approach for Uncertainty Estimation in Deep Object Detectors的代码,这篇论文介绍了检测uncertainty建模。具体来说#TODO
接下来,我们来讲讲如何建模计算uncertainty,由于调研时间有限可能有疏漏,欢迎留言补充。
-
Epistemic uncertainty建模 JunMa帮忙总结了几种对Epistemic uncertainty 建模的方式,如上图,也欢迎补充其他建模方法。。本文主要讲Monte-Carlo 和 Ensemble。 对一个随机分布,不确定性建模的方法有很多,标准差、方差、风险值(VaR)和熵都是合适的度量。在深度学习中,建模不确定度需要用到Bayesian DeepLearning。从Bayesian的角度,深度学习训练的本质是求一个posterior distribution
$P(W|D)$ ,其中W是参数,D是数据。根据bayes theorem,我们有 $$ P(W|D) = \frac{P(D|W)P(W)}{P(D)}$$ 但是这个公式没法用,因为P(D)理论上代表的是真实的数据分布 ,无法获取;P(W)在神经网络中也是不存在的,因为模型训练好以后,所有参数都是确定的数,而不是distribution,所以没法计算P(W)。于是我们想到bayes theorem的另一个公式:$$P(D) = \sum_i{P(D|W_i)P(W_i)}$$ 如果我们知道所有W,那么就可以计算P(D)了,但这也是不可能的。不过我们可以用蒙特卡洛法(Monte-Carlo)多次采样逼近:多次采样W计算$P_i(D)$,得到P(D)的近似分布,进而得到P(W|D)的估计。具体来说,有3种方式:- Ensembles:用类似bootstrap的方法,对数据集D,采样N次,用N次的结果分别训练模型,然后ensemble模型结果。这个方法的好处是接近真实的Monte-Carlo方法
- MCDropout:在网络中加入Dropout层,在测试时也打开Dropout,让Dropout成为采样器。对采样N次的结果进行ensemble处理得到最后的uncertainty。这个方法的好处是不用做很多实验,节省成本,但是由于使用了Dropout,单次训练的时间会变长。
- MCDropConnect:和加Dropout的思路差不多。不过这里不用加Dropout layer,而是通过随机drop connection,来达到随机采样的目的。
从理论层面,MC-Dropout是variantianl inference(BNN的重要概念之一)的近似。具体来说#TODO
-
Aleatoric uncertainty建模
uncertainty estimation是深度学习在实际使用时非常重要的一环。因为我们不仅希望AI输出预测结果,还想知道AI对结果的确定度,综合两者才能更好地使用DL模型。
在DL领域,主要有两种不确定度,Aleatoric Uncertainty和Epistemic Uncertainty,前者可以认为是数据本身的噪声,也被称之为data uncertainty,后者主要源于模型认知能力,可通过增加训练数据解决。
为了建模计算Uncertainty,我们介绍了Monte-Carlo DropOut/DropConnect、Ensemble方法来建模Epistemic uncertainty,也介绍了Probabilistic DeepLearning用于计算(预测)Aleatoric Uncertainty。更多的建模方法有待进一步研究和比较,可参考文章提到的文章,也欢迎留言补充,谢谢。
201909-医学图像分析中的Uncertainty学习小结 推荐****** What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?推荐指数** Simple and Scalable Predictive Uncertainty Estimation using Deep Ensembles推荐指数* Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning 机器之心:如何创造可信任的机器学习模型?先要理解不确定性 推荐指数*** Uncertainty Estimation in DL推荐指数*** AI科技评论:学界 | 模型可解释性差?你考虑了各种不确定性了吗? CSDN:What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? 计算机视觉用于贝叶斯深度学习的不确定性 Uncertainties in Bayesian Deep Learning - kid丶的文章 - 知乎 Homoscedastic regression贝叶斯神经网络建模两类不确定性——NIPS2017 - Dannis的文章 - 知乎 DL模型不确定性评价Can You Trust Your Model's Uncertainty? - JunMa的文章 - 知乎 YARIN GAL 个人网站,上述论文作者(剑桥、deepmind) 【实验笔记】深度学习中的两种不确定性(上) 201910-Uncertainty in MICCAI 2019