背景
随着机器学习的发展,不同的算法纷纷涌现,特别是现在很热的深度学习,不同的神经网络模型在图像识别、语音识别、自然语言处理等方面都已经取得了一定的成果。但是模型的效果往往是以牺牲模型的可解释性为代价的,在深度学习中网络模型越来越复杂,导致了它的解释性很差,我们很难向不是太了解相关方面的人来解释清楚得到的结果。
所以提高模型的可解释性,不仅可以让数据科学家更加深入的理解内部的工作原理,从而找到办法提升模型的效果;而且也可以让用户可以更好的理解模型得到的结果,这是一项很重要的工作。

比如一个模型预测一位特定病人患有流感。然后该预测被一个解释器(explainer)解读,其突出强调了对模型来说最重要的症状。使用这些关于模型背后的基本原理信息,医生现在就有能力选择信任或不信任这个模型了。

“白盒模型”和“黑盒模型”
“黑盒模型”是指比如神经网络、梯度增强模型等复杂的集成模型,他们往往有着很高的准确性,但是对于模型内部的细节往往很难理解。而且这些模型也很难提供在模型预测过程中,哪些特征起着更加重要的作用,以及特征之间是如何交互的
“白盒模型”指像线性回归、决策树等一些较为简单的模型,它们相对上面的“黑盒模型”预测能力会低一些,而且也并不一定可以表达出特征之间的交互,但是因为它较为简单,更容易解释和被人们理解。
总体来说,大多数的模型都是处于一种可解释性和性能的权衡状态,往往二者不可兼得。

提高模型可解释性的技术
为了提高模型的可解释性,可以从全局和局部两个角度进行考虑,对应着常用的有Aurrogate models和LIME两种方法,下面分别做一个简单的介绍。
Surrogate models
它是通过一些简单的解释性强的模型来解释那些更复杂的模型,比如线性回归和决策树由于解释简单,就经常被使用。创建Aurrogate models是为了表示复杂模型的决策过程,它是一个根据输入和模型预测而不是输入和目标值来训练模型。它在线性和非线性和非单调的基础上提供的是一种全局的可解释性,但并不能完美的反映模型内部的细节,不能表达内部特征之间的复杂联系,它主要是提供了一种全局性的描述。
构建Aurrogate models的过程可以总结如下:
- 根据数据集训练黑盒模型
- 在测试集上评估得到的模型
- 选择一个解释性强的合适的Aurrogate model 在测试集和模型的预测值上训练选择的Aurrogate model
- 度量Aurrogate model的错误,并解释Aurrogate model
LIME(Local interpretable Model-AgnosticExplanations)
源代码GitHub地址: https://github.com/marcotcr/lime
paper:https://arxiv.org/pdf/1602.04938v1.pdf
在python中使用工具包: pip install lime
LIME 背后的关键是:通过一个简单的模型局部地(在我们想要解释的预测的附近)逼近一个黑箱模型比全局地逼近这个模型要容易得多。
而且从方法的名字中我们就可以大致的理解它的意图,Local指的是局部保真,也就是说我们希望解释能够真实地反映分类器在被预测样本上的行为;这个解释要求是可以理解的(interpretable),即能够被人类读懂;LIME能够解释任何模型,而不需要进行模型适配,所以是与模型无关的(model-agnostic)。
想要做到模型无关,LIME所做的不是深入到模型的内部,而是扰乱输入,将输入值在其周围做微小的扰动来观察模型预测行为的变化,事实证明这种做法在可解释性上是有益的。然后我们根据这些扰动的数据点距离原始数据的距离分配权重,基于它们学习得到一个可解释的模型和预测结果。
比如我们可以通过改变人类可以理解的组件(比如词和图像的一部分)来扰乱输入,即便该模型的特征使用的是远远更加复杂的组件(比如词嵌入)。
第一个例子是判断在树蛙的识别中哪部分起着最重要的作用,如下图所示的一张包含林蛙的图片,我们想要知道图片中的那一部分在图像的识别中起着重要的作用,所以我们将可以将其分割成不同的部分。

然后我们选择性的将其中某些部分设置为灰色,从而达到前面所说的扰乱输入的目的。对于不同的有扰乱后的图片,模型将其识别为树蛙的概率会有不同,经过一系列的实验,我们可以得到树蛙的头部在识别的过程中起到了最重要的作用。

第二个例子是在任意图像上解释了谷歌的 Inception 神经网络。在此例中,就像上图中分类器预测树蛙是最有可能的类别,接下来是更低概率的台球和 气球。LIME的解释揭示该分类器主要专注于蛙的面部作为此预测分类的解释。而青蛙的爪子和眼与台球非常地相似,特别在绿色背景下,同样心脏也和红气球类似,所以也有一定的概率误认为是其他的东西。

LIME的使用步骤简单如下所示:
- 训练一个黑盒模型
- 局部感兴趣区域的样本点。可以从数据集中检索点,也可以人工生成数据点
- 根据新样本靠近感兴趣区域的程度对其进行加权,在加权后的数据集上选择一个可解释的代理模型
- 解释本地代理模型
有关如何提高机器学习复杂模型的可解释性仍然是一个很重要的问题亟待解决,所以有兴趣的仍然可以在这个方向做更多的研究。