使用不确定性来解释模型
随着深度
神经网络(DNN)的功能越来越强大,其复杂性也随之增加。这种复杂性带来了新的挑战,包括模型的可解释性。
为了构建更健壮和抵抗对抗攻击的模型,可解释性至关重要。此外,为一个新的,研究不足的领域设计模型具有挑战性,并且能够解释模型的作用可以在此过程中为我们提供帮助。
在过去的几年中,模型解释的重要性驱使研究人员开发各种方法,并且在去年的NIPS会议上专门针对此主题进行了整个研讨会。这些方法包括:
LIME:一种通过局部线性逼近解释模型预测的方法
激活最大化 一种了解哪些输入模式产生最大模型响应的方法
功能可视化
将DNN层嵌入到低维解释空间中
运用认知心理学的方法
不确定度估算方法–本帖重点
在我们深入探讨如何使用不确定性进行调试和解释模型之前,让我们了解为什么不确定性很重要。
您为什么要关心不确定性?
一个突出的例子是高风险应用程序。假设您正在建立一个模型,可以帮助医生确定患者的首选治疗方法。在这种情况下,我们不仅应关注模型的准确性,还应关注模型对其预测的确定性。如果不确定性过高,医生应考虑到这一点。
自动驾驶汽车是另一个有趣的例子。当模型不确定道路上是否有行人时,我们可以使用此信息来减慢汽车行驶速度或触发警报,以便驾驶员负责。
不确定性还可以帮助我们提供数据示例。如果未使用与手头样品相似的示例来训练模型,则可以说“对不起,我不知道”可能会更好。这本可以避免Google照片在将非裔美国人错误归类为大猩猩时出现的尴尬错误。由于训练集的多样性不足,有时会发生这样的错误。
这篇文章的目的是不确定性的最后用法,它是从业人员调试模型的工具。稍后我们将深入探讨这一点,但首先,让我们谈谈不同类型的不确定性。
不确定性类型
不确定性和建模有不同类型,每种类型对于不同目的都是有用的。
模型不确定性,又称认知不确定性:假设您只有一个数据点,并且想知道哪种线性模型最能解释您的数据。没有很好的方法在图片的不同行之间进行选择–我们需要更多数据!
左侧:数据不足会导致高度不确定性。右边:给定更多数据,不确定性降低。
认知不确定性说明了模型参数的不确定性。我们不确定哪个模型权重最能描述数据,但是如果有了更多数据,不确定性就会降低。这种类型的不确定性在高风险应用程序中以及处理小而稀疏的数据时很重要。
例如,假设您要构建一个模型,该模型可以获取动物的图片,并预测该动物是否会尝试吞噬您。假设您在狮子和长颈鹿的不同图片上训练了模型,现在它看到了僵尸。由于该模型没有在僵尸图片上训练,因此不确定性很高。这种不确定性是模型的结果,如果有足够多的僵尸照片,它将减少。
数据不确定性或偶然不确定性捕获了观测中固有的噪声。有时世界本身是随机的。在这种情况下,获取更多数据将无济于事,因为噪声是数据固有的。
要了解这一点,让我们回到我们的肉食动物模型。我们的模型可以识别出图像包含狮子,因此您很可能被吃掉。但是,如果那头狮子现在不饿怎么办?这次,不确定性来自数据。另一个例子是两条看起来相同的蛇,但其中一条是有毒的,而另一条则不是。
不确定性分为两种类型:
同方不确定性:所有输入的不确定性均相同。
异方差不确定性:取决于手头特定输入的不确定性。例如,对于预测图像深度的模型,无特征的墙比具有强消失线的图像具有更高的不确定度。
测量不确定度:不确定性的另一个来源是测量本身。当测量噪声较大时,不确定度会增加。在动物示例中,如果某些照片是使用劣质相机拍摄的,则模型的可信度可能会受到损害;或者如果我们正逃离可怕的河马,结果只能处理模糊的图像。
嘈杂的标签:通过监督学习,我们使用标签来训练模型。如果标签嘈杂,不确定性会增加。
有多种方法可以对每种类型的不确定性进行建模。这些将在本系列的以下文章中介绍。现在,让我们假设我们有一个黑匣子模型,该模型可以揭示其关于预测的不确定性。我们如何使用它来调试模型?
让我们考虑一下Taboola中的一种模型,该模型用于预测用户点击内容推荐的可能性,也称为CTR(点击率)。
使用不确定性来调试模型
该模型具有嵌入向量表示的许多分类特征。该模型可能难以学习稀有值的广义嵌入。解决此问题的常用方法是使用特殊的词表外(OOV)嵌入。
考虑文章的广告客户。所有稀有广告客户共享相同的OOV嵌入,因此,从模型的角度来看,他们本质上是一个广告客户。该OOV广告商有许多不同的项目,每个项目都有不同的点击率。如果我们仅将广告客户用作点击率的预测指标,那么OOV的不确定性就会很高。
为了验证模型输出对于OOV的高度不确定性,我们采用了一个验证集并将所有广告商的嵌入内容都转换为OOV。接下来,我们检查了切换前后的不确定性。如预期的那样,不确定性由于切换而增加。该模型能够了解到,如果广告客户信息丰富,则应减少不确定性。
我们可以针对不同的功能重复此操作,并寻找被OOV嵌入替换后导致不确定性较低的功能。这些功能没有提供信息,或者我们将它们提供给模型的方式并不理想。
我们甚至可以进一步细化:一些广告客户的不同项目的点击率之间存在较大差异,而另一些广告客户的点击率则大致相同。我们希望该模型对第一类广告商具有更高的不确定性。因此,有用的分析是研究广告商内部不确定性和CTR变异性之间的相关性。如果相关性不是正的,则意味着该模型无法了解与每个广告客户相关联的不确定性。该工具使我们能够了解在训练过程中或模型的体系结构中是否出现了问题,表明我们应该进一步调试它。
我们可以执行类似的分析,并查看与特定项目相关联的不确定性是否会随着我们显示它的次数增加而减少(即,向更多用户显示/在更多地方显示)。同样,我们希望模型变得更加确定,如果不能确定,请调试!
另一个很酷的例子是标题功能:带有稀有单词的独特标题应引起较高的模型不确定性。这是该模型在所有可能的标题区域中没有看到很多示例的结果。我们可以在验证集中查找一组罕见的相似标题,并估计模型在这些标题上的不确定性。然后,我们将使用其中一个标题重新训练模型,并查看整个组的不确定性是否已降低。确实,我们可以看到发生的正是这样的情况:
等一下...通过将模型暴露给某些标题,它可以变得更好,并且可以确定一些新标题。也许我们可以用它以某种方式鼓励探索新物品?好吧,是的,我们可以!在本系列的下一篇文章中将对此进行更多介绍。
最后的想法
在许多领域,不确定性都是很大的问题。确定哪种不确定性类型很重要是特定于应用程序的。一旦知道如何对其进行建模,便可以多种方式使用它们。在本文中,我们讨论了如何使用它们来调试模型。在下一篇文章中,我们将讨论从模型中获得不确定性估计的不同方法。
题库