一、概述
- 分类
通常一个深度学习模型是黑盒子的,但我们也希望有一些方法来使得模型是可解释的(Explainable/Interpretable)。可解释的机器学习技术分为Local Explanation和Global Explanation两种。
对于一个图像识别模型来说,Local Explanation指的是:
Why do you think this image is a cat?
Global Explanation指的是:
What do you think a “cat” looks like?
- 用途
为什么需要可解释的机器学习技术呢?可以考虑以下例子,也就是说在具体应用的场景中,模型不只需要告诉人们结果,也需要告诉人们为什么会有这样的结果:
①用机器来协助判断履历
具体能力?还是性别?
②用机器来协助判断犯人是否可以假释
具体事证?还是肤色?
③金融相关的决策常常依法需要提供理由
为什么拒绝了这个人的贷款?
④模型诊断:到底机器学到了什么
不能只看正确率吗?想想神马汉斯的故事
我们可以通过可解释的机器学习技术来改善我们的模型,同时可解释的目的并非要使得网络模型完全地可解释,它的主要目的是为了Make people (your customers, your boss, yourself) comfortable。
- Interpretable v.s. Powerful
某些模型本质上是Interpretable,比如线性模型,只需要看线性模型的权重大小即可较直观地解释模型的作用,但是这样简单的模型不够Powerful。而有的模型比如深度模型是比较Powerful,但是并不容易被解释,因此我们需要想办法使得深度模型变得可解释。
那么是不是有的模型既Interpretable又是Powerful的呢?可以考虑一下决策树,决策树具备比较强的分类能力,但也容易被解释,比如在下图中,我们可以通过决策树的结构来分析它的运作机理:
决策树
但事实上在使用决策树时,有时候决策树也会过于复杂而不易解释,有时候我们会使用随机森林,也会使模型变得难以解释:
决策树与随机森林
二、Local Explanation
- 遮挡组件的方法
组件
我们的操作方法就是剔除或者修改某一组件的值,然后来看是否会对分类结果产生影响。例如下图中我们使用灰色框来进行图片的遮挡,最终发现灰色框遮挡住蓝色区域时会使得分类错误,这说明模型的确是关注了图像中正确的地方得出了结论:
Local Explanation
需要注意这里灰色框的大小甚至颜色是需要作为超参数来调试的,这说明使用这种方法需要调试一些参数才会取得比较好的效果。
- 显著图的方法
另一种方式是为某一个组件添加微小的扰动,然后观察对应输出类别的变化幅度(分类问题会输出一个类别向量),如果输出的类别变化较大的话则说明这个组件对判定对象的类别有重要的作用:
显著图
有时也有可能判定对象类别的特征在计算梯度的时候并不显著,比如下图中,当大象的鼻子作为识别大象的依据时,如果大象的鼻子长到一定的程度即使在唱也不会使得大象
更加像一只大象,也就是说,这叫做梯度饱和(Gradient Saturation ):
example
解决这个问题的方法有两个,这里列出两个链接:
①Integrated gradient:https://arxiv.org/abs/1611.02639
②DeepLIFT:https://arxiv.org/abs/1704.02685
要注意的是这种方法也可能会受到攻击,举例来说,在下图中,使用Integrated gradient和DeepLIFT方法都得到了正确的显著图,而如果给图像添加一些噪声(这些噪声对人肉眼观察不会造成影响),就会造成图像分类不变但显著图中显著的位置变成了白云而非卡车的位置,这说明可解释的机器学习技术可以用来进行攻击:
attack
三、Global Explanation
- CNN的可视化
Global Explanation回答“What do you think a “cat” looks like?”的问题。在之前CNN的部分曾经提过的可视化方法也是一种可解释机器学习的方法,通过固定神经网络的参数然后通过最大化某一类别来试图得到神经网络模型心中的手写数字的样子。然而事实上通过的方法会得到一些类似杂讯的图:
Global Explanation
正则化
通过合理地设置正则化项,可以获得比较清晰、适合肉眼观看的,这里提供一个链接供参考:https://arxiv.org/abs/1506.06579,这里有比较好的效果图:
正则化
- 生成器的方法
Generator
生成器
以下是生成器生成的结果:
结果
四、用一个模型来解释另一个
- LIME
我们试图用一个容易解释的模型来解释另一个,被解释的模型相当于一个黑盒子。具体的操作方法是使得容易解释的模型拥有与被解释的模型同样的输入,然后通过使容易解释的模型尽量输出与被解释的模型同样的输出来训练它。在下图中,我们试图使用线性模型来解释深度模型:
用一个模型来解释另一个
但是这种方法的局限性在于线性模型的容量(capacity)太小而不足以解释深度模型,但是我们可以尝试用线性模型来解释深度模型的局部区域,这也就是LIME(Local Interpretable Model-Agnostic Explanations)技术的思想。
例如在下图中(以一维为例),我们采样了一些样本点然后使用线性模型来解释黑盒子的局部:
LIME
LIME的具体操作步骤是:
①选取一个想要解释的点;
②在这个点附近取样;
③使用线性模型(或者其他易于解释的模型)来进行拟合;
④解释线性模型(或者其他易于解释的模型)。
不应该认为LIME的方法就是在计算梯度,可以看到上述直线的斜率并不等于中间的样本点处的梯度。
需要注意第②步中,我们要在取样的点的周围进行取样,如果取样范围过大的话可能会造成下图中的问题,解释的效果就不会太好:
取样范围过大
- LIME举例
我们试图用一个线性模型来解释图片分类器中的一张图片。这里的步骤如下:
①选取一张需要解释的图片,比如我们使用一张跳蛙的图片:
待解释图片
②在这张图片附近取样,取样的方法是将这张图片分成多个区块:
取样
然后随机拿掉一部分片段从而获得这张图片“附近”的多个样本,然后计算模型对每张图片的“frog”这一类的输出:
计算输出
③使用线性模型来拟合,这里往往直接将图片转换成向量然后用线性模型来拟合是不现实的,通常我们需要将图片转换为一个低维的向量,比如转换成一个维度为分成的区块的数量的向量,每一维取值为0或1,0表示该区块被删除,1表示被保留,然后再使用线性模型进行拟合:
拟合
解释
- 使用决策树来解释另一个模型
使用决策树来解释另一个模型
我们使用的方法是树正则化(Tree regularization)的方式,即在训练被解释的模型时,要将用来解释它的决策树的复杂度作为一个正则化项来进行优化,也就是说在训练被解释的模型的同时也要保证解释它的决策树尽可能地不复杂。其优化函数如下:
我们面临的问题是使用平均深度无法做微分,因此这里提出一种有效的解决方案,也就是我们训练一个另外的神经网络(前馈网络即可),这个网络的输入是一个神经网络的参数,然后可以预测这个输入的神经网络转换成决策树后的平均深度。训练这个网络的方式是收集一些神经网络然后将它们转换成决策树获得其平均深度,然后就有了这个网络的一些输入和输出,也就可以训练这个网络了。有了这个网络以后我们就可以通过这个网络来获得,也就可以进行微分了。