想用不确定性来调试你的模型?贝叶斯视角了解一下

点击上方关注,All in AI中国

作者:Yoel Zelde

无论是以从业者的角度,还是以众多机器学习应用程序的用户角度来看,理解模型的不确定性是最重要的。在之前的博文中(https://engineering.taboola.com/using-uncertainty-interpret-model),我们讨论了不同类型的不确定性。解释了如何使用它来解释和调试我们的模型。

在这篇文章中,我们将讨论在深度神经网络中获得不确定性的不同方法。让我们从贝叶斯视角来研究神经网络。

想用不确定性来调试你的模型?贝叶斯视角了解一下

贝叶斯学习101

贝叶斯统计数据使我们能够根据证据(数据)和我们对世界的先验知识得出结论。这通常与仅考虑证据的频率统计数据形成对比。先验知识"捕获"了我们对哪个模型生成数据或该模型的权重是什么的想法。我们可以使用先验分布p(w),而不是模型的权重来表示这个想法。

当我们收集更多数据时,我们更新先验分布并使用贝叶斯定律将其转换为后验分布,这个过程被称为贝叶斯更新:

想用不确定性来调试你的模型?贝叶斯视角了解一下

该等式引入了贝叶斯学习中的另一个关键因素——可能性,定义为p(y | x,w)。根据模型的权重w,该术语表示数据的可能性。

贝叶斯视角下的神经网络

神经网络的目标是对似然(可能性)的估计p(y | x,w)。这样做是正确的,哪怕你没有意识到,例如,当你最小化MSE。

为了找到最佳模型权重,我们可以使用最大似然估计(MLE):

想用不确定性来调试你的模型?贝叶斯视角了解一下

或者,我们可以利用我们的先验知识,表示为权重的先验分布,并最大化后验分布。这种方法称为最大后验概率(MAP):

想用不确定性来调试你的模型?贝叶斯视角了解一下

表示先验的logP(w)充当正则化术语。选择均值为0的高斯分布作为先验,你将得到L2正则化的数学等价。

现在我们开始将神经网络进行概率性上的衡量。首先,谁说我们必须在训练过程结束时输出一组权重?如果我们不学习模型的权重,而是学习权重的分布怎么办?这样做可以方便我们估计权重的不确定性。那我们怎么做呢?

一旦你开始使用贝叶斯,你将受益匪浅

我们重新开始对权重进行预先分配,并旨在找到它们的后验分布。这一次,我们不直接优化网络的权重,而是将所有可能的权重进行平均化处理。

在推理中,我们不再采用最大化后验分布的单一权重集,而是考虑所有可能的权重,并通过积分来对它们进行概率加权:

想用不确定性来调试你的模型?贝叶斯视角了解一下

x是我们想要推断y的数据点,X,Y是训练数据。第一项p(y | x,w)是我们的原有似然(度),第二项p(w | X,Y)是模型权重给定数据的后验概率。

我们可以将其视为由每个模型概率加权的集合。实际上,这相当于无限数量的神经网络的集合,它们具有相同的架构但具有不同的权重。

我们完成了吗?

事实证明,在大多数情况下,这种积分是难以处理的。这是因为后验概率不能用解析的方法计算。

这个问题并非贝叶斯神经网络所独有。在很多贝叶斯学习的情况下,你都会遇到这个问题,多年来已经开发出许多克服这个问题的方法。我们可以将这些方法分为两类:变分推断和抽样。

蒙特卡罗抽样

想用不确定性来调试你的模型?贝叶斯视角了解一下

我们有一个问题。后验分布是难以处理的。如果不计算真实分布上的积分而是用它从中抽取的样本的平均值来近似它,该怎么做呢?一种方法是使用马尔可夫链蒙特卡罗法——你构造一个马尔可夫链,以期望的分布作为其平衡分布。

变分推断

另一种解决方案是使用与易处理的分布来近似难以处理的分布。为了测量两个分布的相似性,我们可以使用KL散度:

想用不确定性来调试你的模型?贝叶斯视角了解一下

设q是由θ参数化的变分分布。我们想要找到最小化KL散度的θ值:

想用不确定性来调试你的模型?贝叶斯视角了解一下

看看我们得到了什么:第一项是变分分布和先验分布之间的KL散度。第二项是关于qθ的似然。所以我们正在寻找能最好地解释数据的qθ,但另一方面,它要与先验分布尽可能接近。这只是将正则化引入神经网络的另一种方法!

现在我们有了qθ,我们可以用它来做出预测:

想用不确定性来调试你的模型?贝叶斯视角了解一下

上述公式来自DeepMind在2015年的一项研究(http://proceedings.mlr.press/v37/blundell15.html)。2011年graves提出了类似的想法,回归到1993年的Hinton和van Campin(http://www.cs.toronto.edu/~fritz/absps/colt93.pdf)。NIPS贝叶斯深度学习研讨会的主题演讲非常清楚地概述了这些想法经过多年的发展历程。(https://www.youtube.com/watch?v=FD8l2vPU5FY)

好的,但如果我们不想从头开始训练模型怎么办?如果我们有一个经过训练的模型,我们想从中得到不确定性估计怎么办?我们可以这样做吗?

事实证明,如果我们在训练期间使用dropout,我们实际上可以做到。

想用不确定性来调试你的模型?贝叶斯视角了解一下

dropout是不确定性的一种手段

dropout是一种很常用的调节方法。(http://jmlr.org/papers/v15/srivastava14a.html)在训练期间内,随机抽样节点并将它们删除,即——将它们的输出设置为0。你不能过度依赖特定节点,因为这可能意味着过度拟合。

2016年,Gal和Ghahramani表明,如果你在推理时应用了dropout,你可以轻松获得一个不确定的估计量:

1.多次推断y | x,每次抽取一组要退出的不同节点。

2.平均预测,得到最终的预测E(y | x)。

3.计算预测的样本方差。

就是这样!你得到了方差的估计值!这种方法背后的直觉是,训练过程可以被认为是同时训练2 ^ m个不同模型,其中m是网络中节点的数量:是所有未被dropout的每个节点子集定义的新模型。这些模型共享未被dropout的节点的权重。在每组中,对这些模型进行随机抽样。

训练结束后,你将掌握一系列模型。如果你在推理时使用这个集合,如上所述,你会得到这个集合的不确定性。

抽样方法与变分推理

从偏差和方差的角度权衡而言,变分推理具有较高的偏差,因为我们确定了分布族。这是我们做了一个一个强有力的假设。它引入了偏差,但是它很稳定,方差很小。

另一方面,抽样方法具有较低的偏差,我们不对分布做出假设(而是选择高方差),因为结果取决于我们抽取的样本。

最后的想法

能够估计模型不确定性是一个热门话题。在医疗助理和自动驾驶汽车等高风险应用中了解它非常重要。它也是一个有价值的工具,可以了解哪些数据可以使模型受益。

在这篇文章中,我们介绍了一些获得模型不确定性的方法。还有更多的方法,所以如果你对此感到不确定,请继续寻找更多数据。

这是我们今年在KDD研讨会上发表的有关该系列的第二篇文章:深度密度网络和推荐系统的不确定性。(https://arxiv.org/abs/1711.02487)第一篇文章可以在这里找到。(https://engineering.taboola.com/using-uncertainty-interpret-model)

想用不确定性来调试你的模型?贝叶斯视角了解一下

相关推荐