论文阅读-"Why Should I Trust You" Explaining the Prediction of Any Classifier

什么是LIME

LIME(Local Interprentable Model-agnostic Explanations)

对于单独的样本,根据局部信息来做的一种模型无关的模型解释

SP-LIME(Submodular Pick Lime)

一种选择更具有代表性的样本集合来观察模型可解释性的方法

模型可解释性

通过对模型解释,我们可以做到下面这些事

  • 决定是否相信模型的单个预测结果,当我们需要根据预测结果做决策的时候,这是很重要的
  • 选择模型,对于不同的模型或者参数,可以根据模型的解释性来确定选择使用哪一个,有时候并不一定是模型的评估指标越好,模型就越好
  • 改进模型,通过模型的解释,可以做一些特征工程,来提升模型的性能
  • 识别不可信的模型 基于模型的解释,判断模型是否真正有效

模型的可解释性有利于我们更好的去相信模型和使用模型,相信模型主要是指以下两点

  • 相信模型单个样本的预测结果,解释模型为什么会将这个样本预测成某个类别或者某个值,对应着LIME
  • 相信模型本身,需要对模型本身做出解释,例如特征重要性排序这些都是在解释模型,文章中通过一种算法,选出最具代表性和多样性的样本来展示给模型使用者,方便使用者对模型进行理解,对应着 SP-LIME

解释一个样本的预测结果: 指的是通过文本或者图片的方式,来定性的表示样本的组成成分和预测结果之间的关系,例如我们预测一个人患有肿瘤,那么样本中打喷嚏,头痛可能为结果提供了正向的支持,没有疲劳则对模型预测结果提供了负向的因素

通过模型的评估指标(auc, acc, precision, recall 等)来判断模型是否可靠有不完全靠谱的,一下因素都可能导致 这些指标变得不可信

  • 数据泄露,训练集测试集中混入了些实际中拿不到的数据,比如混入了用户ID,刚好ID本身或者ID值的大小跟相关,但是实际中这个信息是能使用的
  • 数据分布不一致 比如说某个特征在训练集中80%正样本都包含,在测试集或者实际情况中正负样本包含该特征的比例是一致的。通过解释模型,我们人工可以观察到这个特征,通过一些先验知识就能判定模型的不合理性

期待解释器具有以下性质

  • 解释是可以被人所理解的,人的理解力是有限的,对于线性模型,需要非零特征足够的少,对于树模型,需要树的层数尽可能的少,面对不同的人可能也需要使用不同的解释方式
  • 局部保真 在要解释的样本周围只是要保证真实性,因为整体的模型可能十分复杂,完全没法理解,所以给出的理解在局部需要保持一定的真实性
  • 模型无关 解释最好是跟模型无关的,这样就能解释任何模型

LIME

可解释的数据表示

用来解释的模型的输入数据和模型使用的特征是不完全一致的,例如通常NLP问题中实际模型读取的是词向量,解释模型的时候通常是用01来表示有某些词和没有某些词。在图片问题中,通常是将图片先用分割算法分割成小块,然后用01来表示各个小块的存在和不存在。最终解释是用这些输入数据的部分内容来表示的。

用 $x \in R^d$ 来表示原始特征, $x^{\prime} \in \lbrace 0,1 \rbrace ^{d^\prime}$ 表示用来表达解释的数据表示。

可理解-保真 的取舍

我们G来表示可能用来的解释的模型,可以是线性模型,树模型或者一套简单的规则, $g \in G$来表示具体的某个解释模型,也就是说$g$是在 $x^{\prime} \in \lbrace 0,1 \rbrace ^{d^\prime}$ 上面训练的一个模型。
为了模型的可解释性,模型不能太复杂,模型太复杂了人是无法看理解的,因此用 $\Omega(g)$来表示模型的复杂度,我们需要将模型的复杂度限定在一定的范围以内

另外我们用来解释模型的 $g$ 应该要尽可能的和 $f$ 相近, 至少是在需要解释的样本$x$的周围保持真实性, 我们用来定义周围的方式是 $\pi_x(z)$, 其实就是表达样本$z$离样本$x$有多远, 越近, 那么应该权重越大

因此我们对模型的解释就是

$$
\xi(x) = \mathop {argmin}_{g\in G} L(f, g, \pi_x) + \Omega(g)
$$

对样本$x$的解释就是要找到在$x$局部最相似,且复杂度尽量低的解释模型

局部采样

在解释样本$x^\prime$的时候,我们通过对$x^\prime$的非零组成进行均匀的采样,可以得到一批数据集合 $z^\prime \in \lbrace 0, 1 \rbrace ^{d^\prime}$, 可以通过将$z^\prime$还原成$z$, 然后通过被解释的模型进行预测的到模型对$z$的预测值 $f(z)$, 然后就可以通过公式来进行优化,找到最合适的解释模型。

稀疏线性解释

$G$ 使用线性模型来表示

$g(z^\prime) = w_g g^\prime$

$L$ 使用均方根误差来计算

$\pi_x(z) = exp(-D(x, z)^2/\sigma^2)$ $D$ 是某种距离函数

因此

$$
L(f, g, \pi_x)=\sum_{z,z^\prime \in Z} \pi_x(z)(f(z) - g(z^\prime))^2
$$

为了限制模型的复杂度,增加可解释性,这个地方解释模型的复杂度约束为

$$
\Omega(g) = \infty \mathbb {1}([||w_g||_0 > K])
$$

也就是说当权重中非零元素的个数超过阈值的时候对于模型复杂的惩罚变得无穷大,不过由于这个 $\Omega$ 不好解, 实际当时是使用的 K-LASSO

不论什么解释模型, 都会有一些缺点的,例如这种线性模型,当需要被解释的模型及其复杂,或者在局部也很非线性的时候,使用线性模型来解释就不太好了。另外如果输入本身没法拆成一部分一部分使用缺失或者存在来影响输出,也没办法使用这种方法来解释

SP-LIME

上面提到的是对单个样本的解释,要想对于整个模型有所了解,就需要选出一系列可解释的样本,通过观察这些样本,来理解模型模型。由于人力是有限的,因此不可能选择非常多的样本来观察,假设我们只能最多观察 $B$ 这么多的样本,我们就应该挑选出最具有代表性的一些样本来观察。
论文提出了一种筛选样本的方式,被称作 SP-LIME

对于一个样本的集合 $X(|x|=n)$, 我们可以通过LIME构造一个解释的矩阵 $W$ , ($W \in R^{n \times d^\prime}$) 对于每个组成$j$ ,使用 $I_j$ 来表示组成 $j$ 的全局重要性。期望如果能解释更多样本的 $I$ 就应该有更大的值。例如如果组成2比组成1能解释更多的样本,那么 $I_2 > I_1$ 例如可以 定义为

$$
I_j=\sqrt{\sum_{i=1}^n W_{ij}}
$$

能解释的样本就是非零的,这儿计算的是能解释样本的个数。

$$
c(V,W,I)=\sum_{j=1}^{d^\prime} \mathbb {1} [\exists i \in V: W_{ij} >0]I_j
$$

也就是说如果选出来的集合里存在样本在解释组成$j$上权重非0,(解释组成$j$能解释某个样本),那么久把这个$I_j$累加起来,最后要找到集合$V$使得$c$最大

$$
Pick(W, I) = \mathop argmax_{V,|V| \leq B} c(V,W,I)
$$

实际中使用了贪心的算法来找到样本的集合,每次找增加了那个样本之后能带来能得到最大的$c$的样本加入集合中