LIME:我可以解释任何一个分类模型的预测结果

2021-07-23 13:57:56 浏览数 (2)

LIME:我可以解释任何一个分类模型的预测结果

image-20210630115214018

  • 论文标题:“Why Should I Trust You?” Explaining the Predictions of Any Classifier
  • 发表会议:KDD-2016
  • 组织机构:华盛顿大学

一个很有名的文章。别被猖狂的标题给唬住了,实际思想很简单。

主要贡献:

提出了一种技术手段,可以为任意的分类模型提供预测结果的解释。

背景:

  • 在模型被用户使用前,用户都会十分关心模型是否真的值得信赖。
  • 现实中,我们的通过目前标准的训练方式得到的模型,往往不能保证模型的可靠性。因为模型开发过程中使用的验证、测试集,可能跟实际场景差别很大。另外,我们使用的评价准则(evaluation metrics)也很局限,不能体现出很多我们关心的但难以量化的标准,例如用户的参与度、留存度。
  • 由于模型开发过程中可能存在的非故意的数据泄露(unintentional data leakage,比如数据集的)和数据集漂移(dataset shift,指训练集和测试集分布不同),得到的模型也可能并不可靠。

因此,我们需要能够对模型的预测进行解释,从而帮助我们来判断模型是否可靠。

何谓“解释一个预测结果”,作者的定义是:通过文本的或者视觉的方式来呈现样本的具体组成部分跟模型预测结果之间的关系。

一个理想的解释器(explainer)应该是怎样的?

作者总结了四点他们认为是一个理想的解释器应该具备的性质:

  1. 好理解的/可解释的(interpretable)这必然是最基本的,但在可解释的同时,我们必须考虑“人是否好理解”。比如,一个线性模型是可以解释的,但是如果它使用的特征有1000个,那么对人来说还是很难理解,或者不好接受。所以既要可解释,还要好理解。
  2. 局部保真性(local fidelity,locally faithful)一般而言,想要对模型进行完全可信的解释是几乎不可能的,因为模型真正使用的特征,往往就是极度复杂的、高维的,这对于想要让我们三维生物去理解太强人锁男了。但,我们可以在局部、小范围内进行一些简单的解释。因为,我们希望至少在局部范围内,我们的解释是可信的。
  3. 模型无关的(model-agnostic) 我们的解释器,应该跟具体模型无关,最好是通用的。
  4. 提供全局视角(global perspective) 这一点,我没有完全理解。原文是:"In addition to explaining predictions, providing a global perspective is important to ascertain trust in the model. As mentioned before, accuracy may often not be sufficient to evaluate the model, and thus we want to explain the model."

总之,上面最重要的就是1、2点,这也是该论文进行方法设计的基础。

方法设计:

Local Interpretable Model-agnostic Explanations (LIME)

总体的思想:原始模型复杂的决策边界,在任意一个样本点的局部范围内,可以视为是线性的。那只要找到这些线性的边界,就可以对模型在该样本点处进行解释了。

1. 构建可解释的数据表示(Interpretable Data Representations)

原始的数据,或者模型使用的特征,往往不够直观、具体。我们需要将原始的数据,转化成一种便于解释的数据表示,从而辅助我们后续的模型预测结果解释。

这里,作者使用的方法是,将原始数据,转化成一组由基本元素构成的0-1表示。例如,对于文本来说,就是某个词是否出现这样的特征,对于图像来说,就是某个区域是否出现。

我画了一个图来示意这个转化过程:

如何转化

2. 选择一个天然可解释的简单模型

有一些模型天生就是可解释的,比如线性模型、决策树。我们就可以利用这些简单的可解释模型来帮助我们解释复杂模型的预测结果。

3. 局部采样来拟合一个局部线性模型

局部采样:

对原始的样本进行转换得到可解释的数据表示之后,对特征向量进行一些扰动,具体的,随机的对0-1向量中的1进行改变,改变的数量也随机。然后根据这些扰动后的向量,跟原向量的相似度,来使用不同的采样比例。直观上来讲,扰动的少的,采样会更多,扰动大的采样更少。

上图直观展示了采样的方法。

拟合局部线性模型:

希望这个可解释模型能够在局部范围内尽可能接近原模型的决策边界,同时控制可解释模型的复杂度。

因此作者设计了这样的目标函数形式:

xi(x)=operatorname{argmin}_{g in G} quad mathcal{L}left(f, g, Pi_{x}right) Omega(g)

其中,f是原始模型,g是我们希望得到的解释模型,

Pi_{x}

是一个控制局部范围大小的东西,。L就是对g进行拟合的一个损失函数,

Omega(g)

则是控制g的复杂度的一个惩罚项,对于决策树的话,树?的深度depth就反映了复杂度,对于线性模型的话,非零权重的个数就反映了复杂度。

在本文中,g使用的是系数的线性解释器(Sparse Linear Explanations ):

gleft(z^{prime}right)=w_{g} cdot z^{prime}
Pi

使用向量的距离来定义不同采样点的权重:

Pi_{x}(z)=exp left(-D(x, z)^{2} / sigma^{2}right)

D可以是任何的距离函数,比如对于文本数据,使用cosine距离,对于图像数据,使用L2距离。

然后,最终的L可以就设计成一个带权重的最小二乘损失

mathcal{L}left(f, g, Pi_{x}right)=sum_{z, z^{prime} in mathcal{Z}} Pi_{x}(z)left(f(z)-gleft(z^{prime}right)right)^{2}

注意?,这里的z'是转化后的数据,z是原始数据。即g的输入是转换后的可解释的数据表示,它要逼近的目标是原始模型在原始数据上的输出。

对于复杂度的话,本文使用了一种近似的更简单的方法:先用LASSO算法来控制线性模型的非零特征个数,再直接优化上面的L即可。

我再画一个图来示意LIME的训练过程:

LIME流程图

重点注意:

  • 这里g和f使用的训练数据是不同的,但我们希望他们的输出结果是逼近的。
  • 我们是针对一个样本进行解释,即给定一个样本,解释为什么模型这样预测。
  • 先“转换”,再“转换回来”。

理解了上面这个图,我们就发现本文的思路其实挺简单的,没那么玄乎。

对一个样本的预测进行解释

训练完成后,最终得到的g,只有少数几个最重要的特征,因此解释性、可理解性很强。g的各个w可以可视化出来,看出不同特征的贡献程度。比如下面的例子:

通过对两个模型,在同一个样本上的解释,我们可以发现第一个模型解释性更好,因为找到了正确的特征。而第二个模型找到的特征是错误的,这是由于训练集中的偏差导致的。

对于图像分类问题,也是类似的:

上图的结果,是通过对g的正权重对应的区域进行高亮。从而可以解释为什么模型预测出了相应的类别。

一个怎么够?

上面的内容,都是只针对一个样本的预测结果进行解释。然而,要判断模型的可靠性,我们往往需要检查很多的样本,这就很费事了。

因此,作者还思考了,如何用最高的效率,检查最少的样本,就能够最全面地检查模型的可靠性。

具体的方法,我暂时不关心,所以就不讲了。下图给出了一个大致的思路:

即,我们挑选最少的样本,让他们对特征空间的覆盖程度最大。具体的算法感兴趣的话去看论文吧。


以上就是我对论文中自认为最重要的内容的解读了。这个文章其实还挺丰富的,细节很多(虽然我也没看完),还是很值得借鉴的。

相关链接?:

  • 论文:http://arxiv.org/pdf/1602.04938v1.pdf
  • 作者亲自的解读(没我的清楚):https://www.oreilly.com/content/introduction-to-local-interpretable-model-agnostic-explanations-lime/
  • github,已经封装了成熟的Python包,可直接调用:https://github.com/marcotcr/lime

等我后面有需要的时候具体调用一下,看看体验如何。


0 人点赞