机器学习是近来许多科学和技术进步的核心。随着计算机在诸如围棋比赛中战胜人类专业选手等案例里所展现出的进步,许多人开始思考机器能否成为更好的司机或更好的医生。
在机器学习的许多应用中,用户常常被要求信任那些帮助他们进行决策的模型。但医生肯定不能仅仅依据“模型就是这样说的”来给病人动手术。即使是在低风险的场景里,比如在 Netflix 上选择一部电影观看,我们也需要某种程度的信任来决定将几个小时时间交付给模型的决策。尽管许多机器学习模型都是黑箱,理解模型预测背后的基本原理将肯定有助于帮助用户决定什么时候可以信任模型的预测或是不信任。如图1所示,模型预测某个病人患有流感。然后该预测由一个解释器来解释,强调了对模型来说最重要的症状。基于这些模型背后的推理信息,医生现在就有能力选择是否信任这个模型了。
图1:向人类决策者解释单个预测。图片来源:Marco Tulio Ribeiro
从某种意义上说,工程师每次将一个机器学习模型应用于生产系统时,他或她都隐含地表示信任模型将能够做出合理的预测。这样的信心通常是通过评估保留数据验证的准确性或其它一些聚合评测来获得的。但是,任何实践过机器学习应用的人都知道,这些指标有时是非常有误导性的。有时候,不应该使用的数据意外地混入了训练数据和验证数据中。有时候,模型会给出一些尴尬得难以接受的错误。这些和其它的问题说明,在决定一个模型是否值得信任时,能理解模型的预测可以成为一个有用的工具。这是因为人类通常有较好的直觉和商业智慧,而这些都难以在评估指标中获得。如果在机器学习过程中有一个“挑选步骤”,即可以选择某些典型的预测去解释给人来听,那么这个过程就会类似于图2。
图2:向人类决策者解释一个模型。图片来源:Marco Tulio Ribeiro
在由Marco Tulio Ribeiro,Sameer Singh和Carlos Guestrin合作发表于 ACM 知识发现和数据挖掘年会(KDD2016)上的论文《“为什么我应该相信你?”解释任何分类器的预测》中,我们对信任和解释的问题进行了精细地探索。我们提出了局部可理解的与模型无关的解释技术(Local Interpretable Model-Agnostic Explanations: LIME),一种用于解释任何机器学习分类器的预测的技术,并在多种与信任相关的任务中评估了它的可用性。
LIME 背后的直觉
因为我们希望能做到与预测模型无关,所以为了能理解模型内部的行为,我们所能做的是去干涉输入,然后观察预测结果会怎样变化。实验表明这种做法在可解释性上是有用的,这是因为我们可以通过改变人类可以理解的组件(比如单词或图像的一部分)来改变输入,即使模型使用的是更加复杂的组件(比如词向量)作为输入的特征。
改变原有实例数据(比如移除部分单词或隐藏图像的一部分)去学到的一个可解读的模型(比如只带有少量非零系数的线性模型),并用它来近似原有的底层模型。通过这个方法我们就得到了一个对原有模型的解释。LIME 背后的关键直觉就是,通过一个简单的模型来局部地(在我们想要解释的预测的附近)逼近一个黑箱模型会比全局性地去逼近这个模型要容易得多。这个思想可以通过给改变后的输入图像设定权重的方式来实现,而权重的值是改变后的图形和我们想要解释的实例的相似度的值。上面流感预测的例子里,那三个强调的症状就可能是预测这种类型病人的黑箱模型的准确近似,但它们可能并不能代表该模型在所有病人上的行为方式。
图 3 所示的例子说明了LIME在图像分类上是如何工作的。假设我们想解释一个可以预测图片中是否包含树蛙的分类器,我们可以借助左边被分解成可解读的组件(连续超像素)的图像。
图3:将一张图片转换成可理解的多个组件。图片来源:Marco Tulio Ribeiro和Pixabay
如图 4 所示,我们通过“隐藏”一些可解读组件生成一个修改过的实例的数据集(在这个例子中是将隐藏的组件都设置成灰色)。对于每一个被修改过的实例,模型都会以一定概率判断图像实例是否包含树蛙。然后我们就在这个局部加权的数据集上得到了一个简单的(线性)回归模型,而我们更关心在更接近原始图像的修改过的实例上出现的错误。最后,我们给出带有最高正权重的超像素作为解释,将其它部分都改成灰色。
图4:用LIME解释一个预测。图片来源:Marco Tulio Ribeiro和Pixabay
例子
我们使用 LIME 解释了文本和图像领域内的大量分类器(比如随机森林、支持向量机和神经网络)。下面是一些由它所生成的解释的例子。
首先是一个本分类器的例子。20 newsgroups 数据集是此领域里一个有名的基准数据,多篇论文中描述了使用这个数据集的不同模型。从中我们选取两个比较难区分的分类,基督教(Christianity)和无神论(atheism),它们之间有很多相同的词汇。训练一个有 500 树的随机森林,我们在测试集上得到的准确率为 92.4%,高得惊人。如果准确率是我们能够取信的唯一标准,我们能完全信任这个模型。然而,让我们来看一下图 5 所示的对测试集中的一个例子的解释(使用开源软件包中的一句 Python 代码即可实现):
exp = explainer.explain_instance(test_example, classifier.predict_proba, num_features=6)
图5:20 newsgroups数据集上预测的解释。图片来源:Marco Tulio Ribeiro
这是一个分类器因为错误的原因却准确地预测了样本的分类的例子。额外的解释显示出“posting(邮件标头的一部分)”一词出现在无神论分类的训练集中21.6% 的样本上,但在基督教分类中只出现了两次。测试数据集中的情况类似,该词在 20% 的无神论样本中出现,但在基督教分类中仅出现了两次。数据集中的这种情况使得(这个数据集上的)分类问题要比真实世界的问题简单得多,但在实际应用里我们并不期待会有类似的模式出现。一旦你理解了这些模型实际是如何工作的,获得这些洞察就变得很简单,相应的也会促进模型的泛化能力更好。
第二个例子是解释谷歌的Inception神经网络模型对图像做的分类。如图 6所示,分类器预测这个图像是“树蛙”类的概率最高,而“台球”和“气球”的概率低一些。我们的解释揭示该分类器主要专注于蛙的面部作为此预测分类的依据。它也说明了为什么“台球桌”有非零概率,因为青蛙的爪子和眼与台球非常地相似,特别是在绿色背景下。同样,红色的心脏也和红气球类似。
图6:解释Inception神经网络模型生成的预测。头三名预测结果是“树蛙”、“台球桌”和“气球”。图片来源:Marco Tulio Ribeiro和Pixabay提供的树蛙、台球和热气球图片。
我们论文所述的实验表明机器学习专家和普通人都能从类似于图5和图6 这样的解释中获益。能够选择哪个模型泛化的更好,能够通过改变模型对模型进行改进,以及获得模型行为的关键洞察。
结论
为了有好地与机器学习系统进行交互,信任是非常重要的。我们认为能解释每个预测是获取信任的一个有效方式。LIME是一个方便机器学习实践者获得这样的信任的有效工具,也是一个值得加入他们的工具包的好选择(说了我们已经提供了开源包了吗?)。但在更好地解释机器学习模型方面还有很多工作可以做。我们期待看到这个方向上有更多的研究成果出现。下面的视频里概况地介绍了LIME。在我们的论文里有更多的细节。