机器学习7 -- 可解释学习

1 为什么需要可解释学习

可解释学习是一个比较大的话题,本文也仅仅是抛砖引玉。深度学习大多数情况下,我们关注的都是模型的指标,如ACC、F1、Bleu等,一般较少关注模型的可解释性。深度学习模型是一个黑盒,模型结构和参数调整很多时候也是摸着石头过河,给模型可解释性带来了很大难题。什么是模型可解释性呢?它一般分为两类情况

  1. local explanation,为什么这个样本被预测为某个类别。比如为什么imageNet的这张图片会被预测为猫?我们需要弄清楚图片中哪些关键像素和区域,能够很大程度决定分类类别。
  2. global explanation,某个类别模型认为应该具有哪些特性。比如什么样的图片会被预测为猫?我们需要弄清楚模型究竟学到了什么,以确定模型是make sense的

那为什么需要可解释学习呢,主要原因有

  1. 业务需求,比如银行贷款审批,需要告知客户为什么贷款申请不下来。这时候肯定不可能跟用户说,深度学习模型告诉我不能放贷给你。
  2. 模型诊断,分析模型为什么会出现这些badcase,从而通过增加相关样本、调整模型参数等方法进行修正,而尽量小的影响其他样本
  3. 模型分析,弄清楚模型究竟学到了什么,确定模型是否make sense,从而让模型是可信任的。比如银行贷款审批,模型主要利用了哪些特征,是否都集中在某几个特征上,比如用户年龄,这些特征是否又是make sense的

可解释学习不是要完完全全知道模型是怎么work的,毕竟这个难度还是相当相当大的。相对来说,人脑也是一个黑盒,很多时候的很多判断也无法解释。利用可解释学习,让模型变得可信,是我们的一大目标。

机器学习中,线性模型可解释是比较强的。透过权重参数,我们就可以知道哪些是关键的feature。但线性模型能力一般比较弱。深度模型则正好相反,能力很强,但是可解释性很差。我们当然必须首先保证模型能力,再追求可解释性,不能本末倒置。利用线性模型可解释性好的优点,可以帮助深度模型进行分析解释。

2 local explanation

局部可解释分析,主要是分析单个样本为什么会输出某个类别等。我们需要分析样本中哪个区域,对最终分类至关重要。对图片来说,可以按照像素、分块的方式来划分区域。对于文本来说,则可以按照word、sequence的方式来划分区域。

2.1 遮挡或修改区域

通过迭代修改图片或文本中的子区域,查看模型predict的变化。变化比较大则说明此区域比较关键。如下图三张图片,移动一个灰色小方格来迭代遮挡图片区域,然后再进行predict,如果predict变化比较大,则说明此时被遮挡的区域比较关键。
在这里插入图片描述
这种方法简单易懂,要注意

  1. 遮挡方块的大小比较关键。太小则每个区域对predict影响都不大,太大则相反。
  2. 遮挡方块的颜色也很关键,不一定要使用灰色的。

参考 Visualizing and understanding convolutional networks. ECCV 2014

2.2 梯度热力图

我们也可以对输入向量x 中的值进行微调,观察输出y的变化,从而确定哪些点对输出影响大。如下
在这里插入图片描述
这其实就等价于求每个点的梯度
在这里插入图片描述
通过梯度热力图,可以得到图片中的关键区域,如下图
在这里插入图片描述
热力图中比较大区域(白色点),正好也是原始图片中比较关键的区域。
参考 Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps. ICLR 2014

基于梯度的可解释学习也有一些要注意的地方

  1. 梯度饱和。样本的某个重要特征,对predict的影响,刚开始会比较大。随着特征的逐步变大,对predict影响基本不变了。这也是很好理解的,特征到一定大小,就基本可以决定predict了,再增加也没啥卵用了。
  2. 易受攻击。基于梯度的方法,当图片中加入一些噪声点时,梯度容易受到改变,从而影响最终热力图。

扫描二维码关注公众号,回复: 11636987 查看本文章

3 global explanation

3.1 输出可视化

可视化图片卷积后的feature map,可以知道模型是怎么决定类别的。同样的,对文本attention进行可视化,也可以知道哪些word关联性比较大。但一般feature map肉眼看上去比较杂乱,个人认为是因为每个值都比较大导致。那有什么方法可以解决这个问题呢,我们想到了加入正则,对模型进行限制。

如下图,加入L1正则前后,手写字识别feature map的变化。加入正则后,我们还是可以依稀看到feature map和对应类别图片有一定相似性的。
在这里插入图片描述

3.2 生成模型

我们还可以利用分类模型,来构造一个生成模型,从而生成一堆图片,确定模型是否make sense。
在这里插入图片描述
如上所示,z为一个低维向量,训练一个图片生成器,生成图片x。然后通过已知的图片分类模型(需要做可解释学习),输出类别y。有了图片生成器后,就可以通过一堆低维向量z,生成大量的图片了。查看图片是否和我们想要的类别相似,就可以观察模型是否make sense。个人认为这个方法还是比较困难的。

参考 Plug & Play Generative Networks: Conditional Iterative Generation of Images in Latent Space. CVPR 2016

3.3 利用其它模型

由于线性模型和决策树等树模型,相对深度模型,有比较好的可解释性。故可以利用它们来辅助解释深度模型。我们利用线性模型来模拟深度模型的输出。一般情况下,线性模型拟合能力弱,很难模拟深度模型。但对于某个局部区域,还是可以尝试的。如下图
在这里插入图片描述
利用LIME (Local Interpretable Model-Agnostic Explanations), 即可实现。实操中,直接使用lime包即可(pip install lime)。LIME工作原理和步骤主要有

  1. 确定需要解释的局部数据,比如一个data point
  2. 在这个数据附近进行采样,并通过模型得到输出
  3. 利用线性模型拟合这些输出
  4. 解释这个线性模型
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013510838/article/details/108336178